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
/ /
Fundamentals

Cifrado de campos y consultabilidad

En esta guía, puedes aprender sobre los siguientes temas de Queryable Encryption:

  • Cómo especificar los campos para el cifrado.

  • Cómo especificar si un campo cifrado se puede consultar cuando se crea una colección.

  • Tipos de query y cuáles puede utilizar en campos cifrados.

  • Qué tener en cuenta al decidir si habilitar consultas en un campo cifrado.

La Cifrado Consultable permite especificar qué campos se desea cifrar automáticamente en el documento MongoDB.

Importante

Puede especificar cualquier campo en su documento para el cifrado, excepto el _id .

Para especificar campos para cifrado y consulta, defina un JSON schema que incluya las siguientes propiedades:

Nombre de la clave
Tipo
¿Requerido?

path

String

Requerido

bsonType

String

Requerido

keyId

Binario

Requerido

queries

Objeto

Opcional, omitir a menos que se quiera poder query el campo.

Este ejemplo muestra cómo crear un JSON schema que especifique qué campos debe cifrar automáticamente la función Queryable Encryption.

Considere el siguiente documento que contiene información de identificación personal (PII), información de tarjetas de crédito e información médica confidencial:

{
"firstName": "Jon",
"lastName": "Snow",
"patientId": 12345187,
"address": "123 Cherry Ave",
"medications": [
"Adderal",
"Lipitor"
],
"patientInfo": {
"ssn": "921-12-1234",
"billing": {
"type": "visa",
"number": "1234-1234-1234-1234"
}
}
}

Para garantizar que la Información de identificación personal (PII) y la información médica confidencial permanezcan seguras, crea un JSON schema que configure Queryable Encryption para cifrar automáticamente esos campos. El siguiente JSON schema de muestra muestra cómo puede especificar qué campos cifrar:

const encryptedFieldsObject = {
fields: [
{
path: "patientId",
keyId: "<unique data encryption key>",
bsonType: "int"
},
{
path: "patientInfo.ssn",
keyId: "<unique data encryption key>",
bsonType: "string"
},
{
path: "medications",
keyId: "<unique data encryption key>",
bsonType: "array"
},
{
path: "patientInfo.billing",
keyId: "<unique data encryption key>",
bsonType: "object"
},
]
}

Tenga en cuenta que el campo keyId requiere una llave de cifrado de datos (DEK) única que Queryable Encryption utiliza para encriptar los campos. Para obtener más información sobre las DEK, consulte Gestión de llaves de cifrado.

Incluye la propiedad queries en los campos que deseas que sean consultables en tu JSON schema. Esto permite que un cliente autorizado emita queries de lectura y guardar utilizando campos cifrados. Puede omitir la propiedad queries a menos que quiera poder consultar el campo.

El siguiente snippet muestra cómo agregar la propiedad queries al esquema JSON para que los campos patientId y patientInfo.ssn sean aptos para consultas.

const encryptedFieldsObject = {
fields: [
{
path: "patientId",
keyId: "<unique data encryption key>",
bsonType: "int",
queries: { queryType: "equality" }
},
{
path: "patientInfo.ssn",
keyId: "<unique data encryption key>",
bsonType: "string",
queries: { queryType: "equality" }
},
{
path: "medications",
keyId: "<unique data encryption key>",
bsonType: "array"
},
{
path: "patientInfo.billing",
keyId: "<unique data encryption key>",
bsonType: "object"
},
]
}

Para obtener más información sobre los tipos de queries, consulta Tipos de Query.

Puedes habilitar la encriptación Queryable en los campos que especifiques en un esquema JSON de las siguientes maneras:

  • Pase el JSON schema, representado por la constante encryptedFieldsObject, al cliente que utiliza la aplicación para crear la colección, como se muestra en el siguiente snippet:

