AWS Encryption SDK per. NETesempi - 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. NETesempi

Gli esempi seguenti mostrano i modelli di codifica di base utilizzati durante la programmazione con AWS Encryption SDK for. NET. In particolare, si crea un'istanza della libreria AWS Encryption SDK e della libreria dei fornitori di materiali. Quindi, prima di chiamare ogni metodo, create un'istanza di un oggetto che definisce l'input per il metodo. È molto simile al modello di codifica utilizzato in. AWS SDK for .NET

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 dati crittografate e l'utilizzo di chiavi AWS KMS multiregionali, vedi. Configurazione del AWS Encryption SDK

Per altri esempi di programmazione con for. AWS Encryption SDK NET, vedi gli esempi nella aws-encryption-sdk-net directory del aws-encryption-sdk-dafny repository su GitHub.

Crittografia dei dati nel modulo. AWS Encryption SDK NET

Questo esempio mostra lo schema di base per la crittografia dei dati. Crittografa un file di piccole dimensioni con chiavi di dati protette da una chiave di AWS KMS wrapping.

Fase 1: Crea un'istanza della libreria AWS Encryption SDK e della libreria dei fornitori di materiali.

Inizia creando un'istanza della libreria AWS Encryption SDK e dei fornitori di materiali. Utilizzerai i metodi descritti in per crittografare e AWS Encryption SDK decrittografare i dati. Utilizzerai i metodi della libreria dei provider di materiali per creare i portachiavi che specificano quali chiavi proteggono i tuoi dati.

Il modo in cui create un'istanza della libreria AWS Encryption SDK e della libreria dei fornitori di materiali differisce tra le versioni 3. x e 4. x del AWS Encryption SDK modulo. NET. Tutti i passaggi seguenti sono gli stessi per entrambe le versioni 3. x e 4. x del AWS Encryption SDK modulo. 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());
Fase 2: Creare un oggetto di input per il portachiavi.

Ogni metodo che crea un portachiavi ha una classe di oggetti di input corrispondente. Ad esempio, per creare l'oggetto di input per il CreateAwsKmsKeyring() metodo, create un'istanza della CreateAwsKmsKeyringInput classe.

Anche se l'input per questo portachiavi non specifica una chiave del generatore, l'unica KMS chiave specificata dal KmsKeyId parametro è la chiave del generatore. Genera e crittografa la chiave dati che crittografa i dati.

Questo oggetto di input richiede un AWS KMS client per Regione AWS la KMS chiave. Per creare un AWS KMS client, create un'istanza della AmazonKeyManagementServiceClient classe in. AWS SDK for .NET La chiamata al AmazonKeyManagementServiceClient() costruttore senza parametri crea un client con i valori predefiniti.

In un AWS KMS portachiavi utilizzato per la crittografia con il for. AWS Encryption SDK NET, è possibile identificare KMS le chiavi utilizzando l'ID della chiave, la chiaveARN, il nome alias o l'alias. ARN In un AWS KMS portachiavi utilizzato per la decrittografia, è necessario utilizzare una chiave per identificare ogni chiaveARN. KMS Se intendi riutilizzare il portachiavi di crittografia per la decrittografia, utilizza un identificatore di chiave per tutte le chiavi. ARN 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 };
Fase 3: Crea il portachiavi.

Per creare il portachiavi, chiamate il metodo keyring con l'oggetto di input del portachiavi. Questo esempio utilizza il CreateAwsKmsKeyring() metodo, che richiede una sola chiave. KMS

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Fase 4: Definire un contesto di crittografia.

Un contesto di crittografia è un elemento facoltativo, ma fortemente consigliato, delle operazioni crittografiche in. AWS Encryption SDKÈ possibile definire una o più coppie chiave-valore non segrete.

Nota

Con la versione 4. x del AWS Encryption SDK modulo. NET, è possibile richiedere un contesto di crittografia in tutte le richieste di crittografia con il contesto CMM di crittografia richiesto.

// Define the encryption context var encryptionContext = new Dictionary<string, string>() { {"purpose", "test"} };
Passaggio 5: Creare l'oggetto di input per la crittografia.

Prima di chiamare il Encrypt() metodo, create un'istanza della EncryptInput classe.

string plaintext = File.ReadAllText("C:\\Documents\\CryptoTest\\TestFile.txt"); // Define the encrypt input var encryptInput = new EncryptInput { Plaintext = plaintext, Keyring = keyring, EncryptionContext = encryptionContext };
Fase 6: Crittografa il testo in chiaro.

