Criptografia no nível de campo do cliente
Nesta página
Novidades na versão 4.2.
Os drivers compatíveis oficiais do MongoDB 4.2+ fornecem um framework de criptografia no nível do campo do lado do cliente . Os aplicativos podem criptografar campos em documentos antes de transmitir dados pela rede para o servidor. Somente aplicativos com acesso às chaves de criptografia corretas podem descriptografar e ler os dados protegidos. Excluir uma chave de criptografia torna todos os dados criptografados com essa chave permanentemente ilegíveis.
Por exemplo, um cluster MongoDB que impõe umaautenticação usa criptografia TLS para proteger os dados em trânsito. O cluster também usa o mecanismo de armazenamento criptografado do MongoDB para proteger dados no disco. Considere os seguintes cenários:
Um funcionário tem acesso administrativo ao cluster e suas máquinas host. O nível de acesso do funcionário permite que ele visualize dados de alta sensibilidade em um estado descriptografado como parte de suas funções normais.
Um fornecedor terceirizado hospeda o Cluster MongoDB . O fornecedor tem uma violação de segurança na máquina host ou no nível do banco de dados em que partes não autorizadas acessam os dados em um estado descriptografado.
Uma empresa de análise de dados de terceiros tem acesso a dados que incluem informações privadas, pessoais ou confidenciais. A empresa terceirizada carrega os dados descriptografados em um volume de armazenamento de dados não seguro que partes não autorizadas podem acessar.
Em cada cenário, um usuário com acesso privilegiado ao cluster MongoDB ou a uma máquina host pode ignorar a criptografia e ler dados privados, privilegiados ou confidenciais. O uso da criptografia em nível de campo no lado do cliente para proteger os dados antes de serem gravados no servidor reduz o risco de exposição desses dados evento a criptografia de rede ou disco seja ignorada.
Considere o seguinte documento:
{ "name" : "John Doe", "address" : { "street" : "1234 Main Street", "city" : "MongoDBVille", "zip" : 99999 }, "phone" : "949-555-1212", "ssn" : "123-45-6789" }
Com a criptografia em nível de campo do lado do cliente , o aplicação pode criptografar especificamente informações confidenciais, como ssn
e phone
. Os campos criptografados são armazenados como binary data
com subtipo 6:
{ "name" : "John Doe", "address" : { "street" : "1234 Main Street", "city" : "MongoDBVille", "zip" : 99999 }, "phone" : BinData(6,"U2FsdGVkX1+CGIDGUnGgtS46+c7R5u17SwPDEmzyCbA="), "ssn" : BinData(6,"AaloEw285E3AnfjP+r8ph2YCvMI1+rWzpZK97tV6iz0jx") }
Para obter uma lista completa de drivers oficiais compatíveis com 4.2+ com suporte para criptografia em nível de campo do lado do cliente, consulte a Tabela de compatibilidade de drivers.
Para obter um procedimento de ponta a ponta para configurar a criptografia em nível de campo usando drivers selecionados compatíveis com o MongoDB 4.2 , consulte o Guia de criptografia em nível de campo do lado do cliente.
Métodos de criptografia suportados
O MongoDB oferece suporte a dois métodos de criptografia no nível do campo do lado do cliente usando o MongoDB 4.2oficial + drivers compatíveis:
- Criptografia explícita (manual) de campos
MongoDB oficial 4.2+ drivers compatíveis,
mongosh
e MongoDB 4.2 ou versões posteriores do shellmongo
legado oferecem suporte à criptografia ou descriptografia explícita de campos com uma chave de criptografia de dados e um algoritmo de criptografia específicos.Os aplicativos devem modificar qualquer código associado à construção de operações de leitura e gravação para incluir lógica de criptografia/descriptografia por meio da biblioteca de criptografia de drivers. A aplicação é responsável por selecionar o diretório de dados apropriado para criptografia/descriptografia por operação.
Para obter mais informações, consulte Criptografia explícita (manual) no nível do campo do lado do cliente.
- criptografia automática de campo
Observação
Funcionalidade de empresas
O recurso automático da criptografia no nível do campo só está disponível no MongoDB Enterprise 4.2 ou posterior e no MongoDB Atlas 4.2 ou clusters posteriores.
MongoDB oficial 4.2+ drivers compatíveis,
mongosh
e MongoDB 4.2 ou posterior ao shellmongo
legado é compatível com a criptografia automática de campos em operações de leitura e gravação.Os aplicativos devem criar um objeto de conexão do banco de dados de dados (por exemplo
MongoClient
) com as definições de configuração de criptografia automática . As definições de configuração devem incluir regras de criptografia automática usando um subconjunto rigoroso JSON schema do 4 sintaxe padrão e palavras-chave de esquema específicas de criptografia. Os aplicativos não precisam modificar o código associado à operação de leitura/gravação. Consulte Regras de criptografia automática para obter a documentação completa sobre regras de criptografia automática .Para obter mais informações, consulte Criptografia automática no nível do campo do lado do cliente.
Os drivers compatíveis com o MongoDB 4.2+, mongosh
e o MongoDB 4.2 ou posterior mongo
legado shell automaticamente os objetos Binary
subtipo 6 criados usando criptografia de nível de campo no lado do cliente . Para obter mais informações sobre descriptografia automática, consulte Descriptografia automática de campos.
Importante
A criptografia no nível do campo do MongoDB no lado do cliente oferece suporte apenas à criptografia de campos únicos em um documento. Para criptografar um documento inteiro, você deve criptografar cada campo individual do documento.
Componentes de criptografia
O diagrama a seguir ilustra as relações entre o driver e cada componente de criptografia:
libmongocrypt
é o código aberto licenciada pela Apache biblioteca de criptografia principal usada pelo MongoDB oficial 4.2+ driversmongosh
compatíveis, e MongoDB 4 o.2 ou legado posteriormongo
shell para alimentar a criptografia de nível de campo do lado do cliente . Alguns drivers podem exigir etapas de integração específicas para instalar ou vincular a biblioteca. Consulte a documentação do driver para obter informações mais completas.A Biblioteca compartilhada de criptografia automática oferece suporte à criptografia automática em nível de campo do lado do cliente e está disponível apenas com o MongoDB Enterprise. A Biblioteca compartilhada de criptografia automática não executa funções criptográficas. A biblioteca compartilhada é uma alternativa preferencial ao
mongocryptd
e não requer a criação de um novo processo.mongocryptd
ainda é suportado.O Key Vault é uma coleção do MongoDB que armazena todas as chaves de criptografia de dados usadas para criptografar valores. As chaves de criptografia de dados são criptografadas usando uma chave mestra do cliente (CMK) antes do armazenamento na coleção. O cofre de chaves pode residir em um cluster MongoDB diferente daquele que armazena os dados criptografados.
O KMS (KMS) armazena a chave mestra do cliente (CMK) usada para criptografar chaves de criptografia de dados. O MongoDB é compatível com os seguintes provedores de KMS:
O cluster MongoDB que armazena os dados criptografados também pode impor criptografia de nível de campo no lado do cliente . Consulte Aplicar esquema de criptografia em nível de campo para obter mais informações.
Algoritmos de criptografia
A criptografia no nível do campo do MongoDB no lado do cliente usa a abordagem Encrypt-then-MAC combinada com um vetor de inicialização determinístico ou aleatório para criptografar os valores de campo . O MongoDB suporta apenas o AEAD AES-256-Algoritmo de criptografia CBC com HMAC-SHA-512 Mac.
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 é 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 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.
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.
A criptografia aleatória também oferece suporte à criptografia de objetos ou arrays inteiros. 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 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.
Descriptografia automática de campo
Os metadados blob BinData
incluem a chave de criptografia de dados _id
e o algoritmo de criptografia usado para criptografar os dados binários. O 4.2+ drivers compatíveis, mongosh
e o MongoDB 4.2 ou shell mongo
legado posterior usa esses metadados para tentar a descriptografia automática de objetos BinData
subtipo 6 . O processo de descriptografia automática funciona da seguinte forma:
Verifique os metadados do blob do
BinData
para a chave de criptografia de dados e o algoritmo de criptografia utilizado para criptografar o valor.Verifique o cofre de chave configurado na conexão do banco de dados de dados atual para a chave de criptografia de dados especificada. Se o cofre de chaves não contiver a chave especificada, a descriptografia automática falhará e o driver retornará o blob
BinData
.Verifique os metadados da chave de criptografia de dados da chave mestra do cliente (CMK) usada para criptografar o material da chave.
Para o Amazon Web Services KMS, Azure Key Vault ou Google Cloud Platform KMS, envie a chave de criptografia de dados para o provedor de KMS para descriptografia. Se a CMK não existir ou se a configuração de conexão não conceder acesso à CMK, a descriptografia falhará e o driver retornará o blob
BinData
.Para a chave gerenciada localmente, recupere a chave local e descriptografe a chave de criptografia de dados . Se a chave local especificada na configuração do banco de dados de dados não tiver sido usada para criptografar a chave de criptografia de dados, a descriptografia falhará e o driver retornará o blob
BinData
.Descriptografe o valor
BinData
usando a chave de criptografia de dados descriptografada e o algoritmo apropriado.
Os aplicativos com acesso ao servidor MongoDB que também não têm acesso à chave mestre necessária e às chaves de criptografia de dados não podem descriptografar os valores BinData
.
Para obter mais informações sobre como configurar a conexão do banco de dados de dados para criptografia em nível de campo do lado do cliente , consulte o construtor Mongo()
ou consulte a documentação do método de construção do cliente do driver de sua preferência.
Aplicar esquema de criptografia em nível de campo
A partir do MongoDB 4.2, o servidor suporta o uso de validação de esquema para impor a criptografia de campos específicos em uma coleção. Use as palavras- chave da regra de criptografia automática com o objeto de validação $jsonSchema
para indicar quais campos exigem criptografia. O servidor rejeita quaisquer operações de gravação para essa coleção onde os campos especificados não são objetos do subtipo { Binary (BinData)
6 .
Por exemplo, o comando collMod
a seguir modifica a collection hr.employees
para incluir um validator
. O objeto de validação $jsonSchema
inclui palavras-chave de criptografia no nível do campo do lado do cliente para indicar que:
O campo
taxid
deve ser criptografado. Os clientes devem usar a chave de criptografia de dados especificada e o algoritmo de criptografia aleatório ao criptografar o campo.O campo
taxid-short
deve ser criptografado. Os clientes devem usar a chave de criptografia de dados especificada e o algoritmo de criptografia determinístico ao criptografar o campo.
db.getSiblingDB("hr").runCommand( { "collMod" : "employees", "validator" : { "$jsonSchema" : { "bsonType" : "object", "properties" : { "taxid" : { "encrypt" : { "keyId" : [UUID("e114f7ad-ad7a-4a68-81a7-ebcb9ea0953a")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Random", } }, "taxid-short" : { "encrypt" : { "keyId" : [UUID("33408ee9-e499-43f9-89fe-5f8533870617")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "bsonType" : "string" } } } } } } )
Os clientes que executam criptografia de nível de campo explícita (manual) devem encrypt
, no mínimo, os campos taxid
e taxid-short
usando as mesmas configurações que o $jsonSchema
remoto antes de emitir a operação de gravação.
Os clientes que executam a criptografia automática em nível de campo no lado do cliente têm um comportamento específico, dependendo da configuração da conexão com o banco de dados de dados:
Observação
A criptografia automática em nível de campo do lado do cliente está disponível somente com o MongoDB Enterprise 4.2 ou posterior.
Se o objeto de conexão
ClientSideFieldLevelEncryptionOptions
schemaMap
contiver uma chave para a coleção especificada, o cliente usará esse objeto para executar a criptografia automática no nível do campo e ignorará o esquema remoto. As regras locais devem criptografar pelo menos os campostaxid
etaxid-short
.Se a conexão
ClientSideFieldLevelEncryptionOptions
schemaMap
objeto não contiver uma chave para a coleção especificada, o cliente baixará o esquema remoto do lado do servidor para a coleção e o usará para executar a criptografia automática em nível de campo .Essa configuração exige que o cliente confie que o servidor tem um esquema válido em relação à criptografia automática de nível de campo. O cliente só usa o esquema remoto para executar a criptografia automática em nível de campo e não impõe nenhuma outra regra de validação especificada no esquema.
Como o servidor MongoDB não pode descriptografar nem introspecção do conteúdo do campo criptografado , ele não pode validar se os clientes usaram as opções de criptografia especificadas para criptografar um determinado campo. Isso permite que dois clientes insiram dados criptografados usando diferentes keyIDs ou algoritmos de criptografia para um campo específico. Embora alguns volumes de trabalho possam exigir implementações independentes de criptografia em nível de campo , a implementação inconsistente de opções de criptografia para um campo entre clientes pode resultar em comportamento incorreto ou inesperado de queries em relação ao campo criptografado.
Por exemplo, o cliente A
criptografa o campo PII
usando criptografia aleatória, enquanto o cliente B
criptografa o campo PII
usando criptografia determinística. O algoritmo de criptografia aleatória sempre retorna um valor exclusivo diferente, enquanto o algoritmo determinístico sempre retorna o mesmo valor. Queries que esperam dados criptografados deterministicamente para esse campo retornam resultados inconsistentes, pois o servidor não pode corresponder a nenhum dos campos criptografados aleatoriamente.
Tabela de compatibilidade de drivers
A criptografia no nível do campo do lado do cliente do MongoDB 4.2 só está disponível com as seguintes versões oficiais do driver 4.2+ compatíveis:
Driver | Versões suportadas | Inícios rápidos / Tutoriais |
---|---|---|
3.4.0+ | ||
3.12.0+ | ||
1.13.0+ | ||
3.10.0+ | ||
2.10.0+ | ||
1.17.5 | ||
1.2+ | ||
2.8.0+ | ||
1.6.0+ | ||
2.12.1+ |
Consulte a documentação de referência do driver para obter exemplos de sintaxe e implementação.