SDK di crittografia AWS per JavaScript Esempi di - 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à.

SDK di crittografia AWS per JavaScript Esempi di

Gli esempi seguenti illustrano come utilizzare SDK di crittografia AWS per JavaScript per crittografare e decrittare i dati.

Puoi trovare ulteriori esempi di utilizzoSDK di crittografia AWS per JavaScriptnellaexample-nodeeexample-browsermoduli nellaaws-encryption-sdkJavaScriptrepository suGitHub. Questi moduli di esempio non vengono installati quando installi i moduli client-browser o client-node.

Consulta gli esempi di codice completi: Nodo:kms_simple.ts, Browser:kms_simple.ts

Crittografia dei dati con unAWS KMSKeyring

Nell'esempio seguente viene illustrato come utilizzare SDK di crittografia AWS per JavaScript per crittografare e decrittare una stringa breve o una matrice di byte.

Questo esempio presenta unAWS KMSKeyring, un tipo di portachiavi che utilizza unAWS KMS keyper generare e crittografare le chiavi dati. Per aiuto nella creazione di unAWS KMS key, consultaCreazione di chiavinellaAWS Key Management ServiceGuida per gli sviluppatori. Per aiuto nell'identificazione delAWS KMS keysin unAWS KMSKeyring, vediIdentificazione di AWS KMS keys in un keyring AWS KMS

Fase 1: Costruisci il keyring.

Creazione di unAWS KMSkeyring per la crittografia.

Quando si crittografa con unAWS KMSportachiavi, è necessario specificare ungeneratore di chiavi, cioè unAWS KMS keyche viene utilizzato per generare la chiave di dati di testo normale e crittografarla. Inoltre puoi specificare zero o più chiavi aggiuntive per crittografare la stessa chiave di dati di testo normale. Il keyring restituisce la chiave di dati di testo normale e una copia crittografata di tale chiave di dati per ciascuna AWS KMS key nel keyring, inclusa la chiave generatore. Per decrittare i dati, è necessario decrittare una qualsiasi delle chiavi di dati crittografate.

Per specificare le AWS KMS keys per un keyring di crittografia in SDK di crittografia AWS per JavaScript, puoi utilizzare qualsiasi identificatore di chiave AWS KMS supportato. In questo esempio viene utilizzata una chiave generatore, identificata dal relativo ARN di alias e una chiave aggiuntiva, identificata da un ARN di chiave.

Nota

Se hai intenzione di riutilizzare il tuoAWS KMSKeyring per la decrittazione, devi utilizzare i codici ARN di chiave per identificareAWS KMS keysnel keyring.

Prima di eseguire questo codice, sostituisci gli identificatori di AWS KMS key di esempio con identificatori validi. Devi disporre delle autorizzazioni necessarie per utilizzare le AWS KMS keys nel keyring.

JavaScript Browser

Inizia fornendo le credenziali nel browser. LaSDK di crittografia AWS per JavaScriptesempi di utilizzanowebpack.DefinePluginche sostituisce le costanti delle credenziali con le credenziali effettive. Tuttavia puoi utilizzare qualsiasi metodo per fornire le credenziali. Quindi, utilizza le credenziali per creare un client AWS KMS.

declare const credentials: {accessKeyId: string, secretAccessKey:string, sessionToken:string } const clientProvider = getClient(KMS, { credentials: { accessKeyId, secretAccessKey, sessionToken } })

Successivamente, specificare ilAWS KMS keysper la chiave generatore e la chiave aggiuntiva. Quindi, crea unAWS KMSKeyring che utilizzaAWS KMSclient e ilAWS KMS keys.

const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:alias/EncryptDecrypt' const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'] const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds })
JavaScript Node.js
const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:alias/EncryptDecrypt' const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'] const keyring = new KmsKeyringNode({ generatorKeyId, keyIds })
Fase 2: Impostazione del contesto di crittografia.

Un contesto di crittografia è rappresentato da tipi di dati autenticati aggiuntivi arbitrari e non segreti. Quando fornisci un contesto durante la crittografia, l'AWS Encryption SDK lo vincola al testo cifrato a livello crittografico, per cui dovrai utilizzare lo stesso contesto di crittografia per decrittare i dati. L'utilizzo di un contesto di crittografia è facoltativo, ma viene consigliato come best practice.

Crea un oggetto semplice che includa le coppie di contesto di crittografia. La chiave e il valore di ogni coppia devono essere una stringa.

JavaScript Browser
const context = { stage: 'demo', purpose: 'simple demonstration app', origin: 'us-west-2' }
JavaScript Node.js
const context = { stage: 'demo', purpose: 'simple demonstration app', origin: 'us-west-2' }
Fase 3: Crittografa i dati.

Per crittografare i dati di testo normale, chiama la funzione encrypt. Passa nelAWS KMSkeyring, i dati di testo normale e il contesto di crittografia.

La funzione encrypt restituisce un messaggio crittografato (result) che contiene i dati crittografati, le chiavi di dati crittografate e i metadati importanti, inclusi il contesto di crittografia e la firma.

Puoi decrittare questo messaggio crittografato utilizzando AWS Encryption SDK per qualsiasi linguaggio di programmazione supportato.

JavaScript Browser
const plaintext = new Uint8Array([1, 2, 3, 4, 5]) const { result } = await encrypt(keyring, plaintext, { encryptionContext: context })
JavaScript Node.js
const plaintext = 'asdf' const { result } = await encrypt(keyring, plaintext, { encryptionContext: context })

