Docs Menu
Docs Home
/ /

Llaves de cifrado y almacenes de claves

En esta guía, puedes aprender detalles acerca de los siguientes componentes de la Encriptación en Uso:

  • llave de cifrado de datos (DEK)s

  • Claves maestras del cliente (CMK)s

  • Colecciones de Bóvedas de Llaves

  • Sistema de gestión de claves (KMS)

Para ver guías paso a paso que demuestren cómo usar los componentes anteriores para configurar un cliente con Queryable Encryption o Cifrado en el lado del cliente a nivel de campo, consulta los siguientes recursos:

  • Inicio rápido de Queryable Encryption

  • Queryable Encryption Tutorial de cifrado automático

  • Inicio rápido CSFLE

  • Tutorial de cifrado automático CSFLE

El cifrado en uso utiliza una jerarquía de llaves multinivel para proteger tus datos, a menudo llamada "cifrado de sobre" o "llaves de envolvimiento".

Una Clave maestra de cliente (CMK), a veces llamada clave de sistema de gestión de claves (KMS), es la clave de nivel superior que creas en tu proveedor de claves aprovisionado por el cliente, como un KMS en la nube. La llave maestra de cliente cifra las llaves de cifrado de datos (DEK), que a su vez cifran los campos en tus documentos. Sin acceso a una llave maestra de cliente, tu aplicación cliente no puede descifrar los DEK asociados.

MongoDB almacena las DEK, cifradas con tu llave maestra de cliente, en la Colección de Bóvedas de Llaves como documentos BSON. MongoDB nunca puede descifrar las DEKs, ya que la gestión de claves es del lado del cliente y está controlada por el cliente.

Si borras un DEK, todos los campos cifrados con ese DEK se vuelven permanentemente ilegibles. Si borras una llave maestra de cliente, todos los campos cifrados con una DEK que utilizan esa llave maestra de cliente se vuelven permanentemente ilegibles.

Advertencia

La llave maestra de cliente es la clave más sensible en Queryable Encryption. Si tu llave maestra de cliente se ve comprometida, todos tus datos cifrados pueden ser descifrados. Utiliza un sistema de gestión remota de claves para almacenar tu llave maestra de cliente.

Importante

Utilizar un proveedor de Key Management Service remoto

Almacene su clave maestra de cliente en un sistema de gestión de claves remoto (KMS).

Para obtener más información sobre por qué debes usar un KMS remoto, consulta Razones para Usar un Sistema de gestión remota de claves.

Para ver una lista de todos los proveedores de KMS compatibles, consulte la página Proveedores de KMS.

Rotea tu llave maestra de cliente manual o automáticamente en tu proveedor de claves aprovisionado. MongoDB no tiene visibilidad en este proceso. Una vez que roten la llave maestra de cliente, MongoDB la utiliza para envolver todas las nuevas CLD. No vuelve a envolver las CLD cifrados existentes. Estos siguen estando envueltos con la llave maestra de cliente anterior.

Para rotar algunas o todas las DEK cifradas en su almacén de claves, utilice el KeyVault.rewrapManyDataKey() método. Vuelve a envolver sin problemas las claves con la nueva llave maestra de cliente especificada, sin interrumpir tu aplicación. Los DEKs en sí mismos se dejan sin cambios después de envolverlos nuevamente con la nueva llave maestra de cliente.

Para obtener detalles sobre la rotación de llaves, consulta Rotar llaves de cifrado.

Su Colección de Bóvedas de Llaves es la colección de MongoDB que utiliza para almacenar los documento cifrado de la llave de cifrado de datos (DEK). Los documentos DEK son documentos BSON que contienen DEK y tienen la siguiente estructura:

{
"_id" : UUID(<string>),
"status" : <int>,
"masterKey" : {<object>},
"updateDate" : ISODate(<string>),
"keyMaterial" : BinData(0,<string>),
"creationDate" : ISODate(<string>),
"keyAltNames" : <array>
}

