Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Encriptación en uso

Puede usar el controlador de C++ para cifrar campos específicos de un documento mediante un conjunto de funciones llamadas cifrado en uso. Este cifrado permite que su aplicación cifre datos antes de enviarlos a MongoDB y consulte documentos con campos cifrados.

Advertencia

MongoDB 8.2 Problema conocido

Versión 8.2.0 de mongocryptd Es posible que no se ejecute en Windows. Este error afecta al cifrado en uso con el controlador si se especifica el argumento --logpath NUL al iniciar mongocryptd.

Para aprender más sobre este problema y cómo resolverlo, consulte Problemas conocidos en MongoDB 8.2 notas de versión.

El cifrado en uso impide que usuarios no autorizados vean datos de texto plano mientras se envían a MongoDB o mientras se encuentran en una base de datos cifrada. Para habilitar el cifrado en uso en una aplicación y autorizarla a descifrar datos, debe crear claves de cifrado a las que solo su aplicación pueda acceder. Solo las aplicaciones con acceso a sus claves de cifrado pueden acceder a los datos de texto plano descifrados. Si un atacante accede a la base de datos, solo podrá ver los datos cifrados, ya que no tiene acceso a las claves de cifrado.

Puedes utilizar el encriptación en uso para cifrar campos en tus documentos de MongoDB que contienen los siguientes tipos de datos sensibles:

  • Números de tarjetas de crédito

  • Direcciones

  • Información de salud

  • Información financiera

  • Cualquier otra información confidencial o de identificación personal (PII)

MongoDB ofrece las siguientes funcionalidades para habilitar el cifrado en uso:

Queryable Encryption es la funcionalidad de cifrado de última generación en uso, que se introdujo por primera vez como funcionalidad en vista previa en MongoDB Server versión 6.0 y como funcionalidad generalmente disponible (GA) en MongoDB 7.0. La Queryable Encryption permite buscar la igualdad de los campos cifrados y cifra cada valor de manera única.

Importante

La funcionalidad de vista previa no es compatible con MongoDB 7.0

La implementación de Queryable Encryption en MongoDB 6.0 es incompatible con la versión GA introducida en MongoDB 7.0. La funcionalidad de vista previa de Queryable Encryption ya no es compatible.

Para obtener más información sobre el cifrado consultable, consulte Cifrado consultable en el manual del servidor MongoDB.

El cifrado a nivel de campo del lado del cliente (CSFLE) admite la búsqueda de campos cifrados por igualdad. CSFLE difiere de Queryable Encryption en que puedes seleccionar, ya sea un algoritmo de cifrado determinista o aleatorio para cifrar campos. Cuando utilices CSFLE, solo podrás query campos cifrados que utilicen un algoritmo de cifrado determinista. Cuando utiliza un algoritmo de cifrado aleatorio para cifrar campos en CSFLE, pueden ser descifrados, pero no se pueden realizar consultas de igualdad en esos campos. Cuando utilices Queryable Encryption, no podrás especificar el algoritmo de cifrado, pero sí podrás consultar todos los campos cifrados.

Cuando cifras un valor de manera determinista, el mismo valor de entrada produce el mismo valor de salida. Si bien el cifrado determinista te permite realizar consultas en esos campos cifrados, los datos cifrados con baja cardinalidad son susceptibles a la ruptura de códigos mediante el análisis de frecuencia.

Tip

Para obtener más información sobre estos conceptos, consulta las siguientes entradas de Wikipedia:

Esta sección muestra cómo configurar CSFLE utilizando los siguientes mecanismos:

El cifrado automático te permite realizar operaciones de lectura y escritura cifradas sin especificar cómo cifrar los campos. Para habilitar el cifrado automático, utiliza uno de los siguientes métodos:

  • crypt_shared (Recomendado): Una librería dinámica que lee el esquema de cifrado para determinar qué campos cifrar y descifrar. Al utilizar esta librería, no es necesario iniciar un proceso separado para realizar un cifrado automático.

  • mongocryptdUn ejecutable binario preempaquetado con MongoDB Enterprise Server que utiliza reglas de cifrado automático especificadas para marcar los campos para el cifrado. mongocryptd se genera automáticamente cuando creas un cliente con CSFLE habilitado, pero puedes iniciar explícitamente el binario en una instancia de options::auto_encryption.