const client = new MongoClient(uri, {
autoEncryption: {
keyVaultNameSpace: "<your keyvault namespace>",
kmsProviders: "<your kms provider>",
extraOptions: {
cryptSharedLibPath: "<path to FLE Shared Library>"
},
encryptedFieldsMap: {
"<databaseName.collectionName>": { encryptedFieldsObject }
}
}
...
await client.db("<database name>").createCollection("<collection name>");
}

Nota

Es importante habilitar Queryable Encryption antes de crear la colección. Si se habilita el cifrado interrogable después de crear la colección, los campos de los documentos que ya están en esa colección no se cifran.

Para obtener más información sobre las opciones de configuración de autoEncryption, consulte la sección Opciones MongoClient para Queryable Encryption.

  • Pasa el objeto de campos cifrados a tu llamada para crear una nueva colección, como se muestra en el siguiente snippet:

await encryptedDB.createCollection("<collection name>", {
encryptedFields: encryptedFieldsObject
});

Tip

Para el más alto nivel de seguridad, especifique los campos cifrados tanto al crear la colección como al crear un cliente para acceder a la colección. Esto garantiza que si se compromete la seguridad del servidor, la información sigue estando cifrada a través del cliente.

Importante

MongoDB recomienda crear explícitamente tu colección cuando uses Queryable Encryption, en lugar de crear implícitamente la colección mediante una operación de inserción. Cuando creas una colección usando createCollection(), la operación crea un índice sobre los campos cifrados. Sin un índice, las consultas en campos cifrados podrían ejecutarse lentamente.

El cifrado consultable (Queryable Encryption) permite especificar en qué campos se puede habilitar la interrogación al proporcionar un tipo de query en la opción queries del objeto de campos cifrados.

Queryable Encryption actualmente admite los tipos de consultas none o equality. El nuevo marco de criptografía, introducido como parte de Queryable Encryption en MongoDB 6.0, está diseñado para adaptarse a búsquedas cifradas expresivas adicionales, como operadores de rango y de string.

Un tipo de consulta de none indica que los datos serán cifrados, pero no está previsto que sean consultables. No se pueden ejecutar queries sobre datos cifrados con un tipo de query none. Se devolverán datos cifrados si se ejecutan queries en:

  • campos no cifrados

  • campos con un tipo de query de equality en la misma colección y descifrados en el cliente.

Importante

Tipos de query no especificados

Si el tipo de query no se especifica explícitamente, el tipo de query se establecerá por defecto en none y los datos no se podrán consultar.

El tipo de consulta equality le permite consultar campos cifrados utilizando las siguientes expresiones:

Nota

Las consultas que comparan un campo cifrado con null o con una expresión regular darán lugar a un error, incluso cuando se utilice un operador del query compatible.

El cifrado consultable que utiliza el equality tipo de consulta no admite operaciones de lectura o escritura en un campo cuando la operación compara el campo cifrado con cualquiera de los siguientes tipos BSON:

  • double

  • decimal128

  • object

  • array

  • javascriptWithScope (Obsoleto)

Cuando utilizas Queryable Encryption, puedes decidir si hacer que un campo encriptado sea consultable. Si no necesita realizar operaciones de lectura o de escritura que requieran leer un campo cifrado, puede decidir no habilitar las consultas en ese campo. Aún puedes recuperar todo el documento consultando otros campos que sean consultables o no estén cifrados.

Al habilitar la consulta de campos cifrados, el Cifrado Consultable crea un índice para cada campo cifrado, lo que puede aumentar la duración de las operaciones de escritura en dicho campo. Cuando una operación de escritura actualiza un campo indexado, MongoDB también actualiza el índice relacionado.

Cuando habilitas las consultas sobre un campo cifrado, tu colección requiere más espacio de almacenamiento. Estos nombres de colecciones, que comienzan con enxcol_., contienen metadatos de cifrado importantes.

Advertencia

No modifique las colecciones que comiencen con enxcol_..

Volver

Fundamentals

En esta página