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

Criptografia no nível de campo do cliente

Nesta página

  • Métodos de criptografia suportados
  • Componentes de criptografia
  • Algoritmos de criptografia
  • Descriptografia automática de campo
  • Aplicar esquema de criptografia em nível de campo
  • Tabela de compatibilidade de drivers

Novidades na versão 4.2.

O MongoDB oficial 4.2+ drivers compatíveis 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õeautenticação do utiliza criptografia TLS para proteger 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 às 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 provedor de terceiros hospeda o MongoDB cluster. O fornecedor tem uma violação de segurança na máquina host ou no nível do reconhecimento de data center na qual partes não autorizadas acessam os dados em um estado descriptografado.

  • Uma empresa de análise de dados terceirizada 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 evento, um usuário com acesso privilegiado ao MongoDB cluster ou a uma máquina host pode ignorar a criptografia e ler dados privados, privilegiados ou confidenciais. O uso da criptografia no nível do campo no lado do cliente para proteger os dados antes de serem gravados no servidor reduz o risco de exposição desses dados caso a criptografia da rede ou do 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 aplicativo 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 o MongoDB 4 selecionado.2+ drivers compatíveis, consulte o Guia de criptografia no nível do campo do lado do cliente.

O MongoDB oferece suporte a dois métodos de criptografia de nível de campo do lado do cliente usando o MongoDB 4 oficial.2+ drivers compatíveis:

Criptografia explícita (manual) de campos

MongoDB 4 oficial .2+ drivers compatíveis, mongosh e o MongoDB 4.2 ou versões posteriores do shell mongo 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 4 oficial .2+ drivers compatíveis, mongosh e o MongoDB 4.2 ou posterior ao shell mongo 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 de banco 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 utilizando um subconjunto rigoroso da sintaxe padrão do Esquema JSON 4 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.

MongoDB 4.2+ drivers compatíveis, mongosh e o MongoDB 4.2 ou posterior mongo shell legado descriptografar automaticamente Binary 6 criados usando criptografia de nível de campo do 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 no lado do cliente do MongoDB oferece suporte apenas à criptografia de campos únicos em um documento. Para criptografar um documento inteiro, você deve criptografar cada campo individual no documento.

O diagrama a seguir ilustra o relacionamento entre o driver e cada componente de criptografia:

Diagrama de relacionamentos entre o driver e os componentes de criptografia
  • libmongocrypt é o código aberto licenciada pela Apache biblioteca de criptografia principal usada pelo MongoDB 4 oficial2 . + drivers compatíveis, e omongosh MongoDB 4 2. Shell ou posterior legado para alimentar a criptografia em 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.mongo

  • 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 collection do MongoDB que armazena todas as chaves de criptografia usadas para criptografar valores. As diretório de dados são criptografadas usando uma chave mestra do cliente (chave mestra do cliente) antes do armazenamento na coleção. O cofre de chaves pode residir em um MongoDB cluster diferente daquele que armazena os dados criptografados.

  • O KMS armazena a chave mestra do cliente usada para criptografar o diretório 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.

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.

O algoritmo de criptografia determinístico garante que um determinado valor de entrada sempre criptografe para o mesmo valor de saída cada vez que o algoritmo é executado. Enquanto a criptografia determinística oferece 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 melhorar a proteção contra a recuperação da análise de frequência.

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 usados em operações de leitura, os aplicativos devem usar a Criptografia Determinística para melhorar o suporte de leitura em campos criptografados.

Os metadados blob BinData incluem a chave de encriptação 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 herdado 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:

  1. Verifique os metadados do blob do BinData para o diretório de dados e o algoritmo de criptografia utilizado para criptografar o valor.

  2. Verifique o cofre de chaves configurado no reconhecimento de data center atual para o diretório de dados especificado. Se o cofre de chaves não contiver a diretório de dados especificado, a descriptografia automática falhará e o driver retornará o blob BinData .

  3. Verifique os metadados da chave de criptografia de dados da chave mestra do cliente (CMK) usada para criptografar o material da chave.

  4. 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 managed localmente, recupere a chave local e descriptografe o diretório de dados. Se a chave local especificada na configuração do reconhecimento de data center não tiver sido usada para criptografar o diretório de dados, a descriptografia falhará e o driver retornará o blob BinData .

  5. Descriptografe o valor BinData usando o diretório de dados descriptografado 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 o reconhecimento de data center para criptografia no nível do 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.

Começando com MongoDB 4.2, o servidor suporta o uso da validação de esquema para impor a criptografia de campo específicos em uma collection. Use as palavras- chave da regra de criptografia automática com o objeto de validação $jsonSchema para indicar quais campo exigem criptografia. O servidor rejeita quaisquer operações de gravação para essa collection onde os campo especificados não são objeto 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 encriptação 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 encriptação 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 a criptografia explícita (manual) de nível de campo devem encrypt , no mínimo, os campos taxid e taxid-short usando as mesmas configurações do $jsonSchema remoto antes de emitir a operação de gravação.

Os clientes que executam a criptografia automática em nível de campo do lado do cliente têm um comportamento específico, dependendo da configuração da conexão com o reconhecimento de data center:

Observação

A criptografia automática em nível de campo do lado do cliente está disponível com o MongoDB Enterprise 4.2 ou somente posterior.

  • Se o objeto de conexão ClientSideFieldLevelEncryptionOptions schemaMap contiver uma chave para a collection especificada, o cliente utilizará esse objeto para executar a criptografia automática no nível do campo e ignorará o esquema remoto. As regras locais devem criptografar no mínimo esses campo taxid e taxid-short .

  • Se o objeto ClientSideFieldLevelEncryptionOptions schemaMap da conexão não contiver uma chave para a collection especificada, o cliente baixará o esquema remoto do lado do servidor para a collection e o usará para executar a criptografia automática no nível do 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 MongoDB Server não pode descriptografar nem introspecção do conteúdo do field criptografado, ele não pode validar se os clientes usaram as opções de criptografia especificadas para criptografar um determinado field. Isso permite que dois clientes insiram dados criptografados usando diferentes keyIDs ou algoritmos de criptografia para um field específico. Embora alguns volumes de trabalho possam exigir implementações independentes de criptografia em nível de field, a implementação inconsistente de opções de criptografia para um field entre clientes pode resultar em comportamento incorreto ou inesperado de query no field 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ório sempre retorna um valor único diferente, enquanto o algoritmo determinístico sempre retorna o mesmo valor. As query que esperam dados criptografados deterministicamente para esse campo retornam resultados inconsistentes, pois o servidor não pode corresponder a nenhum dos campo criptografados aleatoriamente.

MongoDB 4.2 A criptografia no nível do campo do lado do cliente só está disponível com o seguinte 4 oficial.2+ versões de driver 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.

Voltar

Girar chaves

Próximo

Criptografia automática no nível do campo do lado do cliente