Usar criptografia explícita
Nesta página
- Visão geral
- Antes de começar
- Procedimento
- Criar uma chave mestra do cliente
- Crie um índice único em sua coleção do Key Vault
- Crie seu diretório de dados e collection criptografada
- Configure seu MongoClient para leituras e gravações criptografadas
- Inserir um documento com campos criptografados
- Recupere seu documento criptografado
- Saiba mais
Visão geral
Este guia mostra como criptografar um documento com criptografia explícita e um driver MongoDB.
Após concluir este guia, você poderá configurar um driver para criptografar campos em um documento usando criptografia explícita. Com esse conhecimento, você deve ser capaz de criar um aplicativo cliente que use criptografia explícita. com descriptografia automática.
Importante
Não use este aplicativo em produção
Como esse aplicativo de exemplo armazena uma chave de criptografia no sistema de arquivos do aplicativo, você corre o risco de acesso não autorizado à chave ou de perda da chave para descriptografar seus dados.
Para visualizar um tutorial que demonstra como criar um aplicativo habilitado para Queryable Encryption que usa um sistema de gerenciamento de chaves remoto, consulte Tutoriais.
Antes de começar
Para concluir e executar o código neste guia, você precisa configurar seu ambiente de desenvolvimento, como mostrado na página Requisitos de instalação.
Dica
Veja: Aplicação Completa
Para ver o código completo do aplicativo criado neste guia, selecione a guia correspondente ao driver do MongoDB de sua preferência e siga o link fornecido:
Procedimento
Criar uma chave mestra do cliente
Você deve criar uma chave mestra do cliente (CMK) para executar a Queryable Encryption.
Crie uma chave mestra do cliente de 96 bytes e salve-a no arquivo master-key.txt
:
openssl rand 96 > master-key.txt
Observação
Use uma linguagem de programação para criar uma chave mestre do cliente
Se preferir usar sua linguagem de programação preferida para gerar sua CMK, você pode visualizar trechos de código que demonstram como gerar uma Chave Mestre do Cliente em cada uma das linguagens suportadas deste guia no GitHub.
Aviso
Não use um arquivo de chave local em produção
Um arquivo de chave local em seu sistema de arquivos é inseguro e não é recomendado para produção. Em vez disso, você deve armazenar as chaves mestras do cliente em um sistema de gerenciamento de chaves remoto (KMS).
Para saber como usar um KMS remoto em sua implementação do Queryable Encryption, consulte o Guia de tutoriais .
Crie seu diretório de dados e collection criptografada
Leia a chave mestre do cliente e especifique as configurações do provedor KMS
Recupere o conteúdo do arquivo de chave mestra do cliente que você gerou na etapa Criar uma chave mestra do cliente deste guia.
Passe o valor chave mestra do cliente para as configurações do seu provedor de KMS. O cliente usa essas configurações para descobrir a chave mestra do cliente. Defina o nome do provedor como local
para informar ao driver que você está usando um provedor de chaves local.
Selecione a guia correspondente ao driver MongoDB de sua preferência:
Crie seu diretório de dados
Crie um cliente com sua connection string do MongoDB e o namespace da collection do Key Vault e crie as chaves de criptografia de dados:
Observação
Permissões de namespace da coleção de cofre de chaves
A collection de cofre de chaves está no namespace encryption.__keyVault
. Certifique-se de que o trigger de banco de dados que sua aplicação usa para se conectar ao MongoDB tenha permissões de ReadWrite nesse namespace.
A saída do código nesta seção deve se assemelhar ao seguinte:
Created encrypted collection!
Dica
Veja: Código Completo
Configure seu MongoClient para leituras e gravações criptografadas
Recuperar chaves de criptografia de dados
Recupere as chaves de criptografia de dados criadas na etapa Criar uma chave de criptografia de dados deste guia:
Especifique o caminho da biblioteca compartilhada de criptografia automática
Dica
Saiba mais
Para saber mais sobre a biblioteca referenciada por esse caminho, consulte a página Biblioteca compartilhada de criptografia automática para Queryable Encryption .
Criar um objeto MongoClient
Instancie um objeto MongoClient
com as seguintes configurações de criptografia automática:
Observação
Descriptografia automática
Usamos uma instância MongoClient
com criptografia automática habilitada para realizar a descriptografia automática.
Para saber mais sobre criptografia explícita com descriptografia automática, consulte a seção Noções básicas.
Inserir um documento com campos criptografados
Use sua instância MongoClient
habilitada para Queryable Encryption para inserir um documento criptografado no namespace medicalRecords.patients
usando o seguinte trecho de código:
Quando você insere um documento, o cliente habilitado para Queryable Encryption criptografa os campos do documento de forma que ele se pareça com o seguinte:
{ "_id": { "$oid": "6303e36053cc7ec2e6a630bd" }, "firstName": "Jon", "patientId": { "$binary": { "base64": "BxLJUBmg703civqMz8ASsD4QEYeSneOGiiYHfLE77ELEkp1EC/fXPrKCNRQl2mAFddszqDJ0P3znKrq0DVMEvJoU6wa0Ra+U+JjNVr8NtJE+TpTLCannY5Av6iGfLAaiHbM/E8Ftz1YCQsArQwuNp3wIV/GJPLa2662xsyk0wz7F6IRGC3FlnxpN4UIFaHE1M7Y6kEnx3tEy5uJBvU4Sex7I2H0kqHthClH77Q6xHIHc8H9d6upvgnEbkKBCnmc24A2pSG/xZ7LBsV3j5aOboPISuN/lvg==", "subType": "06" } }, "medications": { "$binary": { "base64": "BvOsveapfUxiuQxCMSM2fYIEyRlQaSqR+0NxlMarwurBflvoMz1FrSjSGgCVCpK8X+YrilP6Bac99kkaUmRJfjo4savxcjpOfEnUj5bHciPyfQBYmYF4PMLDtTTzGZpPilb9d5KgpIMBXxHi+dIcog==", "subType": "06" } }, "__safeContent__": [ { "$binary": { "base64": "ZLPIpgxzXpHUGrvdIHetwmMagR+mqvuUj5nzXNGf/WM=", "subType": "00" } } ] }
Aviso
Não modifique o campo __safeContent__.
O campo __safeContent__
é essencial para o Queryable Encryption. Não modifique o conteúdo deste campo.
Dica
Veja: Código Completo
Recupere seu documento criptografado
Recupere o documento criptografado inserido na etapa Inserir um documento com campos criptografados deste guia por meio de uma query em um campo criptografado:
A saída do trecho de código anterior deve conter o seguinte documento:
{ "__safeContent__": [ { "Subtype": 0, "Data": "LfaIuWm9o30MIGrK7GGUoStJMSNOjRgbxy5q2TPiDes=" } ], "_id": "6303a770857952ca5e363fd2", "firstName": "Jon", "medications": ["Atorvastatin", "Levothyroxine"], "patientId": 12345678 }
Dica
Veja: Código Completo
Saiba mais
Para ver um tutorial sobre como usar o Queryable Encryption com um KMS remoto, consulte Tutoriais.
Para saber como funciona a Queryable Encryption, consulte criptografia explícita.
Para saber mais sobre os tópicos mencionados neste guia, consulte os seguintes links: