AWS Encryption SDK per. NET - AWS Encryption SDK

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWS Encryption SDK per. NET

Il AWS Encryption SDK per. NETè una libreria di crittografia lato client per sviluppatori che scrivono applicazioni in C# e altro. NETlinguaggi di programmazione. ed è supportata su Windows, macOS e Linux.

Nota

Versione 4.0.0 del AWS Encryption SDK for. NETsi discosta dalla specifica del messaggio. AWS Encryption SDK Di conseguenza, i messaggi crittografati dalla versione 4.0.0 possono essere decrittografati solo dalla versione 4.0.0 o successiva del for. AWS Encryption SDK NET. Non possono essere decifrati da nessun'altra implementazione del linguaggio di programmazione.

La versione 4.0.1 del for. AWS Encryption SDK NETscrive messaggi in base alla specifica del AWS Encryption SDK messaggio ed è interoperabile con altre implementazioni del linguaggio di programmazione. Per impostazione predefinita, la versione 4.0.1 può leggere i messaggi crittografati dalla versione 4.0.0. Tuttavia, se non si desidera decrittografare i messaggi crittografati dalla versione 4.0.0, è possibile specificare la NetV4_0_0_RetryPolicyproprietà per impedire al client di leggere questi messaggi. Per ulteriori informazioni, consulta le note di rilascio della versione 4.0.1 nel repository su. aws-encryption-sdk-dafny GitHub

Il per. AWS Encryption SDK NETsi differenzia da alcune delle altre implementazioni del linguaggio di programmazione per i AWS Encryption SDK seguenti motivi:

La AWS Encryption SDK per. NETinclude tutte le funzionalità di sicurezza introdotte nelle versioni 2.0. x e versioni successive di altre implementazioni linguistiche di AWS Encryption SDK. Tuttavia, se si utilizza il AWS Encryption SDK for. NETper decrittografare i dati crittografati con una versione precedente alla 2.0. x versione in un'altra lingua di implementazione AWS Encryption SDK, potrebbe essere necessario modificare la politica di impegno. Per informazioni dettagliate, consultare Come impostare la tua politica di impegno.

Il AWS Encryption SDK per. NETè un prodotto di AWS Encryption SDK in Dafny, un linguaggio di verifica formale in cui si scrivono le specifiche, il codice per implementarle e le bozze per testarle. Il risultato è una libreria che implementa le funzionalità di AWS Encryption SDK in un framework che garantisce la correttezza funzionale.

Ulteriori informazioni

  • Per esempi che mostrano come configurare le opzioni in AWS Encryption SDK, ad esempio la specificazione di una suite di algoritmi alternativa, la limitazione delle chiavi di dati crittografate e l'utilizzo di chiavi multiregionali, vedi. AWS KMS Configurazione del AWS Encryption SDK

  • Per informazioni dettagliate sulla programmazione con for. AWS Encryption SDK NET, vedi la aws-encryption-sdk-netdirectory del aws-encryption-sdk-dafny repository su GitHub.

Installazione del modulo AWS Encryption SDK . NET

Il AWS Encryption SDK per. NETè disponibile come AWS.Cryptography.EncryptionSDKconfezione in NuGet. Per i dettagli sull'installazione e la creazione del AWS Encryption SDK modulo. NET, consultate il READMEfile.md nel aws-encryption-sdk-net repository.

Versione 3.x

Versione 3. x del AWS Encryption SDK modulo. NETsupporti. NETFramework 4.5.2 — 4.8 solo su Windows. Supporta. NETCore 3.0+ e. NET5.0 e versioni successive su tutti i sistemi operativi supportati.

Versione 4.x

Versione 4. x del AWS Encryption SDK modulo. NETsupporti. NET6.0 e. NETFramework net48 e versioni successive.

