AWS Encryption SDK para. NET - 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. NET

O AWS Encryption SDK para. NETé uma biblioteca de criptografia do lado do cliente para desenvolvedores que estão escrevendo aplicativos em C# e outros. NETlinguagens de programação. É compatível com Windows, macOS e Linux.

nota

Versão 4.0.0 do AWS Encryption SDK for. NETse desvia da Especificação da AWS Encryption SDK Mensagem. Como resultado, as mensagens criptografadas pela versão 4.0.0 só podem ser descriptografadas pela versão 4.0.0 ou posterior do for. AWS Encryption SDK NET. Eles não podem ser descriptografados por nenhuma outra implementação de linguagem de programação.

Versão 4.0.1 do AWS Encryption SDK for. NETgrava mensagens de acordo com a Especificação da AWS Encryption SDK Mensagem e é interoperável com outras implementações de linguagem de programação. Por padrão, a versão 4.0.1 pode ler mensagens criptografadas pela versão 4.0.0. No entanto, se você não quiser descriptografar mensagens criptografadas pela versão 4.0.0, você pode especificar a propriedade NetV4_0_0_RetryPolicy para impedir que o cliente leia essas mensagens. Para obter mais informações, consulte as notas de versão v4.0.1 no aws-encryption-sdk-dafny repositório em. GitHub

O AWS Encryption SDK para. NETdifere de algumas das outras implementações de linguagem de programação do AWS Encryption SDK das seguintes maneiras:

O AWS Encryption SDK para. NETinclui todos os recursos de segurança introduzidos nas versões 2.0. x e posteriores de outras implementações de linguagem do AWS Encryption SDK. No entanto, se você estiver usando o AWS Encryption SDK for. NETpara descriptografar dados que foram criptografados por uma versão pré-2.0. versão x outra implementação de linguagem do AWS Encryption SDK, talvez seja necessário ajustar sua política de compromisso. Para obter detalhes, consulte Como definir sua política de compromisso.

O AWS Encryption SDK para. NETé um produto do AWS Encryption SDK in Dafny, uma linguagem de verificação formal na qual você escreve especificações, o código para implementá-las e as provas para testá-las. O resultado é uma biblioteca que implementa os atributos do AWS Encryption SDK em uma estrutura que garante a correção funcional.

Saiba mais

  • 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 detalhes sobre a programação com o AWS Encryption SDK for. NET, consulte o aws-encryption-sdk-netdiretório do aws-encryption-sdk-dafny repositório em. GitHub

Instalando o AWS Encryption SDK para. NET

O AWS Encryption SDK para. NETestá disponível como AWS.Cryptography.EncryptionSDKpacote em NuGet. Para obter detalhes sobre como instalar e construir o AWS Encryption SDK for. NET, consulte o READMEarquivo.md no aws-encryption-sdk-net repositório.

Versão 3.x

Versão 3. x do AWS Encryption SDK formulário. NETsuportes. NETFramework 4.5.2 — 4.8 somente no Windows. Ele suporta. NETCore 3.0+ e. NET5.0 e versões posteriores em todos os sistemas operacionais compatíveis.

Versão 4.x

Versão 4. x do AWS Encryption SDK formulário. NETsuportes. NET6.0 e. NETFramework net48 e versões posteriores.

O AWS Encryption SDK para. NETrequer o AWS SDK for .NET mesmo se você não estiver usando as teclas AWS Key Management Service (AWS KMS). Ele é instalado com o NuGet pacote. No entanto, a menos que você esteja usando AWS KMS chaves, AWS Encryption SDK para. NETnão requer AWS credenciais ou interação com nenhum AWS serviço. Conta da AWS Para obter ajuda para configurar uma AWS conta, se necessário, consulteUso da AWS Encryption SDK com o AWS KMS.

Depurando o para. AWS Encryption SDK NET

O AWS Encryption SDK para. NETnão gera nenhum registro. Exceções no formato AWS Encryption SDK . NETgera uma mensagem de exceção, mas sem rastreamentos de pilha.

