AWS Encryption SDK para. NETexemplos - AWS Encryption SDK

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AWS Encryption SDK para. NETexemplos

Os exemplos a seguir mostram os padrões básicos de codificação que você usa ao programar com o AWS Encryption SDK for. NET. Especificamente, você instancia a biblioteca AWS Encryption SDK e os fornecedores de materiais. Em seguida, antes de chamar cada método, você deve instanciar um objeto que define a entrada para o método. Isso é muito parecido com o padrão de codificação usado no AWS SDK for .NET.

Para ver exemplos de como configurar opções no AWS Encryption SDK, como especificar um conjunto alternativo de algoritmos, limitar chaves de dados criptografadas e usar chaves AWS KMS multirregionais, consulte. Configurando o AWS Encryption SDK

Para obter mais exemplos de programação com o AWS Encryption SDK for. NET, veja os exemplos no aws-encryption-sdk-net diretório do aws-encryption-sdk-dafny repositório em GitHub.

Criptografando dados no formulário AWS Encryption SDK . NET

Este exemplo mostra o padrão básico para criptografar dados. Ele criptografa um pequeno arquivo com chaves de dados protegidas por uma chave de AWS KMS empacotamento.

Etapa 1: Instanciar a biblioteca AWS Encryption SDK e a biblioteca dos fornecedores de materiais.

Comece instanciando a biblioteca AWS Encryption SDK e a biblioteca dos fornecedores de materiais. Você usará os métodos do AWS Encryption SDK para criptografar e descriptografar dados. Você usará os métodos na biblioteca de fornecedores de materiais para criar os tokens de autenticação que especificam quais chaves protegem seus dados.

A forma como você instancia a biblioteca AWS Encryption SDK e a biblioteca de fornecedores de materiais difere entre as versões 3. x e 4. x do AWS Encryption SDK formulário. NET. Todas as etapas a seguir são as mesmas para ambas as versões 3. x e 4. x do AWS Encryption SDK formulário. NET.

Version 3.x
// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders();
Version 4.x
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Etapa 2: crie um objeto de entrada para o token de autenticação.

Cada método que cria um token de autenticação tem uma classe de objeto de entrada correspondente. Por exemplo, para criar o objeto de entrada para o método CreateAwsKmsKeyring(), crie uma instância da classe CreateAwsKmsKeyringInput.

Embora a entrada desse chaveiro não especifique uma chave geradora, a KMS chave única especificada pelo KmsKeyId parâmetro é a chave geradora. Ela gera e criptografa a chave de dados que criptografa os dados.

Esse objeto de entrada requer um AWS KMS cliente para Região da AWS a KMS chave. Para criar um AWS KMS cliente, instancie a AmazonKeyManagementServiceClient classe no. AWS SDK for .NET Chamar o construtor AmazonKeyManagementServiceClient() sem parâmetros cria um cliente com os valores padrão.

Em um AWS KMS chaveiro usado para criptografar com o AWS Encryption SDK for. NET, você pode identificar KMS as chaves usando o ID da chave, a chaveARN, o nome do alias ou o ARN alias. Em um AWS KMS chaveiro usado para descriptografar, você deve usar uma chave ARN para identificar cada chave. KMS Se você planeja reutilizar seu chaveiro de criptografia para descriptografar, use um identificador de chave ARN para todas as chaves. KMS

string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var kmsKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn };
Etapa 3: criar o token de autenticação.

Para criar o token de autenticação, chame o método do token de autenticação com o objeto de entrada do token de autenticação. Este exemplo usa o CreateAwsKmsKeyring() método, que usa apenas uma KMS chave.

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Etapa 4: defina um contexto de criptografia.

Um contexto de criptografia é um elemento opcional, mas altamente recomendado, de operações criptográficas no AWS Encryption SDK. Você pode definir um ou mais pares de chave-valor não secretos.

nota

Com a versão 4. x do AWS Encryption SDK formulário. NET, você pode exigir um contexto de criptografia em todas as solicitações de criptografia com o contexto CMM de criptografia necessário.

// Define the encryption context var encryptionContext = new Dictionary<string, string>() { {"purpose", "test"} };
Etapa 5: crie o objeto de entrada para a criptografia.

Antes de chamar o método Encrypt(), crie uma instância da classe EncryptInput.

string plaintext = File.ReadAllText("C:\\Documents\\CryptoTest\\TestFile.txt"); // Define the encrypt input var encryptInput = new EncryptInput { Plaintext = plaintext, Keyring = keyring, EncryptionContext = encryptionContext };
Etapa 6: criptografe o texto sem formatação.