Il AWS Encryption SDK per. NETrichiede i tasti AWS SDK for .NET anche se non si utilizzano AWS Key Management Service (AWS KMS). È installato con il NuGet pacchetto. Tuttavia, a meno che non si utilizzino AWS KMS le chiavi, AWS Encryption SDK per. NETnon richiede AWS credenziali o interazioni con alcun AWS servizio. Account AWS Per informazioni sulla configurazione di un AWS account, se necessario, consultaUtilizzo dell'AWS Encryption SDK con AWS KMS.

Esecuzione del debug del modulo. AWS Encryption SDK NET

Il AWS Encryption SDK per. NETnon genera alcun registro. Eccezioni nel modulo. AWS Encryption SDK NETgenera un messaggio di eccezione, ma nessuna traccia dello stack.

Per aiutarti a eseguire il debug, assicurati di abilitare l'accesso a. AWS SDK for .NET I registri e i messaggi di errore di AWS SDK for .NET possono aiutarti a distinguere gli errori derivanti dal modulo AWS SDK for .NET da quelli presenti nel modulo. AWS Encryption SDK NET. Per informazioni sulla AWS SDK for .NET registrazione, consulta AWSLoggingla Guida per gli AWS SDK for .NET sviluppatori. (Per vedere l'argomento, espandi Apri per visualizzare. NETSezione relativa ai contenuti del framework.)

AWS KMS portachiavi in forma AWS Encryption SDK . NET

I AWS KMS portachiavi di base in forma. AWS Encryption SDK NETprendi solo una KMS chiave. Richiedono anche un AWS KMS client, che ti dà l'opportunità Regione AWS di configurare il client per la KMS chiave.

Per creare un AWS KMS portachiavi con una o più chiavi avvolgenti, usa un portachiavi multiplo. AWS Encryption SDK Il per. NETha uno speciale portachiavi multiplo che accetta una o più AWS KMS chiavi e un portachiavi standard che accetta uno o più portachiavi di qualsiasi tipo supportato. Alcuni programmatori preferiscono utilizzare un metodo con più portachiavi per creare tutti i portachiavi e il comando for. AWS Encryption SDK NETsupporta questa strategia.

La AWS Encryption SDK per. NETfornisce portachiavi di base a chiave singola e portachiavi multipla per tutti i casi d'uso tipici, comprese le chiavi multiregionali. AWS KMS

Ad esempio, per creare un AWS KMS portachiavi con una sola AWS KMS chiave, puoi utilizzare il metodo. CreateAwsKmsKeyring()

Version 3.x

L'esempio seguente utilizza la versione 3. x del AWS Encryption SDK modulo. NETper creare un AWS KMS client predefinito per la regione che contiene la chiave specificata.

// 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

L'esempio seguente utilizza la versione 4. x del AWS Encryption SDK modulo. NETper creare un AWS KMS client per la regione che contenga la chiave specificata.

// 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);

Per creare un portachiavi con una o più AWS KMS chiavi, usa il CreateAwsKmsMultiKeyring() metodo. Questo esempio utilizza due AWS KMS chiavi. Per specificare una KMS chiave, utilizzate solo il Generator parametro. Il KmsKeyIds parametro che specifica le KMS chiavi aggiuntive è facoltativo.

L'input per questo portachiavi non richiede un AWS KMS client. AWS Encryption SDK Utilizza invece il AWS KMS client predefinito per ogni regione rappresentato da una KMS chiave nel portachiavi. Ad esempio, se la KMS chiave identificata dal valore del Generator parametro si trova nella regione () degli Stati Uniti occidentali (Oregonus-west-2), AWS Encryption SDK crea un AWS KMS client predefinito per la us-west-2 regione. Se è necessario personalizzare il AWS KMS client, utilizzare il CreateAwsKmsKeyring() metodo.

L'esempio seguente utilizza la versione 4. x del AWS Encryption SDK modulo. NETe il CreateAwsKmsKeyring() metodo per personalizzare il AWS KMS client.

// 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);

Versione 4. x del AWS Encryption SDK modulo. NETsupporta AWS KMS portachiavi che utilizzano la crittografia simmetrica (SYMMETRIC_DEFAULT) o chiavi asimmetriche. RSA KMS AWS KMS i portachiavi creati con chiavi asimmetriche possono contenere solo una coppia di RSA KMS chiavi.