Importante

mongocryptd requiere MongoDB Enterprise Server v4.2 o superior.

Para obtener más información sobre cómo configurar el cifrado automático, consulta Instalar y Configurar una Librería CSFLE en el manual de MongoDB Server.

Puede usar la opción schema_map para especificar un esquema de cifrado automático. Los esquemas de cifrado contienen reglas especificadas por el usuario que identifican qué campos deben cifrarse y cómo cifrarlos.

Establece la opción schema_map a un documento JSON que se alinee con la JSON schema Draft 4 sintaxis estándar. Este documento debe incluir los nombres de los campos a cifrar y un objeto encrypt anidado bajo cada nombre de campo, que establezca las opciones de cifrado que se utilizarán.

Tip

Para obtener más información sobre los esquemas de cifrado, consulta Esquemas de cifrado CSFLE en el manual del Servidor MongoDB.

El siguiente código muestra la sintaxis para especificar un documento de esquema JSON:

auto data_key_id = client_encryption.create_data_key("local");
auto json_schema = document{} << "properties" << open_document << "encryptedFieldName" << open_document << "encrypt"
<< open_document << "keyId" << open_array << data_key_id << close_array << "bsonType"
<< "string"
<< "algorithm"
<< "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" << close_document << close_document
<< close_document << "bsonType"
<< "object" << finalize;

Para ver un ejemplo completo que utilice el documento anterior json_schema para configurar un esquema de cifrado automático, consulte el CSFLE automático ejemplo en el código fuente del driver.

Tip

También puede especificar un esquema de cifrado automático para el cifrado de campo del lado del servidor. Para ver un ejemplo completo, consulte el ejemplo de aplicación del cifrado de campo del lado del servidor en el código fuente del controlador.

El cifrado explícito te permite realizar operaciones cifradas utilizando la librería de cifrado del driver. Para utilizar el cifrado explícito, debes especificar la lógica de cifrado en toda la aplicación.

El siguiente ejemplo configura el cifrado explícito para una operación de inserción, que inserta un mensaje cifrado en la base de datos:

// Configure your MongoDB client's encryption options here
class client_encryption client_encryption(std::move(client_encryption_opts));
auto data_key_id = client_encryption.create_data_key("local");
options::encrypt encrypt_opts{};
encrypt_opts.key_id(data_key_id.view());
encrypt_opts.algorithm(options::encrypt::encryption_algorithm::k_deterministic);
// Explicitly encrypts a BSON value
auto to_encrypt = bsoncxx::types::bson_value::make_value("secret message");
auto encrypted_message = client_encryption.encrypt(to_encrypt, encrypt_opts);
// Explicitly decrypts a BSON value
auto decrypted_message = client_encryption.decrypt(encrypted_message);
// Inserts the encrypted value into the database
coll.insert_one(make_document(kvp("encryptedField", encrypted_message)));

Para ver un ejemplo completo que configura el cifrado explícito, consulte el ejemplo de cifrado explícito en el código fuente del controlador.

Puedes configurar el cifrado explícito y el descifrado automático, lo que está habilitado para todos los usuarios. Para configurar el descifrado automático sin cifrado automático, crea una instancia de options::auto_encryption y establece su campo bypass_auto_encryption en true. Luego, aplica estas opciones a tu cliente.

El siguiente ejemplo crea una instancia de options::auto_encryption para configurar el cifrado explícito con descifrado automático y luego pasa esta instancia de opciones al campo auto_encryption_opts de una options::client. Esto crea un cliente configurado para usar descifrado automático:

options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.bypass_auto_encryption(true);
options::client client_opts{};
client_opts.auto_encryption_opts(std::move(auto_encrypt_opts));
class client client_encrypted {uri{}, std::move(client_opts)};

Para ver un ejemplo completo que configura el cifrado explícito con descifrado automático, consulta el ejemplo Descifrado Automático de Cifrado Explícito en el código fuente del controlador.

Para obtener más información sobre CSFLE, consulte CSFLE en el manual de MongoDB Server.

Volver

TLS

En esta página