Cree su Colección de Bóvedas de Llaves como lo haría con una colección estándar de MongoDB. Tu Colección de Bóvedas de Llaves debe tener un índice único en el campo keyAltNames. Para verificar si el índice único existe, ejecuta el comando listIndexes en la Colección de Bóvedas de Llaves:

1db.runCommand({
2 listIndexes: "__keyVault",
3});
1{
2 cursor: {
3 id: Long("0"),
4 ns: 'encryption.__keyVault',
5 firstBatch: [
6 { v: 2, key: { _id: 1 }, name: '_id_' }
7 ]
8 },
9 ok: 1,
10}

Si el índice único no existe, su aplicación debe crearlo antes de realizar la gestión de DEK.

Para aprender cómo crear una colección en MongoDB, consulta Bases de datos y colecciones.

Tip

Funcionalidad de mongosh

El método mongosh KeyVault.createKey() crea automáticamente un índice único en el campo keyAltNames si no existe uno.

Para ver diagramas detallando cómo tu DEK, llave maestra de cliente y la Colección de Bóvedas de Llaves interactúan en todas las arquitecturas de proveedor KMS admitidas, consulta Proveedores KMS.

Puedes usar cualquier namespace que no sea de administrador para almacenar tu Colección de Bóvedas de Llaves. Por convención, los ejemplos a lo largo de esta documentación utilizan el encryption.__keyVault namespace.

Advertencia

No utilices la base de datos admin para almacenar colecciones relacionadas con el cifrado. Si utilizas la base de datos admin para esta colección, es posible que tu cliente de MongoDB no pueda acceder ni descifrar tus datos debido a la falta de permisos.

Las aplicaciones con acceso read a la Colección de Bóvedas de Llaves pueden recuperar llave de cifrado de datos (DEK) cifradas consultando la colección. Sin embargo, solo las aplicaciones con acceso a la clave maestra del cliente (CMK) utilizada para cifrar una DEK pueden utilizar esa DEK para cifrado o descifrado. Debes conceder a tu aplicación acceso tanto a la Colección de Bóvedas de Llaves como a tu llave maestra de cliente para cifrar y descifrar documentos con un DEK.

Para aprender cómo otorgar acceso a una colección de MongoDB, consulta Gestionar usuarios y roles en el manual de MongoDB.

Para aprender cómo otorgar acceso a tu aplicación a tu llave maestra de cliente, consulta el Tutorial de cifrado automático con Queryable Encryption o el Tutorial de cifrado automático CSFLE.

Por defecto, MongoDB almacena la Colección de Bóvedas de Llaves en el clúster conectado. MongoDB también es compatible con el alojamiento de la Colección de Bóvedas de Llaves en una implementación distinta de MongoDB que el clúster conectado. Las aplicaciones deben tener acceso tanto al clúster que aloja su Colección de Bóvedas de Llaves como al clúster de conexión para realizar operaciones de Queryable Encryption.

Para especificar el clúster que aloja tu Colección de Bóvedas de Llaves, utiliza el campo keyVaultClient del objeto MongoClient de tu cliente. Para obtener más información sobre las opciones de configuración específicas en el objeto MongoClient de tu cliente, consulta Opciones de MongoClient para Queryable Encryption u Opciones de MongoClient para CSFLE.

Para añadir un DEK a tu Colección de Bóvedas de Llaves, utiliza el método createKey de un objeto ClientEncryption.

Para borrar o actualizar un DEK, usa uno de los siguientes mecanismos:

  • El método rewrapManyDataKey

  • Standard CRUD operations

Para obtener más información sobre el método rewrapManyDataKey, consulta la documentación del método para tu cliente o driver:

Tip

Funcionalidades específicas de mongosh

Para ver un tutorial que muestra cómo crear una clave de cifrado de datos, consulta el Inicio rápido de Queryable Encryption o el Inicio rápido de CSFLE.

Volver

Primitivas criptográficas

En esta página