AWS Encryption SDKper esempi di.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 SDKper esempi di.NET

Negli esempi seguenti vengono illustrati i modelli di codifica di base utilizzati AWS Encryption SDK per la programmazione con .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 inAWS 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 della AWS Encryption SDK

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

Crittografia dei dati in per.NET AWS Encryption SDK

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 per .NET. Tutti i passaggi seguenti sono gli stessi per entrambe le versioni 3. x e 4. x del AWS Encryption SDK per .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, la singola chiave KMS 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 la chiave Regione AWS KMS. Per creare un AWS KMS client, crea 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 AWS Encryption SDK for .NET, è possibile identificare le chiavi KMS utilizzando l'ID della chiave, l'ARN della chiave, il nome alias o l'alias ARN. In un AWS KMS portachiavi utilizzato per la decrittografia, è necessario utilizzare una chiave ARN per identificare ogni chiave KMS. Se prevedi di riutilizzare il tuo portachiavi di crittografia per la decrittografia, utilizza un identificatore ARN di chiave per tutte le chiavi 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 solo una 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 of the AWS Encryption SDK per .NET, è possibile richiedere un contesto di crittografia in tutte le richieste di crittografia con il contesto di crittografia richiesto CMM.

// 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 in per.NET accetta il Ciphertext membro dell'EncryptOutputistanza. AWS Encryption SDK

Il Ciphertext membro dell'EncryptOutputoggetto è il messaggio crittografato, un oggetto portatile che include i dati crittografati, le chiavi di dati crittografati 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 per.NET AWS Encryption SDK

Le migliori pratiche consigliano di specificare le chiavi da utilizzare per decrittografare i dati, un'opzione nota come modalità rigorosa. AWS Encryption SDKUtilizza solo le chiavi KMS 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 per la decrittografia in modalità rigorosa con for.NET. AWS Encryption SDK

Fase 1: Creare 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 keyring in per.NET ha un oggetto di input corrispondente. AWS Encryption SDK 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 ARN per identificare le chiavi 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 di AWS Encryption SDK per .NET, è possibile utilizzare il EncryptionContext parametro opzionale per specificare il contesto di crittografia nel Decrypt() metodo.

Utilizza il EncryptionContext parametro per verificare che il contesto di crittografia utilizzato per crittografare sia incluso nel contesto di crittografia utilizzato per decrittografare il testo cifrato. AWS Encryption SDKAggiunge 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 of the AWS Encryption SDK for .NET non 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 SDKAggiunge 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 in formato.NET AWS Encryption SDK

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

Il portachiavi AWS Encryption SDK per .NET fornisce un portachiavi di 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 chiavi KMS 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 keyring in per.NET ha un oggetto di input corrispondente. AWS Encryption SDK 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 di AWS Encryption SDK per .NET, è possibile utilizzare il EncryptionContext parametro opzionale per specificare il contesto di crittografia nel Decrypt() metodo.

Utilizza il EncryptionContext parametro per verificare che il contesto di crittografia utilizzato per crittografare sia incluso nel contesto di crittografia utilizzato per decrittografare il testo cifrato. AWS Encryption SDKAggiunge 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 of the AWS Encryption SDK for .NET non 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 SDKAggiunge 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"); }