Use o Encrypt() método do AWS Encryption SDK para criptografar o texto simples usando o chaveiro que você definiu.

O EncryptOutput que o método Encrypt() retorna tem métodos para obter a mensagem criptografada (Ciphertext), o contexto de criptografia e o pacote de algoritmos.

var encryptOutput = encryptionSdk.Encrypt(encryptInput);
Etapa 7: obtenha a mensagem criptografada.

O Decrypt() método no AWS Encryption SDK formulário. NETpega o Ciphertext membro da EncryptOutput instância.

O membro Ciphertext do objeto EncryptOutput é a mensagem criptografada, um objeto portátil que inclui dados criptografados, chaves de dados criptografadas e metadados, incluindo o contexto de criptografia. É possível armazenar com segurança a mensagem criptografada por um período prolongado ou enviá-la ao método Decrypt() para recuperar o texto sem formatação.

var encryptedMessage = encryptOutput.Ciphertext;

Descriptografando no modo estrito no formulário. AWS Encryption SDK NET

As práticas recomendadas indicam que você especifique as chaves usadas para descriptografar dados, uma opção conhecida como modo estrito. O AWS Encryption SDK usa somente as KMS chaves que você especifica em seu chaveiro para descriptografar o texto cifrado. As chaves no token de autenticação de descriptografia devem incluir pelo menos uma das chaves que criptografaram os dados.

Este exemplo mostra o padrão básico de descriptografia no modo estrito com o for. AWS Encryption SDK NET.

Etapa 1: Instanciar a biblioteca AWS Encryption SDK e os fornecedores de materiais.
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Etapa 2: criar o objeto de entrada para seu token de autenticação.

Para especificar os parâmetros do método do token de autenticação, crie um objeto de entrada. Cada método de chaveiro no formulário AWS Encryption SDK . NETtem um objeto de entrada correspondente. Como esse exemplo usa o método CreateAwsKmsKeyring() para criar o token de autenticação, ele instancia a classe CreateAwsKmsKeyringInput para a entrada.

Em um chaveiro de decodificação, você deve usar uma chave para identificar as chavesARN. KMS

string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var kmsKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn };
Etapa 3: criar o token de autenticação.

Para criar o token de autenticação da descriptografia, este exemplo usa o método CreateAwsKmsKeyring() e o objeto de entrada do token de autenticação.

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Etapa 4: crie o objeto de entrada para descriptografar.

Para criar o objeto de entrada para o método Decrypt(), instancie a classe DecryptInput.

O parâmetro Ciphertext do construtor DecryptInput() usa o membro Ciphertext do objeto EncryptOutput que o método Encrypt() retornou. A propriedade Ciphertext representa a mensagem criptografada, que inclui os dados criptografados, as chaves de dados criptografadas e os metadados que o AWS Encryption SDK necessita para descriptografar a mensagem.

Com a versão 4. x do AWS Encryption SDK formulário. NET, você pode usar o EncryptionContext parâmetro opcional para especificar seu contexto de criptografia no Decrypt() método.

Use o parâmetro EncryptionContext para verificar se o contexto de criptografia usado na criptografia está incluído no contexto de criptografia usado para descriptografar o texto cifrado. AWS Encryption SDK Isso adiciona pares ao contexto de criptografia, incluindo a assinatura digital, se você estiver usando um conjunto de algoritmos com assinatura, como o conjunto de algoritmos padrão.

