Menu Docs
Página inicial do Docs
/ / /
Driver C++

Criptografia no nível de campo do cliente

Nesta página

  • Criptografia no nível de campo do cliente
  • Instalação
  • Exemplos

Novidades no MongoDB 4.2 A criptografia no nível do campo do lado do cliente (CSFLE) permite que administradores e desenvolvedores criptografem campos de dados específicos, além de outros recursos de criptografia do MongoDB.

Com o CSFLE, os desenvolvedores podem criptografar campos do lado do cliente sem nenhuma configuração ou diretiva do lado do servidor. A criptografia no nível do campo do lado do cliente oferece suporte a cargas de trabalho em que os aplicativos devem garantir que partes não autorizadas, incluindo administradores de servidor, não possam ler os dados criptografados.

Para uma visão geral do CSFLE, leia a documentação oficial MongoDB no manual.

A criptografia no nível do campo do lado do cliente depende de uma biblioteca C chamada para fazer o trabalho pesado de criptografia. Essa dependência é gerenciada pelo driver C. Desde que a instalação do driver C seja libmongocrypt 1.16.0 ou superior e foi compilada com suporte à criptografia em nível de campo do lado do cliente, essa dependência deve ser gerenciada internamente. Consulte o driver C Usando criptografia no nível do campo do lado do cliente para mais informações.

O CSFLE automático depende de um novo binário chamado mongocryptd em execução como um daemon enquanto o driver opera. Este binário está disponível apenas com o MongoDB Enterprise.

mongocryptd pode ser iniciado separadamente do driver ou deixado para gerar automaticamente quando a criptografia é usada.

Para executar o mongocryptd separadamente, passe o sinalizador mongocryptdBypassSpawn para as opções de criptografia automática do cliente:

auto mongocryptd_options = make_document(kvp("mongocryptdBypassSpawn", true));
options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.extra_options({mongocryptd_options.view()});

Se o binário mongocryptd estiver no caminho atual, o driver poderá gerá-lo sem nenhum sinalizador personalizado. No entanto, se o binário mongocryptd estiver em um caminho diferente, defina o caminho com a opção mongocryptdSpawnPath :

auto mongocryptd_options = make_document(kvp("mongocryptdSpawnPath", "path/to/mongocryptd"));
options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.extra_options({mongocryptd_options.view()});

A criptografia automática em nível de campo do lado do cliente é habilitada criando um mongocxx::client com a opção auto_encryption_opts definida como uma instância de mongocxx::options::auto_encryption. Os exemplos seguintes mostram como configurar a criptografia automática de nível de campo do lado do cliente utilizando a classe mongocxx::client_encryption para criar uma nova chave de dados de criptografia.

Observação

A criptografia automática no nível do campo no lado do cliente requer MongoDB 4.2 enterprise ou MongoDB 4.2 Atlas cluster. A versão da comunidade do servidor oferece suporte à descriptografia automática, bem como à criptografia explícita no nível do campo do lado do cliente.

O exemplo a seguir mostra como especificar regras de criptografia automática por meio da opção schema_map. As regras de criptografia automática são expressas usando um subconjunto rigoroso da sintaxe do JSON schema.

Fornecer um schema_map oferece mais segurança do que depender de JSON schemas obtidos do servidor. Ele protege contra um servidor malicioso que anuncia um falso JSON schema, que pode induzir o cliente a enviar dados não criptografados que devem ser criptografados.

Os JSON schemas fornecidos no schema_map se aplicam somente à configuração automática da criptografia em nível de campo do lado do cliente. Outras regras de validação no JSON schema não serão aplicadas pelo driver e resultarão em um erro.

//
// The schema map has the following form:
//
// {
// "test.coll" : {
// "bsonType" : "object",
// "properties" : {
// "encryptedFieldName" : {
// "encrypt" : {
// "keyId" : [ <datakey as UUID> ],
// "bsonType" : "string",
// "algorithm" : <algorithm>
// }
// }
// }
// }
// }
//

Consulte exemplos/mongocxx/automatic_client_side_field_level_encryption.cpp para obter um exemplo completo de como definir um esquema json para criptografia automática.

O servidor MongoDB 4.2 suporta o uso da validação de esquema para impor a criptografia de campos específicos em uma coleção. Essa validação de esquema impedirá que um aplicativo insira valores não criptografados para quaisquer campos marcados com a palavra-chave "encrypt" JSON schema.

É possível configurar a criptografia automática em nível de campo do lado do cliente usando o mongocxx::client_encryption para criar uma nova chave de dados de criptografia e criar uma coleção com a sintaxe de JSON schema de criptografia automática.

// Please see the linked example below for full json_schema construction.
bsoncxx::document::value json_schema{};
// Create the collection with the encryption JSON Schema.
auto cmd = document{} << "create"
<< "coll"
<< "validator" << open_document
<< "$jsonSchema" << json_schema.view()
<< close_document << finalize;
db.run_command(cmd.view());

Consulte exemplos/mongocxx/server_side_field_level_encryption_enforcement.cpp para obter um exemplo completo de como configurar a imposição de criptografia no servidor.

A criptografia explícita é um recurso MongoDB Community e não usa o processo mongocryptd . A criptografia explícita é fornecida pela classe mongocxx::client_encryption .

// Explicitly encrypt a BSON value.
auto to_encrypt = bsoncxx::types::bson_value::make_value("secret message");
auto encrypted_message = client_encryption.encrypt(to_encrypt, encrypt_opts);
// Explicitly decrypt a BSON value.
auto decrypted_message = client_encryption.decrypt(encrypted_message);

Consulte exemplos/mongocxx/explicit_encryption.cpp para obter um exemplo completo do uso de criptografia e descriptografia explícitas.

Embora a criptografia automática exija MongoDB 4.2 enterprise ou MongoDB 4.2 Atlas cluster, a descriptografia automática é suportada para todos os usuários. Para configurar a descriptografia automática sem criptografia automática, configure bypass_auto_encryption=True na classe options::auto_encryption .

options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.bypass_auto_encryption(true);
// Please see full example for complete options construction.
// Create a client with automatic decryption enabled, but automatic encryption bypassed.
options::client client_opts{};
client_opts.auto_encryption_opts(std::move(auto_encrypt_opts));
class client client_encrypted {uri{}, std::move(client_opts)};

Consulte exemplos/mongocxx/explicit_encryption_auto_decryption.cpp para obter um exemplo de uso de criptografia explícita com descriptografia automática.

Voltar

Configuração

Próximo

Tutorial