Per crittografare con un RSA AWS KMS portachiavi asimmetrico, non hai bisogno di kms: GenerateDataKey o KMS:Encrypt perché devi specificare il materiale della chiave pubblica che desideri utilizzare per la crittografia quando crei il portachiavi. Non vengono effettuate chiamate durante la crittografia con questo portachiavi. AWS KMS Per decrittografare con un portachiavi asimmetrico RSA AWS KMS , è necessaria l'autorizzazione KMS:Decrypt.

Per creare un portachiavi asimmetrico, devi fornire la chiave pubblica e la chiave privata della tua RSA AWS KMS chiave asimmetrica. ARN RSA KMS La chiave pubblica deve essere codificata. PEM L'esempio seguente crea un AWS KMS portachiavi con una coppia di chiavi asimmetricaRSA.

// 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);

Contesti di crittografia richiesti nella versione 4.x

Con la versione 4. x del AWS Encryption SDK modulo. NET, è possibile utilizzare il contesto di crittografia richiesto CMM per richiedere contesti di crittografia nelle operazioni crittografiche. Un contesto di crittografia è un insieme di coppie chiave-valore non segrete. Il contesto di crittografia è associato crittograficamente ai dati crittografati in modo che sia necessario lo stesso contesto di crittografia per decrittografare il campo. Quando si utilizza il contesto di crittografia richiestoCMM, è possibile specificare una o più chiavi del contesto di crittografia richieste (chiavi obbligatorie) che devono essere incluse in tutte le chiamate di crittografia e decrittografia.

Nota

Il contesto di crittografia richiesto CMM è supportato solo dalle seguenti versioni:

  • Versione 3. x del SDK di crittografia AWS per Java

  • Versione 4. x del AWS Encryption SDK modulo. NET

  • Versione 4. x di SDK di crittografia AWS per Python, se utilizzato con la dipendenza opzionale Cryptographic Material Providers Library (MPL).

Se si crittografano i dati utilizzando il contesto di crittografia richiestoCMM, è possibile decrittografarli solo con una di queste versioni supportate.

Durante la crittografia, AWS Encryption SDK verifica che tutte le chiavi del contesto di crittografia richieste siano incluse nel contesto di crittografia specificato. Segna AWS Encryption SDK i contesti di crittografia specificati. Solo le coppie chiave-valore che non sono chiavi richieste vengono serializzate e archiviate in testo semplice nell'intestazione del messaggio crittografato restituito dall'operazione di crittografia.

In decrypt, è necessario fornire un contesto di crittografia che contenga tutte le coppie chiave-valore che rappresentano le chiavi richieste. AWS Encryption SDK Utilizza questo contesto di crittografia e le coppie chiave-valore memorizzate nell'intestazione del messaggio crittografato per ricostruire il contesto di crittografia originale specificato nell'operazione di crittografia. Se AWS Encryption SDK non è possibile ricostruire il contesto di crittografia originale, l'operazione di decrittografia ha esito negativo. Se si fornisce una coppia chiave-valore che contiene la chiave richiesta con un valore errato, il messaggio crittografato non può essere decrittografato. È necessario fornire la stessa coppia chiave-valore specificata in encrypt.

Importante

Valuta attentamente i valori che scegli per le chiavi richieste nel tuo contesto di crittografia. Devi essere in grado di fornire nuovamente le stesse chiavi e i valori corrispondenti al momento di decrypt. Se non riesci a riprodurre le chiavi richieste, il messaggio crittografato non può essere decrittografato.

L'esempio seguente inizializza un AWS KMS portachiavi con il contesto di crittografia richiesto. 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 si utilizza un AWS KMS portachiavi, il comando per. AWS Encryption SDK NETutilizza anche il contesto di crittografia per fornire dati autenticati aggiuntivi (AAD) nelle chiamate a cui effettua il portachiavi. AWS KMS