Esquemas de criptografia
Nesta página
Visão geral
Nesta página, você pode aprender como criar um esquema de criptografia para criptografia automática de nível de campo do lado do cliente (CSFLE), bem como ver um exemplo detalhando como criar o esquema de criptografia usado no Início Rápido do CSFLE.
Esquemas de criptografia
Um esquema de criptografia é um JSON objeto que usa um subconjunto rigoroso de JSON schema 4 sintaxe padrão junto com as palavras-chave encrypt
e encryptMetadata
para definir as regras de criptografia que especificam como seu cliente habilitado para CSFLE deve criptografar seus documentos.
As regras de criptografia são pares de chave-valor JSON que definem como seu aplicativo cliente criptografa seus campos. Você deve especificar ou herdar as seguintes informações em uma regra de criptografia:
O algoritmo usado para criptografar seu campo
Qual chave de criptografia de dados (DEK) seu cliente usa para criptografar seu campo
O tipo BSON do seu campo
As regras de criptografia devem conter a palavra-chave encrypt
ou encryptMetadata
.
Para saber mais sobre os algoritmos de criptografia que você pode definir em seu esquema de criptografia, consulte Campos e tipos de criptografia.
Para saber mais sobre diretório de dados, consulte Chaves e Cofres de Chaves.
criptografar palavra-chave
A palavra-chave encrypt
define uma regra de criptografia para um único campo em um documento BSON. As regras de criptografia que contêm a palavra-chave encrypt
têm a seguinte estrutura:
"<field-name-to-encrypt>": { "encrypt": { "algorithm": "<encryption algorithm to use>", "bsonType": "<bson type of field>", "keyId": [UUID("<_id of your Data Encryption Key>" )] } }
Palavras-chave encryptionMetadata
A palavra-chave encryptMetadata
define as regras de criptografia que os elementos filhos da tag irmanada properties
herdam. As regras de criptografia que contêm encryptMetadata
têm a seguinte estrutura:
"bsonType": "object", "encryptMetadata": { "algorithm": "<encryption algorithm inherited by children of properties field>", "keyId": [UUID("<_id of your Data Encryption Key>" )] }, "properties": { <object to inherit encryptMetadata values> }
Palavras-chave padrãoProperties
Você pode usar a palavra-chave patternProperties
em seu esquema de criptografia para definir regras de criptografia para todos os campos com nomes que correspondam a uma expressão regular. Isso permite que você especifique vários campos para criptografia com base em uma única expressão regular, ou especificá-los usando apenas uma parte do nome do campo. A palavra-chave patternProperties
substitui properties
em seu esquema de criptografia.
Especifique as regras de criptografia com patternProperties
usando a seguinte estrutura:
"bsonType": "object", "patternProperties": { "<regular expression to match>": { "encrypt": { "algorithm": "<encryption algorithm to use>", "bsonType": "<bson type of field>", "keyId": [UUID("<_id of your Data Encryption Key>" )] } }
Para ver um exemplo de como usar o patternProperties
, consulte Esquema de criptografia - Criptografar com propriedades de padrão
Exemplo
Este exemplo explica como gerar o esquema de criptografia usado na etapa Criar um esquema de criptografia para seus documentos do Início rápido do CSFLE.
No Início Rápido, você insere documento com a seguinte estrutura na collection patients
do reconhecimento de data center medicalRecords
:
{ "_id": { "$oid": "<_id of your document>" }, "name": "<name of patient>", "ssn": <integer>, "bloodType": "<blood type>", "medicalRecords": [ { "weight": <integer>, "bloodPressure": "<blood pressure>" } ], "insurance": { "provider": "<provider name>", "policyNumber": <integer> } }
Especifique o namespace
Na raiz do esquema de criptografia, especifique o namespace ao qual seu esquema de criptografia se aplica. Especifique o seguinte para criptografar e descriptografar documento na collection patients
do reconhecimento de data center medicalRecords
:
{ "medicalRecords.patients": { <the schema created in the following steps of this example> } }
Especifique a chave de criptografia de dados
No Início Rápido, você criptografa todos os campo do documento com um único diretório de dados (DEK). Para configurar todos os campos em seus documentos para usar um único DEK para criptografia e descriptografia, especifique o _id
da sua DEK com a palavra-chave encryptMetadata
na raiz do seu esquema de criptografia da seguinte maneira:
{ "medicalRecords.patients": { "bsonType": "object", "encryptMetadata": { "keyId": [UUID("<_id of your Data Encryption Key>" )] }, "properties": { <the schema created in the following steps of this example> } } }
Escolher regras de criptografia
Você decide criptografar os seguintes campos com os seguintes algoritmos de criptografia:
Nome do campo | Algoritmo de criptografia | Tipo de JSON |
---|---|---|
ssn | Determinístico(a) | Int |
bloodType | Aleatório | String |
medicalRecords | Aleatório | Array |
insurance.policyNumber | Determinístico(a) | Int |
Você escolhe criptografar os campos ssn
e insurance.policyNumber
com criptografia determinística pelos seguintes motivos:
Você deseja ser capaz de consultar esses campos.
Os valores nesses campos têm uma alta cardinalidade, portanto, esses dados não são suscetíveis a um ataques de análise de frequência.
Você escolhe criptografar o campo bloodType
com criptografia aleatória pelos seguintes motivos:
Você não planeja fazer query neste campo.
Os valores nesse campo têm baixa cardinalidade, tornando-os suscetíveis a um ataques de análise de frequência se você os criptografar de forma determinística.
Você deve criptografar o campo medicalRecords
com criptografia aleatória, pois o CSFLE não oferece suporte à criptografia determinística de campos do tipo array
.
Dica
Para saber mais sobre as operações de criptografia automática com e sem suporte, consulte Operações com suporte para criptografia automática.
Especificar regras de criptografia
Para criptografar o campo ssn
com criptografia determinística, especifique o seguinte em seu esquema de criptografia:
"ssn": { "encrypt": { "bsonType": "int", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" } }
Para criptografar o campo bloodType
com criptografia aleatória, especifique o seguinte em seu esquema de criptografia:
"bloodType": { "encrypt": { "bsonType": "string", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } }
Para criptografar o campo medicalRecords
com criptografia aleatória, especifique o seguinte em seu esquema de criptografia:
"medicalRecords": { "encrypt": { "bsonType": "array", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } }
Para criptografar o campo insurance.policyNumber
com criptografia determinística, especifique o seguinte em seu esquema de criptografia:
"insurance": { "bsonType": "object", "properties": { "policyNumber": { "encrypt": { "bsonType": "int", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" } } } }
Veja o esquema completo
O esquema de criptografia completo para o Início Rápido é o seguinte:
{ "medicalRecords.patients": { "bsonType": "object", "encryptMetadata": { "keyId": [UUID("<_id of your Data Encryption Key>" )] }, "properties": { "insurance": { "bsonType": "object", "properties": { "policyNumber": { "encrypt": { "bsonType": "int", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" } } } }, "medicalRecords": { "encrypt": { "bsonType": "array", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } }, "bloodType": { "encrypt": { "bsonType": "string", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } }, "ssn": { "encrypt": { "bsonType": "int", "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" } } } } }
Saiba mais
Para saber mais sobre esquemas de criptografia, consulte Esquemas de criptografia CSFLE
Para saber mais sobre criptografia automática, consulte Criptografia automática.
Para visualizar o Início rápido, consulte Início rápido.