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

Criptografia em execução

Você pode usar o driver C++ para criptografar campos específicos do documento usando um conjunto de recursos chamado criptografia em uso. A criptografia em uso permite que seu aplicação criptografe os dados antes de enviá-los para o MongoDB e consulte documentos com campos criptografados.

A criptografia em uso impede que usuários não autorizados visualizem dados em texto simples à medida que são enviados ao MongoDB ou enquanto estão em um banco de banco de dados criptografado. Para ativar a Criptografia em execução em uma aplicação e autorizá-la a descriptografar dados, você deve criar chaves de encriptação que somente sua aplicação possa acessar. Somente aplicativos que têm acesso às suas chaves de criptografia podem acessar os dados descriptografados em texto simples. Se um invasor obtiver acesso ao banco de banco de dados, ele poderá ver apenas os dados de texto cifrado criptografados porque não tem acesso às chaves de encriptação.

Você pode usar criptografia em uso para criptografar campos em seus documentos MongoDB que contêm os seguintes tipos de dados confidenciais:

  • Números de cartão de crédito

  • Endereços

  • Informação de saúde

  • Informações financeiras

  • Qualquer outra informação sensível ou pessoalmente identificável (PII)

O MongoDB oferece os seguintes recursos para habilitar a criptografia em uso:

  • Queryable Encryption

  • Criptografia no nível de campo no lado do cliente

A Queryable Encryption é o recurso de criptografia em uso da próxima geração, introduzido pela primeira vez como um recurso de pré-visualização no MongoDB Server versão 6.0 e como um recurso geralmente disponível (GA) no MongoDB 7.0. Queryable Encryption oferece suporte à pesquisa de campos criptografados em busca de igualdade e criptografa cada valor de forma exclusiva.

Importante

Visualizar recursos incompatíveis com MongoDB 7.0

A implementação da Queryable Encryption no MongoDB 6.0 é incompatível com a versão GA introduzida no MongoDB 7.0. A funcionalidade de visualização da Queryable Encryption não é mais compatível.

Para saber mais sobre Queryable Encryption, consulte Queryable Encryption no manual do MongoDB Server .

A criptografia no nível do campo do lado do cliente (CSFLE) foi introduzida na versão 4.2 do Servidor MongoDB e oferece suporte à busca de igualdade em campos criptografados. O CSFLE difere da Queryable Encryption porque você pode selecionar um algoritmo de criptografia determinístico ou aleatório para criptografar campos. Você só pode consultar campos criptografados que usam um algoritmo de criptografia determinístico ao usar o CSFLE. Quando você usa um algoritmo de criptografia aleatório para criptografar campos no CSFLE, eles podem ser descriptografados, mas não é possível executar query de igualdade nesses campos. Ao usar a Queryable Encryption, você não pode especificar o algoritmo de criptografia, mas pode consultar todos os campos criptografados.

Quando você criptografa deterministicamente um valor, o mesmo valor de entrada produz o mesmo valor de saída. Enquanto a criptografia determinística permite que você execute queries nesses campos criptografados, os dados criptografados com baixa cardinalidade são suscetíveis à quebra de código por análise de frequência.

Dica

Esta seção mostra como configurar o CSFLE usando os seguintes mecanismos:

A criptografia automática permite executar operações de leitura e gravação criptografadas sem especificar como criptografar campos. Para ativar a criptografia automática, use uma das seguintes opções:

  • crypt_shared (Recomendado): uma biblioteca dinâmica que lê o esquema de criptografia para determinar quais campos criptografar e descriptografar. Ao usar essa biblioteca, você não precisa gerar um processo separado para executar a criptografia automática.

  • mongocryptd: Um binário pré-embalado com o MongoDB Enterprise Edition que usa regras de criptografia automática especificadas para marcar campos para criptografia. mongocryptd gera automaticamente quando você cria um cliente habilitado para CSFLE, mas você pode iniciar explicitamente o binário em uma instância do options::auto_encryption.

Importante