var encryptedMessage = encryptOutput.Ciphertext; var decryptInput = new DecryptInput { Ciphertext = encryptedMessage, Keyring = keyring, EncryptionContext = encryptionContext // OPTIONAL };
Etapa 5: descriptografe o texto cifrado.
var decryptOutput = encryptionSdk.Decrypt(decryptInput);
Etapa 6: verifique o contexto de criptografia – versão 3.x

O Decrypt() método da versão 3. x do AWS Encryption SDK formulário. NETnão usa um contexto de criptografia. Ele obtém os valores do contexto de criptografia dos metadados na mensagem criptografada. No entanto, antes de retornar ou usar o texto simples, é recomendável verificar se o contexto de criptografia usado para descriptografar o texto cifrado inclui o contexto de criptografia que você forneceu ao criptografar.

Verifique se o contexto de criptografia usado na criptografia está incluído no contexto de criptografia usado para descriptografar o texto cifrado. AWS Encryption SDK Isso adiciona pares ao contexto de criptografia, incluindo a assinatura digital, se você estiver usando um conjunto de algoritmos com assinatura, como o conjunto de algoritmos padrão.

// Verify the encryption context string contextKey = "purpose"; string contextValue = "test"; if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue) || !decryptContextValue.Equals(contextValue)) { throw new Exception("Encryption context does not match expected values"); }

Descriptografando com um chaveiro Discovery no formulário. AWS Encryption SDK NET

Em vez de especificar as KMS chaves para decodificação, você pode fornecer um chaveiro de AWS KMS descoberta, que é um chaveiro que não especifica nenhuma chave. KMS Um chaveiro de descoberta permite AWS Encryption SDK descriptografar os dados usando qualquer KMS chave criptografada, desde que o chamador tenha permissão de decodificação na chave. Para obter as melhores práticas, adicione um filtro de descoberta que limita as KMS chaves que podem ser usadas para aquelas específicas Contas da AWS de uma partição especificada.

O AWS Encryption SDK para. NETfornece um chaveiro de descoberta básico que requer um AWS KMS cliente e um chaveiro de descoberta múltipla que exige que você especifique um ou mais. Regiões da AWS Tanto o cliente quanto as regiões limitam as KMS chaves que podem ser usadas para descriptografar a mensagem criptografada. Os objetos de entrada dos dois tokens de autenticação usam o filtro de descoberta recomendado.

O exemplo a seguir mostra o padrão para descriptografar dados com um token de autenticação de descoberta do AWS KMS e um filtro de descoberta.

Etapa 1: Instanciar a biblioteca AWS Encryption SDK e a biblioteca dos fornecedores de materiais.
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Etapa 2: criar o objeto de entrada para o token de autenticação.

Para especificar os parâmetros do método do token de autenticação, crie um objeto de entrada. Cada método de chaveiro no formulário AWS Encryption SDK . NETtem um objeto de entrada correspondente. Como esse exemplo usa o método CreateAwsKmsDiscoveryKeyring() para criar o token de autenticação, ele instancia a classe CreateAwsKmsDiscoveryKeyringInput para a entrada.

List<string> accounts = new List<string> { "111122223333" }; var discoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), DiscoveryFilter = new DiscoveryFilter() { AccountIds = accounts, Partition = "aws" } };
Etapa 3: criar o token de autenticação.

Para criar o token de autenticação da descriptografia, este exemplo usa o método CreateAwsKmsDiscoveryKeyring() e o objeto de entrada do token de autenticação.

var discoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(discoveryKeyringInput);
Etapa 4: crie o objeto de entrada para descriptografar.

Para criar o objeto de entrada para o método Decrypt(), instancie a classe DecryptInput. O valor do parâmetro Ciphertext é o membro Ciphertext do objeto EncryptOutput que o método Encrypt() retorna.

Com a versão 4. x do AWS Encryption SDK formulário. NET, você pode usar o EncryptionContext parâmetro opcional para especificar seu contexto de criptografia no Decrypt() método.

Use o parâmetro EncryptionContext para verificar se o contexto de criptografia usado na criptografia está incluído no contexto de criptografia usado para descriptografar o texto cifrado. AWS Encryption SDK Isso adiciona pares ao contexto de criptografia, incluindo a assinatura digital, se você estiver usando um conjunto de algoritmos com assinatura, como o conjunto de algoritmos padrão.

var ciphertext = encryptOutput.Ciphertext; var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = discoveryKeyring, EncryptionContext = encryptionContext // OPTIONAL }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
Etapa 5: verificar o contexto de criptografia - versão 3.x

O Decrypt() método da versão 3. x do AWS Encryption SDK formulário. NETnão usa um contexto de criptografia ativadoDecrypt(). Ele obtém os valores do contexto de criptografia dos metadados na mensagem criptografada. No entanto, antes de retornar ou usar o texto simples, é recomendável verificar se o contexto de criptografia usado para descriptografar o texto cifrado inclui o contexto de criptografia que você forneceu ao criptografar.

Verifique se o contexto de criptografia usado na criptografia foi incluído no contexto de criptografia usado para descriptografar o texto cifrado. AWS Encryption SDK Isso adiciona pares ao contexto de criptografia, incluindo a assinatura digital, se você estiver usando um conjunto de algoritmos com assinatura, como o conjunto de algoritmos padrão.

// Verify the encryption context string contextKey = "purpose"; string contextValue = "test"; if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue) || !decryptContextValue.Equals(contextValue)) { throw new Exception("Encryption context does not match expected values"); }