Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / / /

Esquemas de criptografia

Nesta página

  • Visão geral
  • Esquemas de criptografia
  • criptografar palavra-chave
  • Palavras-chave encryptionMetadata
  • Palavras-chave padrãoProperties
  • Exemplo
  • Especifique o namespace
  • Especifique a chave de criptografia de dados
  • Escolher regras de criptografia
  • Especificar regras de criptografia
  • Veja o esquema completo
  • Saiba mais

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.

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.

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>" )]
}
}

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> }

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

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>
}
}

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>
}
}

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>
}
}
}

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.

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"
}
}
}
}

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"
}
}
}
}
}

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.

Voltar

Criptografia explícita