Para ajudar na depuração, certifique-se de habilitar o login no AWS SDK for .NET. Os registros e mensagens de erro do AWS SDK for .NET podem ajudá-lo a distinguir os erros decorrentes AWS SDK for .NET do e os do AWS Encryption SDK for. NET. Para obter ajuda com o AWS SDK for .NET registro, consulte AWSLoggingo Guia do AWS SDK for .NET desenvolvedor. (Para ver o tópico, expanda a opção Abrir para ver. NETSeção de conteúdo da estrutura.)

AWS KMS chaveiros em forma AWS Encryption SDK . NET

Os AWS KMS chaveiros básicos em forma AWS Encryption SDK de. NETpegue apenas uma KMS chave. Eles também exigem um AWS KMS cliente, o que lhe dá a oportunidade Região da AWS de configurar o cliente para a KMS chave.

Para criar um AWS KMS chaveiro com uma ou mais teclas de embrulho, use um chaveiro múltiplo. O AWS Encryption SDK para. NETtem um porta-chaves especial que aceita uma ou mais AWS KMS teclas e um porta-chaves padrão que aceita um ou mais chaveiros de qualquer tipo compatível. Alguns programadores preferem usar um método de vários chaveiros para criar todos os seus chaveiros, e assim por diante. AWS Encryption SDK NETapoia essa estratégia.

O AWS Encryption SDK para. NETfornece chaveiros básicos de chave única e vários chaveiros para todos os casos de uso típicos, incluindo chaves multirregionais. AWS KMS

Por exemplo, para criar um AWS KMS chaveiro com uma AWS KMS chave, você pode usar o CreateAwsKmsKeyring() método.

Version 3.x

O exemplo a seguir usa a versão 3. x do AWS Encryption SDK formulário. NETpara criar um AWS KMS cliente padrão para a região que contém a chave especificada.

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); 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 }; // Create the keyring var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Version 4.x

O exemplo a seguir usa a versão 4. x do AWS Encryption SDK formulário. NETpara criar um AWS KMS cliente para a região que contenha a chave especificada.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsArn }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput);

Para criar um chaveiro com uma ou mais AWS KMS chaves, use o CreateAwsKmsMultiKeyring() método. Este exemplo usa duas AWS KMS chaves. Para especificar uma KMS chave, use somente o Generator parâmetro. O KmsKeyIds parâmetro que especifica KMS chaves adicionais é opcional.

A entrada para este chaveiro não requer um AWS KMS cliente. Em vez disso, AWS Encryption SDK ele usa o AWS KMS cliente padrão para cada região representado por uma KMS chave no chaveiro. Por exemplo, se a KMS chave identificada pelo valor do Generator parâmetro estiver na região Oeste dos EUA (Oregon) (us-west-2), ela AWS Encryption SDK criará um AWS KMS cliente padrão para a us-west-2 região. Se você precisar personalizar o cliente do AWS KMS , use o método CreateAwsKmsKeyring().

O exemplo a seguir usa a versão 4. x do AWS Encryption SDK formulário. NETe o CreateAwsKmsKeyring() método para personalizar o AWS KMS cliente.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<string> additionalKeys = new List<string> { "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" }; // Instantiate the keyring input object var createEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput { Generator = generatorKey, KmsKeyIds = additionalKeys }; var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(createEncryptKeyringInput);

Versão 4. x do AWS Encryption SDK formulário. NETsuporta AWS KMS chaveiros que usam criptografia simétrica (SYMMETRIC_DEFAULT) ou chaves RSA KMS assimétricas. AWS KMS chaveiros criados com chaves assimétricas só podem conter um par de RSA KMS chaves.

Para criptografar com um RSA AWS KMS chaveiro assimétrico, você não precisa de kms: GenerateDataKey ou kms:Encrypt porque você deve especificar o material de chave pública que deseja usar para criptografia ao criar o chaveiro. Nenhuma AWS KMS chamada é feita ao criptografar com este chaveiro. Para descriptografar com um RSA AWS KMS chaveiro assimétrico, você precisa da permissão kms:Decrypt.

