Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
Campos e tipos de criptografia
Nesta página
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
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.
Query de documentos em um campo criptografado de forma determinística
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.
Criptografia aleatória
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.
Suporte para criptografia de objetos e arrays
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.
Fazer query de documentos em um campo criptografado aleatoriamente
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 } }