Docs Menu
Docs Home
/ /
Fundamentals

Cifrado de campos y consultabilidad

En esta guía, puede aprender sobre los siguientes temas de cifrado consultable:

  • Cómo especificar campos para el cifrado.

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

  • Tipos de consulta y cuáles puedes utilizar en campos cifrados.

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

El cifrado consultable le permite especificar qué campos desea cifrar automáticamente en su documento MongoDB.

Importante

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

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

Nombre de la clave
Tipo
¿Obligatorio?

path

String

Requerido

bsonType

String

Requerido

keyId

Binario

Requerido

queries

Objeto

Opcional, omítalo a menos que desee poder consultar el campo.

Este ejemplo muestra cómo crear un esquema JSON que especifica qué campos debe cifrar automáticamente la función de cifrado consultable.

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 la seguridad de la información personal identificable (PII) y la información médica confidencial, cree un esquema JSON que configure el cifrado consultable para cifrar automáticamente esos campos. El siguiente esquema JSON de ejemplo muestra cómo especificar los campos que se cifrarán:

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 clave de cifrado de datos (DEK) única, que el cifrado consultable utiliza para cifrar los campos. Para obtener más información sobre las DEK, consulte Gestión de claves de cifrado.

Incluya la propiedad queries en los campos que desee que sean consultables en su esquema JSON. Esto permite que un cliente autorizado emita consultas de lectura y escritura utilizando campos cifrados. Puede omitir la propiedad queries a menos que desee poder consultar el campo.

El siguiente fragmento de código muestra cómo agregar la propiedad queries al esquema JSON para que los campos patientId y patientInfo.ssn sean consultables.

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 consulta, consulte Tipos de consulta.

Puede habilitar el cifrado consultable en los campos que especifique en un esquema JSON de las siguientes maneras:

  • Pase el esquema JSON, representado por la constante encryptedFieldsObject, al cliente que la aplicación utiliza para crear la colección como se muestra en el siguiente fragmento de código:

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 el cifrado consultable antes de crear la colección. Habilitarlo después de crear la colección no cifra los campos de los documentos que ya están en ella.

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

  • Pase el objeto de campos cifrados a su llamada para crear una nueva colección como se muestra en el siguiente fragmento de código:

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 la colección explícitamente al usar el cifrado consultable, en lugar de hacerlo implícitamente mediante una operación de inserción. Al crear una colección con createCollection(), la operación crea un índice en los campos cifrados. Sin un índice, las consultas en campos cifrados podrían ser lentas.

El cifrado consultable le permite especificar en qué campos desea habilitar la consulta pasando un tipo de consulta a la opción queries en su objeto de campos cifrados.

El cifrado consultable actualmente admite los tipos de consulta none o equality. El nuevo marco de criptografía introducido como parte del cifrado consultable en MongoDB 6.0 está diseñado para admitir búsquedas cifradas expresivas adicionales, como operadores de rango y de cadena.

Un tipo de consulta none indica que los datos se cifrarán, pero no se prevé que sean consultables. No se pueden ejecutar consultas sobre datos cifrados con un tipo de consulta none. Se devolverán datos cifrados si las consultas se ejecutan sobre:

  • campos no cifrados

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

Importante

Tipos de query no especificados

Si el tipo de consulta no se especifica explícitamente, el tipo de consulta predeterminado será none y los datos no serán consultables.

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 generarán un error, incluso cuando se utilice un operador de consulta 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)

Al usar el cifrado consultable, puede elegir si desea que un campo cifrado sea consultable. Si no necesita realizar operaciones de lectura ni de escritura que requieran la lectura de un campo cifrado, puede optar por no habilitar las consultas en ese campo. Aun así, puede recuperar el documento completo consultando otros campos consultables o no 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.

Al habilitar la consulta en un campo cifrado, su colección requiere más espacio de almacenamiento. Estos nombres de colección, que empiezan por enxcol_., contienen metadatos de cifrado importantes.

Advertencia

No modifique las colecciones que comiencen con enxcol_..

Volver

Fundamentals

En esta página