Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Campos e tipos de criptografia

Nesta página

  • Criptografia determinística
  • Query de documentos em um campo criptografado de forma determinística
  • Criptografia aleatória
  • Suporte para criptografia de objetos e arrays
  • Fazer query de documentos em um campo criptografado aleatoriamente

Esta página descreve os tipos de criptografia usados pelo MongoDB para executar a criptografia no nível do campo do lado do cliente (CSFLE). Para executar o CSFLE, o MongoDB usa os seguintes tipos de algoritmos de criptografia:

  • Criptografia determinística

  • Criptografia aleatória

O algoritmo de criptografia determinístico garante que um determinado valor de entrada sempre criptografe para o mesmo valor de saída toda vez que o algoritmo for executado. Enquanto a criptografia determinística fornece maior suporte para operações de leitura, os dados criptografados com baixa cardinalidade são suscetíveis à recuperação da análise de frequência.

Para campos sensíveis que não são usados em operações de leitura, os aplicativos podem usar criptografia aleatória para melhorar a proteção contra a recuperação da análise de frequência.

Importante

Objetos e arrays com criptografia determinística não suportados

A criptografia de objetos e arrays inteiros não é compatível com a criptografia determinística. Para saber mais e ver um exemplo, consulte Suporte para criptografia de objetos e arrays.

Você pode consultar campos criptografados deterministicamente usando o driver padrão do MongoDB e os métodos mongosh .

Para visualizar a lista completa de todos os operadores de query suportados em campos criptografados deterministicamente, consulte Operações suportadas para criptografia automática.

Para saber mais sobre leituras em dados criptografados, consulte Leituras criptografadas.

Observação

Consultando de clientes sem CSFLE configurado

Quando você consulta um campo criptografado usando um cliente que não está configurado para usar a criptografia no nível do campo do lado do cliente (CSFLE), a consulta retorna um valor nulo. Um cliente sem CSFLE configurado não pode executar uma query em um campo criptografado.

O algoritmo de criptografia aleatória garante que um determinado valor de entrada sempre seja criptografado para um valor de saída diferente toda vez que o algoritmo for executado. Embora a criptografia aleatória forneça as mais fortes garantias de confidencialidade de dados, ela também impede o suporte para quaisquer operações de leitura que devam operar no campo criptografado para avaliar a query.

Para campos confidenciais usados em operações de leitura, os aplicativos devem usar criptografia determinística para melhorar o suporte de leitura em campos criptografados.

A criptografia de objetos ou arrays inteiros só é suportada com criptografia aleatória.

Por exemplo, considere o seguinte documento:

{
"personal_information" : {
"ssn" : "123-45-6789",
"credit_score" : 750,
"credit_cards" : [ "1234-5678-9012-3456", "9876-5432-1098-7654"]
},
"phone_numbers" : [ "(212) 555-0153" ]
}

A criptografia dos campos personal_information e phone_numbers usando o algoritmo de criptografia aleatória criptografa todo o objeto. Embora isso proteja todos os campos aninhados sob esses campos, também impede queries nesses campos aninhados.

Para saber mais sobre as operações suportadas para criptografia, consulte Operações suportadas para criptografia automática.

Você não pode executar query diretamente de documentos em um campo criptografado aleatoriamente. No entanto, você pode usar outro campo para localizar o documento que contém uma aproximação dos dados de campo criptografados aleatoriamente.

Por exemplo, considere o seguinte documento onde o campo ssn é codificado aleatoriamente:

{
"_id": "5d6ecdce70401f03b27448fc",
"name": "Jon Doe",
"ssn": 241014209,
"bloodType": "AB+",
"medicalRecords": [
{
"weight": 180,
"bloodPressure": "120/80"
}
],
"insurance": {
"provider": "MaestCare",
"policyNumber": 123142
}
}

Em vez de executar queries do campo ssn , você pode adicionar outro campo de texto sem formatação chamado last4ssn que contém os últimos 4 dígitos do campo ssn . Você pode então fazer a query no campo last4ssn como um proxy para ssn:

{
"_id": "5d6ecdce70401f03b27448fc",
"name": "Jon Doe",
"ssn": 241014209,
"last4ssn": 4209,
"bloodType": "AB+",
"medicalRecords": [
{
"weight": 180,
"bloodPressure": "120/80"
}
],
"insurance": {
"provider": "MaestCare",
"policyNumber": 123142
}
}
← Gerenciamento das chaves de criptografia