Para criar um RSA AWS KMS chaveiro assimétrico, você deve fornecer a chave pública e a chave privada ARN da sua chave assimétrica. RSA KMS A chave pública deve ser PEM codificada. O exemplo a seguir cria um AWS KMS chaveiro com um par de chaves assimétricoRSA.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var publicKey = new MemoryStream(Encoding.UTF8.GetBytes(AWS KMS RSA public key)); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = AWS KMS RSA private key ARN, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; // Create the keyring var kmsRsaKeyring = mpl.CreateAwsKmsRsaKeyring(createKeyringInput);

Contextos de criptografia necessários na versão 4.x

Com a versão 4. x do AWS Encryption SDK formulário. NET, você pode usar o contexto de criptografia necessário CMM para exigir contextos de criptografia em suas operações criptográficas. Um contexto de criptografia é um conjunto de pares de chave/valor não secretos. O contexto de criptografia é associado de maneira criptográfica aos dados criptografados de forma que o mesmo contexto de criptografia é necessário para descriptografar o campo. Ao usar o contexto de criptografia necessárioCMM, você pode especificar uma ou mais chaves de contexto de criptografia necessárias (chaves obrigatórias) que devem ser incluídas em todas as chamadas de criptografia e descriptografia.

nota

O contexto de criptografia necessário só CMM é suportado pelas seguintes versões:

Se você criptografar dados usando o contexto de criptografia necessárioCMM, só poderá descriptografá-los com uma dessas versões suportadas.

Ao criptografar, AWS Encryption SDK verifica se todas as chaves de contexto de criptografia necessárias estão incluídas no contexto de criptografia que você especificou. Os AWS Encryption SDK sinais dos contextos de criptografia que você especificou. Somente os pares de chave/valor que não são chaves obrigatórias são serializados e armazenados em texto simples no cabeçalho da mensagem criptografada retornada pela operação de criptografia.

Ao descriptografar, você deve fornecer um contexto de criptografia que contenha todos os pares de chave/valor que representam as chaves necessárias. O AWS Encryption SDK usa esse contexto de criptografia e os pares de valores-chave armazenados no cabeçalho da mensagem criptografada para reconstruir o contexto de criptografia original que você especificou na operação de criptografia. Se não for AWS Encryption SDK possível reconstruir o contexto de criptografia original, a operação de descriptografia falhará. Se você fornecer um par de chave/valor que contenha a chave necessária com um valor incorreto, a mensagem criptografada não poderá ser descriptografada. Você deve fornecer o mesmo par de chave/valor especificado na criptografia.

Importante

Considere cuidadosamente quais valores você escolhe para as chaves necessárias no contexto de criptografia. Você deverá fornecer as mesmas chaves e os valores correspondentes novamente na descriptografia. Se você não conseguir reproduzir as chaves necessárias, a mensagem criptografada não poderá ser descriptografada.

O exemplo a seguir inicializa um AWS KMS chaveiro com o contexto de criptografia necessário. CMM

var encryptionContext = new Dictionary<string, string>() { {"encryption", "context"}, {"is not", "secret"}, {"but adds", "useful metadata"}, {"that can help you", "be confident that"}, {"the data you are handling", "is what you think it is"} }; // Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsKey }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput); var createCMMInput = new CreateRequiredEncryptionContextCMMInput { UnderlyingCMM = mpl.CreateDefaultCryptographicMaterialsManager(new CreateDefaultCryptographicMaterialsManagerInput{Keyring = kmsKeyring}), // If you pass in a keyring but no underlying cmm, it will result in a failure because only cmm is supported. RequiredEncryptionContextKeys = new List<string>(encryptionContext.Keys) }; // Create the required encryption context CMM var requiredEcCMM = mpl.CreateRequiredEncryptionContextCMM(createCMMInput);

Se você usa um AWS KMS chaveiro, o AWS Encryption SDK para. NETtambém usa o contexto de criptografia para fornecer dados autenticados adicionais (AAD) nas chamadas que o chaveiro faz. AWS KMS