Decrittazione dei dati con unAWS KMSKeyring

Puoi utilizzare SDK di crittografia AWS per JavaScript per decrittare il messaggio crittografato e recuperare i dati originali.

In questo esempio, esegui la decrittazione dei dati crittografati nell'esempio Crittografia dei dati con unAWS KMSKeyring.

Fase 1: Costruisci il keyring.

Per decrittare i dati, passa il messaggio crittografato (result) restituito dalla funzione encrypt. Il messaggio crittografato include i dati crittografati, le chiavi di dati crittografate e i metadati importanti, inclusi il contesto di crittografia e la firma.

È inoltre necessario specificare unAWS KMSKeyringdurante la decrittografia. Puoi utilizzare lo stesso keyring usato per crittografare i dati o un keyring diverso. Per restituire l'esito positivo, almeno una AWS KMS key nel keyring di decrittazione deve essere in grado di decrittare una delle chiavi di dati crittografate nel messaggio crittografato. Poiché non vengono generate chiavi di dati, non è necessario specificare una chiave generatore in un keyring di decrittazione. Se la specifichi, la chiave generatore e le chiavi aggiuntive vengono trattate allo stesso modo.

Per specificare unAWS KMS keyper un portachiavi di decrittografia nelSDK di crittografia AWS per JavaScript, devi utilizzareARN della chiave. In caso contrario, la AWS KMS key non viene riconosciuta. Per aiuto nell'identificazione delAWS KMS keysin unAWS KMSKeyring, vediIdentificazione di AWS KMS keys in un keyring AWS KMS

Nota

Se usi lo stesso keyring per crittografare e decrittare, usa gli ARN di chiave per identificare le AWS KMS keys nel keyring.

In questo esempio, viene creato un keyring che include solo una delle AWS KMS keys nel keyring di crittografia. Prima di eseguire questo codice, sostituisci l'ARN della chiave di esempio con uno valido. Devi disporre dell'autorizzazione kms:Decrypt per la AWS KMS key.

JavaScript Browser

Inizia fornendo le credenziali nel browser. LaSDK di crittografia AWS per JavaScriptesempi di utilizzanowebpack.DefinePluginche sostituisce le costanti delle credenziali con le credenziali effettive. Tuttavia puoi utilizzare qualsiasi metodo per fornire le credenziali. Quindi, utilizza le credenziali per creare un client AWS KMS.

declare const credentials: {accessKeyId: string, secretAccessKey:string, sessionToken:string } const clientProvider = getClient(KMS, { credentials: { accessKeyId, secretAccessKey, sessionToken } })

Quindi, crea unAWS KMSKeyring che utilizzaAWS KMScliente. In questo esempio viene utilizzata solo una delle AWS KMS keys del keyring di crittografia.

const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'] const keyring = new KmsKeyringBrowser({ clientProvider, keyIds })
JavaScript Node.js
const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'] const keyring = new KmsKeyringNode({ keyIds })
Fase 2: Decrittografare i dati.

A questo punto, chiama la funzione decrypt. Passa il keyring di decrittazione appena creato (keyring) e il messaggio crittografato restituito dalla funzione encrypt (result). AWS Encryption SDK utilizza il keyring per decrittare una delle chiavi di dati crittografate. Quindi, utilizza la chiave di dati in testo normale per decrittare i dati.

Se la chiamata ha esito positivo, il campo plaintext contiene i dati di testo normale (decrittati). Il campo messageHeader contiene i metadati relativi al processo di decrittazione, incluso il contesto di crittografia utilizzato per decrittare i dati.

JavaScript Browser
const { plaintext, messageHeader } = await decrypt(keyring, result)
JavaScript Node.js
const { plaintext, messageHeader } = await decrypt(keyring, result)
Fase 3: Verifica il contesto di crittografia.

Il contesto di crittografia utilizzato per decrittare i dati è incluso nell'intestazione del messaggio (messageHeader) restituita dalla funzione decrypt. Prima che l'applicazione restituisca i dati di testo normale, verifica che il contesto di crittografia fornito durante la crittografia sia incluso nel contesto di crittografia utilizzato per la decrittazione. Una mancata corrispondenza potrebbe indicare che i dati sono stati manomessi o che non è stato decrittato il testo crittografato corretto.

Quando si verifica il contesto di crittografia, non è necessaria una corrispondenza esatta. Quando usi un algoritmo di crittografia con la firma, il responsabile di materiali crittografici (CMM) aggiunge la chiave di firma pubblica al contesto di crittografia prima di crittografare il messaggio. Tuttavia, tutte le coppie di contesto di crittografia inviate devono essere incluse nel contesto di crittografia restituito.

Innanzitutto, ottieni il contesto di crittografia dall'intestazione del messaggio. Verifica quindi che ogni coppia chiave-valore nel contesto di crittografia originale (context) corrisponda a una coppia chiave-valore nel contesto di crittografia restituito (encryptionContext).

JavaScript Browser
const { encryptionContext } = messageHeader Object .entries(context) .forEach(([key, value]) => { if (encryptionContext[key] !== value) throw new Error('Encryption Context does not match expected values') })
JavaScript Node.js
const { encryptionContext } = messageHeader Object .entries(context) .forEach(([key, value]) => { if (encryptionContext[key] !== value) throw new Error('Encryption Context does not match expected values') })

Se il controllo del contesto di crittografia ha esito positivo, puoi restituire i dati di testo normale.