MongoDB admite el cifrado automático de campos en las operaciones de lectura y escritura cuando se utiliza cifrado a nivel de campo del lado del cliente. Puedes realizar un cifrado automático utilizando mongosh y controladores oficiales de MongoDB. Para obtener una lista completa de los controladores oficiales compatibles con soporte para CSFLE, consulte Compatibilidad de controladores Compatibilidad con el cifrado a nivel de campo del lado del cliente.
Cómo funcionan las escrituras y lecturas cifradas
Los siguientes diagramas muestran cómo la aplicación cliente y el controlador escriben y leen datos cifrados a nivel de campo.
Escrituras cifradas
Para las operaciones de escritura, el driver cifra los valores de los campos antes de escribirlos en la base de datos MongoDB.
El siguiente diagrama muestra los pasos realizados por la aplicación cliente y el driver para realizar un guardado de datos cifrados a nivel de campo:

Lecturas cifradas
Para operaciones de lectura, el driver encripta los valores de campo en la query antes de realizar la operación de lectura.
Para las operaciones de lectura que devuelven campos cifrados, el driver descifra automáticamente los valores cifrados solo si el driver fue configurado con acceso a la llave maestra de cliente (CMK) y las llaves de cifrado de datos (DEK) utilizadas para cifrar esos valores.
El siguiente diagrama muestra los pasos que realiza la aplicación cliente y el driver para query y descifrar datos cifrados a nivel de campo:

Habilitar cifrado a nivel de campo del lado del cliente automático
Para habilitar el cifrado automático, especifique la configuración de cifrado automático en la instancia MongoClient de su cliente.
Los siguientes fragmentos de código muestran cómo crear un cliente con cifrado automático habilitado en mongosh y controladores MongoDB:
var autoEncryptionOpts = { "keyVaultNamespace" : "<database>.<collection>", "kmsProviders" : { ... }, "schemaMap" : { ... } } cluster = Mongo( "<Your Connection String>", autoEncryptionOpts );
var clientSettings = MongoClientSettings.FromConnectionString(_connectionString); var autoEncryptionOptions = new AutoEncryptionOptions( keyVaultNamespace: keyVaultNamespace, kmsProviders: kmsProviders, schemaMap: schemaMap, extraOptions: extraOptions); clientSettings.AutoEncryptionOptions = autoEncryptionOptions; var client = new MongoClient(clientSettings);
autoEncryptionOpts := options.AutoEncryption(). SetKmsProviders(provider.Credentials()). SetKeyVaultNamespace(keyVaultNamespace). SetSchemaMap(schemaMap). SetExtraOptions(extraOptions) client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOpts))
MongoClientSettings clientSettings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://localhost:27017")) .autoEncryptionSettings(AutoEncryptionSettings.builder() .keyVaultNamespace(keyVaultNamespace) .kmsProviders(kmsProviders) .schemaMap(schemaMap) .extraOptions(extraOptions) .build()) .build(); MongoClient mongoClient = MongoClients.create(clientSettings);
const secureClient = new MongoClient(connectionString, { monitorCommands: true, autoEncryption: { keyVaultNamespace, kmsProviders, schemaMap: patientSchema, extraOptions: extraOptions, }, });
fle_opts = AutoEncryptionOpts( kms_providers, key_vault_namespace, schema_map=patient_schema, **extra_options ) client = MongoClient(connection_string, auto_encryption_opts=fle_opts)
Para obtener más información sobre la configuración específica de MongoClient para CSFLE, consulta Opciones de MongoClient para CSFLE.
Aplicación de cifrado a nivel de campo del lado del servidor
MongoDB admite la validación de esquemas para aplicar el cifrado de campos específicos en una colección. Los clientes que realizan el cifrado automático a nivel de campo del lado del cliente tienen un comportamiento específico según la configuración de la conexión a la base de datos:
Si el objeto autoEncryptionOpts
schemaMapde la conexión contiene una clave para la colección especificada, el cliente utiliza ese objeto para realizar el cifrado automático a nivel de campo e ignora el esquema remoto. Como mínimo, las reglas locales deben cifrar aquellos campos que el esquema remoto marque como que requieren cifrado.Si el objeto de conexión autoEncryptionOpts
schemaMapno contiene una clave para la colección especificada, el cliente descargará el esquema remoto del lado del servidor para la colección y lo usará para realizar el cifrado automático a nivel de campo.Importante
Consideraciones sobre el comportamiento
MongoDB utiliza la validación de esquema para aplicar el cifrado de campos específicos en una colección. Sin un esquema del lado del cliente, el cliente descarga el esquema del lado del servidor para la colección, a fin de determinar qué campos va a cifrar. Para evitar este problema, utilice la validación de esquemas del lado del cliente.
Dado que CSFLE y el cifrado consultable no proporcionan un mecanismo para verificar la integridad de un esquema, confiar en un esquema del servidor implica confiar en que el esquema del servidor no ha sido manipulado. Si un adversario compromete el servidor, puede modificar el esquema para que un campo previamente cifrado ya no esté etiquetado para cifrado. Esto hace que el cliente envíe valores de texto sin formato para ese campo.
Para aprender a configurar la aplicación de CSFLE del lado del servidor, consulta Aplicación del esquema del lado del servidor CSFLE.