Usa il Encrypt() metodo di AWS Encryption SDK per crittografare il testo in chiaro usando il portachiavi che hai definito.

Il Encrypt() metodo EncryptOutput restituisce i metodi per ottenere il messaggio crittografato (Ciphertext), il contesto di crittografia e la suite di algoritmi.

var encryptOutput = encryptionSdk.Encrypt(encryptInput);
Passaggio 7: ottieni il messaggio crittografato.

Il Decrypt() metodo indicato nel AWS Encryption SDK modulo. NETprende il Ciphertext membro dell'EncryptOutputistanza.

Il Ciphertext membro dell'EncryptOutputoggetto è il messaggio crittografato, un oggetto portatile che include i dati crittografati, le chiavi di dati crittografate e i metadati, incluso il contesto di crittografia. È possibile archiviare in modo sicuro il messaggio crittografato per un periodo di tempo prolungato o inviarlo al Decrypt() metodo per recuperare il testo non crittografato.

var encryptedMessage = encryptOutput.Ciphertext;

Decrittografia in modalità rigorosa in forma. AWS Encryption SDK NET

Le migliori pratiche consigliano di specificare le chiavi da utilizzare per decrittografare i dati, un'opzione nota come modalità rigorosa. AWS Encryption SDK Utilizza solo le KMS chiavi specificate nel portachiavi per decrittografare il testo cifrato. Le chiavi del portachiavi di decrittografia devono includere almeno una delle chiavi che hanno crittografato i dati.

Questo esempio mostra lo schema di base di decrittografia in modalità rigorosa con il for. AWS Encryption SDK NET.

Fase 1: Crea un'istanza della libreria AWS Encryption SDK e dei fornitori di materiali.
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Passaggio 2: crea l'oggetto di input per il tuo portachiavi.

Per specificare i parametri per il metodo keyring, create un oggetto di input. Ogni metodo del portachiavi indicato nel AWS Encryption SDK modulo. NETha un oggetto di input corrispondente. Poiché questo esempio utilizza il CreateAwsKmsKeyring() metodo per creare il portachiavi, crea un'istanza della CreateAwsKmsKeyringInput classe per l'input.

In un portachiavi di decrittografia, è necessario utilizzare una chiave per identificare le chiavi. ARN 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 };
Fase 3: Creare il portachiavi.

Per creare il portachiavi di decrittografia, questo esempio utilizza il CreateAwsKmsKeyring() metodo e l'oggetto di input del portachiavi.

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Fase 4: Creare l'oggetto di input per la decrittografia.

Per creare l'oggetto di input per il Decrypt() metodo, create un'istanza della classe. DecryptInput

Il Ciphertext parametro del DecryptInput() costruttore prende il Ciphertext membro dell'EncryptOutputoggetto restituito dal metodo. Encrypt() La Ciphertext proprietà rappresenta il messaggio crittografato, che include i dati crittografati, le chiavi di dati crittografate e i metadati AWS Encryption SDK necessari per decrittografare il messaggio.

Con la versione 4. x del AWS Encryption SDK modulo. NET, è possibile utilizzare il EncryptionContext parametro opzionale per specificare il contesto di crittografia nel Decrypt() metodo.

Utilizzate il EncryptionContext parametro per verificare che il contesto di crittografia utilizzato in encrypt sia incluso nel contesto di crittografia utilizzato per decrittografare il testo cifrato. AWS Encryption SDK Aggiunge coppie al contesto di crittografia, inclusa la firma digitale se si utilizza una suite di algoritmi con firma, come la suite di algoritmi predefinita.