mongocryptd requer MongoDB Enterprise Edition v4.2 ou posterior.

Para saber mais sobre como configurar a criptografia automática, consulte Instalar e configurar uma biblioteca CSFLE no manual do MongoDB Server.

Você pode utilizar a opção schema_map para especificar um esquema de criptografia automática . Os esquemas de criptografia contêm regras especificadas pelo usuário que identificam quais campos devem ser criptografados e como criptografar esses campos.

Defina a opção schema_map como um documento JSON que se alinha com a sintaxe padrão do JSON schema rascunho 4. Esse documento deve incluir os nomes dos campo a serem criptografados e um objeto encrypt aninhado abaixo de cada nome de campo , que define as opções de criptografia a serem usadas.

Dica

Para saber mais sobre esquemas de criptografia, consulte Esquemas de criptografia CSFLE no manual do MongoDB Server.

O seguinte código mostra a sintaxe para especificar um documento de JSON schema :

auto data_key_id = client_encryption.create_data_key("local");
auto json_schema = document{} << "properties" << open_document << "encryptedFieldName" << open_document << "encrypt"
<< open_document << "keyId" << open_array << data_key_id << close_array << "bsonType"
<< "string"
<< "algorithm"
<< "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" << close_document << close_document
<< close_document << "bsonType"
<< "object" << finalize;

Para visualizar um exemplo completo que usa o documento json_schema anterior para configurar um esquema de criptografia automática, consulte o exemplo CSFLE automático no código-fonte do driver.

Dica

Você também pode especificar um esquema de criptografia automática para criptografia de nível de campo no lado do servidor. Para ver um exemplo completo, consulte o exemplo de Aplicação de criptografia em nível de campo do lado do servidor no código-fonte do driver.

A criptografia explícita permite executar operações criptografadas usando a biblioteca de criptografia do driver. Para usar a criptografia explícita, especifique a lógica de criptografia em todo o aplicação.

O exemplo a seguir configura a criptografia explícita para uma operação de inserção, que insere uma mensagem criptografada no banco de dados:

// Configure your MongoDB client's encryption options here
class client_encryption client_encryption(std::move(client_encryption_opts));
auto data_key_id = client_encryption.create_data_key("local");
options::encrypt encrypt_opts{};
encrypt_opts.key_id(data_key_id.view());
encrypt_opts.algorithm(options::encrypt::encryption_algorithm::k_deterministic);
// Explicitly encrypts 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 decrypts a BSON value
auto decrypted_message = client_encryption.decrypt(encrypted_message);
// Inserts the encrypted value into the database
coll.insert_one(make_document(kvp("encryptedField", encrypted_message)));

Para ver um exemplo completo que configura a criptografia explícita, consulte o exemplo de criptografia explícita no código-fonte do driver.

É possível configurar a criptografia explícita e a descriptografia automática, que é compatível com todos os usuários. Para configurar a descriptografia automática sem a criptografia automática, crie uma instância do options::auto_encryption e configure seu campo bypass_auto_encryption para true. Em seguida, aplique essas opções ao seu cliente.

O exemplo a seguir cria uma instância options::auto_encryption para configurar a criptografia explícita com descriptografia automática e, em seguida, passa essa instância de opções para o campo auto_encryption_opts de um options::client. Isso cria um cliente configurado para usar a descriptografia automática:

options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.bypass_auto_encryption(true);
options::client client_opts{};
client_opts.auto_encryption_opts(std::move(auto_encrypt_opts));
class client client_encrypted {uri{}, std::move(client_opts)};

Para ver um exemplo completo que configura a criptografia explícita com a descriptografia automática, veja o exemplo de descriptografia automática no código-fonte do driver.

Para saber mais sobre o CSFLE, consulte CSFLE no manual do MongoDB Server .

Voltar

Autenticação empresarial

Nesta página

  • Visão geral
  • Queryable Encryption
  • Criptografia no nível de campo no lado do cliente
  • Configurar criptografia automática
  • Configurar criptografia explícita
  • Informações adicionais