Campos e tipos de criptografia
Nesta página
Esta página descreve os tipos de criptografia usados pelo MongoDB para executar a criptografia de nível de 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ística garante que um determinado valor de entrada seja sempre criptografado em um mesmo valor de saída toda vez que o algoritmo for executado. Embora a criptografia determinística forneça maior suporte para operações de leitura, os dados criptografados com baixa cardinalidade são suscetíveis à recuperação por análise de frequência.
Para campos confidenciais que não são usados em operações de leitura, os aplicativos podem usar a criptografia aleatória para maior proteção contra a recuperação da análise de frequência.
Importante
Não é possível criptografar objetos e arrays de forma determinística
Não é possível fazer a criptografia de objetos e arrays inteiros com criptografia determinística. Para saber mais e ver um exemplo, consulte Suporte para criptografia de objetos e arrays.
Consulta 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 ver a lista completa de todos os operadores de query compatíveis em campos criptografados deterministicamente, consulte Operações suportadas para criptografia automática.
Para saber mais sobre leituras em dados criptografados, consulte a página Leituras criptografadas.
Observação
Fazer query de clientes sem CSFLE configurado
Quando você faz uma query em um campo criptografado usando um cliente que não está configurado para usar CSFLE (criptografia de nível de campo do lado do cliente), a query retorna um valor nulo. Um cliente sem CSFLE configurado não pode fazer query em um campo criptografado.
Criptografia aleatória
O algoritmo de criptografia aleatória garante que um determinado valor de entrada seja sempre criptografado em um valor de saída diferente sempre que o algoritmo for executado. Embora a criptografia aleatória forneça as mais fortes garantias de confidencialidade dos dados, ela também impede o suporte para quaisquer operações de leitura que devem operar no campo criptografado para avaliar a query.
Para campos confidenciais que são utilizados em operações de leitura, os aplicativos devem usar criptografia determinística para melhorar a viabilidade de leitura em campos criptografados.
Suporte para criptografia de objetos e arrays
A criptografia de objetos ou arrays inteiros só é possível 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" ] }
Criptografar os campos personal_information
e phone_numbers
usando o algoritmo de criptografia aleatória criptografa o objeto inteiro. Embora isso proteja todos os campos aninhados nesses campos, também evita a consulta desses campos aninhados.
Para saber mais sobre as operações suportadas para criptografia, consulte Operações suportadas para criptografia automática.
Consulta documentos em um campo criptografado aleatoriamente
Não é possível consultar diretamente os 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 em que o campo ssn
é criptografado aleatoriamente:
{ "_id": "5d6ecdce70401f03b27448fc", "name": "Jon Doe", "ssn": 241014209, "bloodType": "AB+", "medicalRecords": [ { "weight": 180, "bloodPressure": "120/80" } ], "insurance": { "provider": "MaestCare", "policyNumber": 123142 } }
Em vez de consultar o 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 } }