var encryptedMessage = encryptOutput.Ciphertext; var decryptInput = new DecryptInput { Ciphertext = encryptedMessage, Keyring = keyring, EncryptionContext = encryptionContext // OPTIONAL };
Passaggio 5: decriptare il testo cifrato.
var decryptOutput = encryptionSdk.Decrypt(decryptInput);
Fase 6: Verificare il contesto di crittografia — Versione 3. x

Il Decrypt() metodo della versione 3. x del AWS Encryption SDK modulo. NETnon utilizza un contesto di crittografia. Ottiene i valori del contesto di crittografia dai metadati del messaggio crittografato. Tuttavia, prima di restituire o utilizzare il testo non crittografato, è consigliabile verificare che il contesto di crittografia utilizzato per decrittografare il testo cifrato includa il contesto di crittografia fornito durante la crittografia.

Verifica che il contesto di crittografia utilizzato per crittografare sia incluso nel contesto di crittografia utilizzato per decrittografare il testo cifrato. AWS Encryption SDK Aggiunge coppie al contesto di crittografia, inclusa la firma digitale se utilizzi una suite di algoritmi con firma, come la suite di algoritmi predefinita.

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

Decrittografia con un portachiavi Discovery integrato. AWS Encryption SDK NET

Invece di specificare KMS le chiavi per la decrittografia, puoi fornire un portachiavi AWS KMS Discovery, ovvero un portachiavi che non specifica alcuna chiave. KMS Un portachiavi Discovery consente di AWS Encryption SDK decrittografare i dati utilizzando la chiave che li ha crittografati, a condizione che il chiamante disponga dell'autorizzazione di decrittografia sulla KMS chiave. Per le migliori pratiche, aggiungi un filtro di rilevamento che limiti le KMS chiavi che possono essere utilizzate a quelle, in particolare, di una partizione specificata. Account AWS

Il AWS Encryption SDK per. NETfornisce un portachiavi Discovery di base che richiede un AWS KMS client e un portachiavi Discovery multiplo che richiede di specificarne uno o più. Regioni AWS Sia il client che le regioni limitano le KMS chiavi che possono essere utilizzate per decrittografare il messaggio crittografato. Gli oggetti di input per entrambi i portachiavi utilizzano il filtro di scoperta consigliato.

L'esempio seguente mostra lo schema per la decrittografia dei dati con un portachiavi AWS KMS Discovery e un Discovery Filter.

Fase 1: Crea un'istanza della libreria AWS Encryption SDK e della libreria dei fornitori di materiali.
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
Passaggio 2: creare l'oggetto di input per il portachiavi.

Per specificare i parametri per il metodo keyring, create un oggetto di input. Ogni metodo del portachiavi indicato nel AWS Encryption SDK modulo. NETha un oggetto di input corrispondente. Poiché questo esempio utilizza il CreateAwsKmsDiscoveryKeyring() metodo per creare il portachiavi, crea un'istanza della CreateAwsKmsDiscoveryKeyringInput classe per l'input.

List<string> accounts = new List<string> { "111122223333" }; var discoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), DiscoveryFilter = new DiscoveryFilter() { AccountIds = accounts, Partition = "aws" } };
Fase 3: Creare il portachiavi.

Per creare il portachiavi di decrittografia, questo esempio utilizza il CreateAwsKmsDiscoveryKeyring() metodo e l'oggetto di input del portachiavi.

var discoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(discoveryKeyringInput);
Fase 4: Creare l'oggetto di input per la decrittografia.

Per creare l'oggetto di input per il Decrypt() metodo, create un'istanza della classe. DecryptInput Il valore del Ciphertext parametro è il Ciphertext membro dell'EncryptOutputoggetto restituito dal Encrypt() metodo.

Con la versione 4. x del AWS Encryption SDK modulo. NET, è possibile utilizzare il EncryptionContext parametro opzionale per specificare il contesto di crittografia nel Decrypt() metodo.

Utilizzate il EncryptionContext parametro per verificare che il contesto di crittografia utilizzato in encrypt sia incluso nel contesto di crittografia utilizzato per decrittografare il testo cifrato. AWS Encryption SDK Aggiunge coppie al contesto di crittografia, inclusa la firma digitale se si utilizza una suite di algoritmi con firma, come la suite di algoritmi predefinita.

var ciphertext = encryptOutput.Ciphertext; var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = discoveryKeyring, EncryptionContext = encryptionContext // OPTIONAL }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
Fase 5: Verifica del contesto di crittografia — Versione 3. x

Il Decrypt() metodo della versione 3. x del AWS Encryption SDK modulo. NETnon utilizza un contesto di crittografiaDecrypt(). Ottiene i valori del contesto di crittografia dai metadati del messaggio crittografato. Tuttavia, prima di restituire o utilizzare il testo non crittografato, è consigliabile verificare che il contesto di crittografia utilizzato per decrittografare il testo cifrato includa il contesto di crittografia fornito durante la crittografia.

Verifica che il contesto di crittografia utilizzato per crittografare sia incluso nel contesto di crittografia utilizzato per decrittografare il testo cifrato. AWS Encryption SDK Aggiunge coppie al contesto di crittografia, inclusa la firma digitale se utilizzi una suite di algoritmi con firma, come la suite di algoritmi predefinita.

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