

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à.

# Qual è il AWS Encryption SDK?
<a name="introduction"></a>

 AWS Encryption SDK È una libreria di crittografia lato client progettata per consentire a tutti di crittografare e decrittografare facilmente i dati utilizzando gli standard e le migliori pratiche del settore. Questo servizio consente di concentrarsi sulle funzionalità principali dell'applicazione, piuttosto che su come crittografare e decrittografare i dati nel migliore dei modi. AWS Encryption SDK Viene fornito gratuitamente con la licenza Apache 2.0.

Le AWS Encryption SDK risposte a domande come le seguenti:
+ Quale algoritmo di crittografia devo usare?
+ Come o in che modo è consigliabile utilizzare tale algoritmo?
+ Come posso generare la chiave di crittografia?
+ Come posso proteggere la chiave di crittografia e dove è possibile archiviarla?
+ Come posso rendere i miei dati crittografati portatili?
+ Come posso assicurarmi che il destinatario previsto possa leggere i miei dati crittografati?
+ Come posso garantire che i miei dati crittografati non vengano modificati nel periodo che intercorre tra la scrittura e la lettura?
+ Come posso usare le chiavi dati che AWS KMS restituiscono?

Con AWS Encryption SDK, definisci un [fornitore di chiavi principali](concepts.md#master-key-provider) o un [portachiavi](concepts.md#keyring) che determina quali chiavi di wrapping utilizzare per proteggere i tuoi dati. Quindi crittografate e decrittografate i dati utilizzando i metodi semplici forniti da. AWS Encryption SDK Il resto lo fa. AWS Encryption SDK 

Senza il AWS Encryption SDK, potreste dedicare più sforzi alla creazione di una soluzione di crittografia che alle funzionalità di base dell'applicazione. AWS Encryption SDK Risponde a queste domande fornendo le seguenti informazioni.

**Un'implementazione predefinita conforme alle best practice di crittografia**  
Per impostazione predefinita, AWS Encryption SDK genera una chiave dati univoca per ogni oggetto di dati che crittografa. Questo segue le best practice di crittografia sull'uso di chiavi di dati univoche per ciascuna operazione di crittografia.  
 AWS Encryption SDK Crittografa i dati utilizzando un algoritmo a chiave simmetrica sicuro, autenticato. Per ulteriori informazioni, consulta [Suite di algoritmi supportate in AWS Encryption SDK](supported-algorithms.md).

**Un framework per proteggere le chiavi di dati con chiavi avvolgenti**  
 AWS Encryption SDK Protegge le chiavi dati che crittografano i dati crittografandole con una o più chiavi di avvolgimento. Fornendo un framework per crittografare le chiavi di dati con più di una chiave di wrapping, AWS Encryption SDK contribuisce a rendere portatili i dati crittografati.   
Ad esempio, crittografa i dati con un input AWS KMS e una AWS KMS key chiave dal tuo HSM locale. Puoi utilizzare una delle chiavi di wrapping per decrittografare i dati, nel caso in cui una non sia disponibile o il chiamante non sia autorizzato a utilizzare entrambe le chiavi.

**Un messaggio formattato che memorizza le chiavi di dati crittografati con i dati crittografati**  
 AWS Encryption SDK archivia i dati crittografati e la chiave di dati crittografati insieme in un [messaggio crittografato](concepts.md#message) che utilizza un formato di dati definito. Ciò significa che non è necessario tenere traccia o proteggere le chiavi dati che crittografano i dati, perché sono loro a farlo per voi. AWS Encryption SDK 

Alcune implementazioni linguistiche AWS Encryption SDK richiedono un AWS SDK, ma AWS Encryption SDK non lo richiedono Account AWS e non dipendono da alcun servizio. AWS Ne hai bisogno Account AWS solo se scegli di utilizzarlo per [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys)proteggere i tuoi dati.

## Sviluppato in repository open source
<a name="esdk-repos"></a>

 AWS Encryption SDK È sviluppato in repository open source su. GitHub È possibile utilizzare questi repository per visualizzare il codice, leggere e segnalare problemi e trovare informazioni specifiche sull'implementazione del linguaggio.
+ SDK di crittografia AWS per C — [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)
+ AWS Encryption SDK per.NET — [directory.NET](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/) del `aws-encryption-sdk` repository.
+ AWS CLI di crittografia — [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)
+ SDK di crittografia AWS per Java — [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)
+ SDK di crittografia AWS per JavaScript — [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)
+ SDK di crittografia AWS per Python — [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)
+ AWS Encryption SDK per Rust — cartella [Rust](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/) del `aws-encryption-sdk` repository.
+ AWS Encryption SDK for Go: directory [Go](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/) del `aws-encryption-sdk` repository

## Compatibilità con librerie e servizi di crittografia
<a name="intro-compatibility"></a>

 AWS Encryption SDK È supportato in diversi [linguaggi di programmazione](programming-languages.md). Tutte le implementazioni linguistiche sono interoperabili. È possibile crittografare con un'implementazione di una lingua e decrittografare con un'altra. L'interoperabilità potrebbe essere soggetta a vincoli linguistici. In tal caso, questi vincoli sono descritti nell'argomento relativo all'implementazione della lingua. Inoltre, durante la crittografia e la decrittografia, è necessario utilizzare keyring compatibili o chiavi master e provider di chiavi master. Per informazioni dettagliate, vedi [Compatibilità dei keyring](choose-keyring.md#keyring-compatibility).

Tuttavia, AWS Encryption SDK non possono interagire con altre librerie. Poiché ogni libreria restituisce dati crittografati in un formato diverso, non è possibile crittografare con una libreria e decrittare con un'altra.

**Client di crittografia DynamoDB e crittografia lato client Amazon S3**  <a name="ESDK-DDBEC"></a>
 AWS Encryption SDK [Non possono decrittografare i dati crittografati dal DynamoDB Encryption [Client o dalla crittografia lato client Amazon](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/) S3.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html) [Queste librerie non possono decrittografare il messaggio crittografato restituito.](concepts.md#message) AWS Encryption SDK  

**AWS Key Management Service (AWS KMS)**  <a name="ESDK-KMS"></a>
 AWS Encryption SDK Possono utilizzare [chiavi dati per proteggere [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)i dati](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys), incluse le chiavi KMS multiregionali. Ad esempio, puoi AWS Encryption SDK configurare la crittografia dei dati in uno o più AWS KMS keys sistemi. Account AWS Tuttavia, è necessario utilizzare il AWS Encryption SDK per decrittografare tali dati.   
 AWS Encryption SDK [Non possono decrittografare il testo cifrato restituito da Encrypt o dalle operazioni. AWS KMS[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) [Analogamente, l'operazione AWS KMS[Decrypt non può decrittografare](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) il messaggio crittografato restituito.](concepts.md#message) AWS Encryption SDK   
 AWS Encryption SDK Supporta solo chiavi KMS con crittografia [simmetrica](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#symmetric-cmks). Non è possibile utilizzare una [chiave KMS asimmetrica](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#asymmetric-cmks) per la crittografia o l'accesso a. AWS Encryption SDK AWS Encryption SDK Genera le proprie chiavi di firma ECDSA per le [suite di algoritmi](supported-algorithms.md) che firmano i messaggi.

## Support e manutenzione
<a name="support"></a>

 AWS Encryption SDK Utilizza la stessa [politica di manutenzione](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) utilizzata dall' AWS SDK e dagli strumenti, comprese le fasi di controllo delle versioni e del ciclo di vita. Come [procedura ottimale](best-practices.md), si consiglia di utilizzare l'ultima versione disponibile di AWS Encryption SDK per il linguaggio di programmazione in uso e di eseguire l'aggiornamento non appena vengono rilasciate nuove versioni. Quando una versione richiede modifiche significative, ad esempio l'aggiornamento da AWS Encryption SDK versioni precedenti alla 1.7. *x* alle versioni 2.0. *x* e versioni successive, forniamo [istruzioni dettagliate](migration.md) per aiutarti.

Ogni implementazione del linguaggio di programmazione AWS Encryption SDK è sviluppata in un GitHub repository open source separato. È probabile che il ciclo di vita e la fase di supporto di ciascuna versione varino tra i repository. Ad esempio, una determinata versione di AWS Encryption SDK potrebbe trovarsi nella fase di disponibilità generale (supporto completo) in un linguaggio di programmazione, ma la end-of-support fase in un linguaggio di programmazione diverso. Ti consigliamo di utilizzare una versione completamente supportata ogni volta che è possibile ed evitare versioni che non sono più supportate.

Per trovare la fase del ciclo di vita delle AWS Encryption SDK versioni per il tuo linguaggio di programmazione, consulta il `SUPPORT_POLICY.rst` file in ogni AWS Encryption SDK repository.
+ SDK di crittografia AWS per C — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-c/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK [per.NET — Support\$1Policy.rst](https://github.com/aws/aws-encryption-sdk-dafny/blob/mainline/SUPPORT_POLICY.rst)
+ AWS [CLI di crittografia — Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-cli/blob/master/SUPPORT_POLICY.rst)
+ SDK di crittografia AWS per Java — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-java/blob/master/SUPPORT_POLICY.rst)
+ SDK di crittografia AWS per JavaScript — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/SUPPORT_POLICY.rst)
+ SDK di crittografia AWS per Python — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-python/blob/master/SUPPORT_POLICY.rst)

Per ulteriori informazioni, consulta la [politica di manutenzione di [Versioni di AWS Encryption SDK](about-versions.md) and AWS SDKs and Tools](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) nella and Tools Reference Guide AWS SDKs .

## Ulteriori informazioni
<a name="intro-see-also"></a>

Per ulteriori informazioni sulla AWS Encryption SDK crittografia lato client, provate queste fonti.
+ Per un aiuto su termini e nozioni utilizzati in questo SDK, consulta [Concetti nel AWS Encryption SDK](concepts.md).
+ Per le linee guida sulle migliori pratiche, consulta. [Le migliori pratiche per AWS Encryption SDK](best-practices.md)
+ Per ulteriori informazioni sul funzionamento di questo SDK, consulta [Come funziona l'SDK](how-it-works.md).
+ Per esempi che mostrano come configurare le opzioni in AWS Encryption SDK, vedere[Configurazione del AWS Encryption SDK](configure.md).
+ Per informazioni tecniche dettagliate consulta [AWS Encryption SDK riferimento](reference.md).
+ Per le specifiche tecniche di AWS Encryption SDK, vedere le [AWS Encryption SDK Specifiche](https://github.com/awslabs/aws-encryption-sdk-specification/) in GitHub.
+ Per le risposte alle tue domande sull'utilizzo di AWS Encryption SDK, leggi e pubblica sul [forum di discussione di AWS Crypto Tools](https://forums.aws.amazon.com/forum.jspa?forumID=302).

Per informazioni sulle implementazioni di AWS Encryption SDK in diversi linguaggi di programmazione.
+ **C**: Vedi [SDK di crittografia AWS per C](c-language.md) la [documentazione AWS Encryption SDK C](https://aws.github.io/aws-encryption-sdk-c/html/) e il [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)repository su. GitHub
+ **C\$1/.NET**: vedi [AWS Encryption SDK per.NET](dot-net.md) e attiva la [aws-encryption-sdk-net](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/)directory del repository. `aws-encryption-sdk` GitHub
+ **Interfaccia a riga di comando**: vedi[AWS Encryption SDK interfaccia a riga di comando](crypto-cli.md), [leggi i documenti](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/) per la CLI di AWS crittografia e [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)il repository su. GitHub
+ **Java**: vedi[SDK di crittografia AWS per Java](java.md), AWS Encryption SDK [Javadoc](https://aws.github.io/aws-encryption-sdk-java/) e il repository attivo. [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/) GitHub

  **JavaScript**: Vedi [SDK di crittografia AWS per JavaScript](javascript.md) e accendi il repository. [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) GitHub 
+ **Python**: vedi[SDK di crittografia AWS per Python](python.md), la [documentazione di AWS Encryption SDK Python](https://aws-encryption-sdk-python.readthedocs.io/en/latest/) e il repository su. [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/) GitHub

## Invio di feedback
<a name="report-issues"></a>

Apprezziamo il tuo feedback. Se hai una domanda, un commento o un problema da segnalare, utilizza le seguenti risorse.
+ [Se scoprite una potenziale vulnerabilità di sicurezza in AWS Encryption SDK, avvisate la sicurezza. AWS](https://aws.amazon.com/security/vulnerability-reporting/) Non creare un GitHub problema pubblico.
+ Per fornire un feedback su AWS Encryption SDK, segnala un problema nell' GitHub archivio del linguaggio di programmazione che stai utilizzando. 
+ Per fornire feedback su questa documentazione, utilizzate i collegamenti **Feedback** disponibili in questa pagina. Puoi anche segnalare un problema o contribuire [aws-encryption-sdk-docs](https://github.com/awsdocs/aws-encryption-sdk-docs)all'archivio open source di questa documentazione. GitHub

# Concetti nel AWS Encryption SDK
<a name="concepts"></a>

Questa sezione introduce i concetti utilizzati in AWS Encryption SDK, e fornisce un glossario e riferimenti. È stato progettato per aiutarti a capire come AWS Encryption SDK funziona e i termini che utilizziamo per descriverlo.

Serve aiuto? 
+ Scopri come AWS Encryption SDK utilizza la [crittografia a busta](#envelope-encryption) per proteggere i tuoi dati.
+ Scopri gli elementi della crittografia in busta: [le chiavi dati](#DEK) che proteggono i tuoi dati e le chiavi di [avvolgimento che proteggono le tue chiavi](#master-key) dati. 
+ Scopri i [portachiavi e i fornitori di chiavi](#keyring) [principali](#master-key-provider) che determinano le chiavi di avvolgimento da utilizzare.
+ Scopri il [contesto di crittografia](#encryption-context) che aggiunge integrità al tuo processo di crittografia. È facoltativo, ma è una best practice che consigliamo.
+ Scopri il [messaggio crittografato](#message) restituito dai metodi di crittografia. 
+ Quindi sei pronto per utilizzarlo AWS Encryption SDK nel tuo [linguaggio di programmazione](programming-languages.md) preferito.

**Topics**
+ [Crittografia envelope](#envelope-encryption)
+ [Chiave di dati](#DEK)
+ [Chiave di avvolgimento](#master-key)
+ [Portachiavi e fornitori di chiavi principali](#keyring)
+ [Contesto di crittografia](#encryption-context)
+ [Messaggio crittografato](#message)
+ [Suite di algoritmi](#crypto-algorithm)
+ [Responsabile di materiali crittografici](#crypt-materials-manager)
+ [Crittografia simmetrica e asimmetrica](#symmetric-key-encryption)
+ [Impegno chiave](#key-commitment)
+ [Politica di impegno](#commitment-policy)
+ [Firme digitali](#digital-sigs)

## Crittografia envelope
<a name="envelope-encryption"></a>

La sicurezza dei dati crittografati dipende in parte dalla protezione della chiave di dati che può decrittarli. Una best practice accettata per la protezione della chiave di dati è crittografarla. A tale scopo, è necessaria un'altra chiave di crittografia, nota come chiave di *crittografia a chiave o chiave* di [wrapping](#master-key). *La pratica di utilizzare una chiave di wrapping per crittografare le chiavi di dati è nota come crittografia a busta.*

**Protezione delle chiavi dei dati**  
 AWS Encryption SDK Crittografa ogni messaggio con una chiave dati unica. Quindi crittografa la chiave dati sotto la chiave di avvolgimento specificata. Memorizza la chiave dati crittografata con i dati crittografati nel messaggio crittografato che restituisce.  
Per specificare la chiave di avvolgimento, si utilizza un [portachiavi o un fornitore](#keyring) di chiavi [principali](#master-key-provider).  

![\[Crittografia delle buste con AWS Encryption SDK\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/envelope-encryption-70.png)


**Crittografia degli stessi dati con più chiavi di avvolgimento**  
È possibile crittografare la chiave dati con più chiavi di wrapping. Potresti voler fornire chiavi di avvolgimento diverse per utenti diversi, oppure chiavi di avvolgimento di tipi diversi o in posizioni diverse. Ciascuna delle chiavi di wrapping crittografa la stessa chiave di dati. AWS Encryption SDK Memorizza tutte le chiavi dati crittografate con i dati crittografati nel messaggio crittografato.   
Per decrittografare i dati, è necessario fornire una chiave di wrapping in grado di decrittografare una delle chiavi dati crittografate.  

![\[Ogni chiave di wrapping crittografa la stessa chiave dati, ottenendo una chiave dati crittografata per ogni chiave di wrapping\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/multiple-wrapping-keys-70.png)


**Abbinare i punti di forza di più algoritmi**  
Per crittografare i dati, per impostazione predefinita, AWS Encryption SDK utilizza una sofisticata [suite di algoritmi](supported-algorithms.md) con crittografia simmetrica AES-GCM, una funzione di derivazione delle chiavi (HKDF) e firma. Per crittografare la chiave dati, puoi specificare un algoritmo di crittografia [simmetrico o asimmetrico appropriato alla tua chiave di wrapping](#symmetric-key-encryption).   
In generale, gli algoritmi di crittografia di chiavi simmetriche sono più rapidi e producono testi cifrati di dimensioni minori rispetto alla *crittografia della chiave pubblica* o asimmetrica. Tuttavia, gli algoritmi di chiave pubblica forniscono una separazione intrinseca dei ruoli e facilitano la gestione delle chiavi. Per combinare i punti di forza di ciascuno, puoi crittografare i dati con la crittografia a chiave simmetrica e quindi crittografare la chiave dati con la crittografia a chiave pubblica.

## Chiave di dati
<a name="DEK"></a>

Una *chiave di dati* è una chiave di crittografia che l' AWS Encryption SDK utilizza per crittografare i dati. Ogni chiave di dati corrisponde a un array di byte conforme ai requisiti per le chiavi di crittografia. A meno che non utilizzi la [memorizzazione nella cache delle chiavi dati](data-key-caching.md), AWS Encryption SDK utilizza una chiave dati unica per crittografare ogni messaggio.

Non è necessario specificare, generare, implementare, estendere, proteggere o utilizzare chiavi dati. L' AWS Encryption SDK si occupa di tutte queste attività quando chiami le operazioni di crittografia e decrittazione. 

Per proteggere le chiavi dati, le AWS Encryption SDK crittografa utilizzando una o più chiavi di *crittografia a chiave note come chiavi* di [wrapping o chiavi master](#master-key). Dopo aver AWS Encryption SDK utilizzato le chiavi dati in testo non crittografato per crittografare i dati, le rimuove dalla memoria il prima possibile. Quindi, archivia le chiavi di dati con i dati crittografati nel [messaggio crittografato](#message) restituito dalle operazioni di crittografia. Per informazioni dettagliate, vedi [Come AWS Encryption SDK funziona](how-it-works.md).

**Suggerimento**  
Nel AWS Encryption SDK, distinguiamo le *chiavi dati dalle chiavi* di crittografia *dei dati*. Molteplici [suite di algoritmi](#crypto-algorithm) supportate, tra cui la suite predefinita, utilizzano una [funzione di derivazione della chiave](https://en.wikipedia.org/wiki/Key_derivation_function) che impedisce alla chiave dei dati di toccare i limiti crittografici. La funzione di derivazione della chiave richiede la chiave di dati come input e restituisce una chiave di crittografia dei dati effettivamente utilizzata per crittografare i dati. Per questo motivo, abbiamo spesso detto che i dati sono crittografati "in" una chiave dei dati anziché "da" una chiave di dati.

Ogni chiave di dati crittografata include metadati, incluso l'identificatore della chiave di wrapping che l'ha crittografata. Questi metadati facilitano l'identificazione di chiavi di wrapping valide AWS Encryption SDK durante la decrittografia.

## Chiave di avvolgimento
<a name="master-key"></a>

Una chiave di *wrapping è una chiave* di crittografia a chiave che viene AWS Encryption SDK utilizzata per crittografare la [chiave dati che crittografa i dati](#DEK). Ogni chiave di dati in testo semplice può essere crittografata con una o più chiavi di wrapping. [Sei tu a determinare quali chiavi di wrapping vengono utilizzate per proteggere i tuoi dati quando configuri un portachiavi o un fornitore di [chiavi master](#keyring).](#master-key-provider)

**Nota**  
La *chiave di avvolgimento* si riferisce alle chiavi di un portachiavi o di un fornitore di chiavi principali. La *chiave master* è in genere associata alla `MasterKey` classe di cui si crea un'istanza quando si utilizza un provider di chiavi master.

 AWS Encryption SDK Supporta diverse chiavi di wrapping di uso comune, come AWS Key Management Service (AWS KMS) simmetriche (incluse le chiavi [KMS multiregione), chiavi](configure.md#config-mrks) AES-GCM [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)(Advanced Encryption Standard/Galois Counter Mode) non elaborate e chiavi RSA non elaborate. È inoltre possibile estendere o implementare le proprie chiavi di wrapping. 

Quando si utilizza la crittografia a busta, è necessario proteggere le chiavi di wrapping da accessi non autorizzati. È possibile eseguire questa operazione in uno dei seguenti modi:
+ Utilizza un servizio Web progettato per questo scopo, ad esempio [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/).
+ Utilizza un [modulo di sicurezza hardware (HSM)](https://en.wikipedia.org/wiki/Hardware_security_module) come quelli offerti da [AWS CloudHSM](https://aws.amazon.com/cloudhsm/).
+ Utilizza altri strumenti e servizi di gestione delle chiavi.

Se non disponi di un sistema di gestione delle chiavi, ti consigliamo AWS KMS. AWS Encryption SDK Si integra con AWS KMS per aiutarti a proteggere e utilizzare le tue chiavi di imballaggio. Tuttavia, AWS Encryption SDK non richiede alcun AWS AWS servizio.

## Portachiavi e fornitori di chiavi principali
<a name="keyring"></a>

Per specificare le chiavi di wrapping utilizzate per la crittografia e la decrittografia, si utilizza un portachiavi o un fornitore di chiavi master. È possibile utilizzare i portachiavi e i provider di chiavi principali che AWS Encryption SDK fornisce o progettare implementazioni personalizzate. AWS Encryption SDK Fornisce portachiavi e fornitori di chiavi principali compatibili tra loro soggetti a vincoli linguistici. Per informazioni dettagliate, vedi [Compatibilità dei keyring](choose-keyring.md#keyring-compatibility). 

Un *keyring* genera, crittografa e decritta le chiavi di dati. Quando definisci un portachiavi, puoi specificare le chiavi di [avvolgimento che crittografano le tue chiavi](#master-key) di dati. La maggior parte dei portachiavi specifica almeno una chiave di avvolgimento o un servizio che fornisce e protegge le chiavi di avvolgimento. È inoltre possibile definire un portachiavi senza chiavi avvolgenti o un portachiavi più complesso con opzioni di configurazione aggiuntive. Per informazioni sulla scelta e sull'utilizzo dei portachiavi che definisce, consulta AWS Encryption SDK . [Portachiavi](choose-keyring.md) 

I portachiavi sono supportati nei seguenti linguaggi di programmazione:
+ SDK di crittografia AWS per C
+ SDK di crittografia AWS per JavaScript
+ AWS Encryption SDK per.NET
+ versione 3. *x* del SDK di crittografia AWS per Java
+ Versione 4. *x* di SDK di crittografia AWS per Python, se utilizzato con la dipendenza opzionale [Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL).
+ Versione 1. *x* del AWS Encryption SDK per Rust
+ Versione 0.1. *x* o versione successiva di AWS Encryption SDK for Go

Un *fornitore di chiavi principali* è un'alternativa al portachiavi. Il provider di chiavi master restituisce le chiavi di wrapping (o chiavi master) specificate. Ogni chiave master è associata a un provider di chiavi master, ma un provider di chiavi master in genere fornisce più chiavi master. I provider di chiavi principali sono supportati in Java, Python e nella AWS CLI di crittografia. 

È necessario specificare un portachiavi (o un provider di chiavi principali) per la crittografia. È possibile specificare lo stesso portachiavi (o fornitore di chiavi principali) o uno diverso per la decrittografia. Durante la crittografia, AWS Encryption SDK utilizza tutte le chiavi di wrapping specificate per crittografare la chiave dati. Durante la decrittografia, AWS Encryption SDK utilizza solo le chiavi di wrapping specificate per decrittografare una chiave dati crittografata. [Specificare le chiavi di wrapping per la decrittografia è facoltativo, ma è una procedura consigliata. AWS Encryption SDK](best-practices.md) 

Per informazioni dettagliate sulla specificazione delle chiavi di wrapping, consulta. [Selezione dei tasti di avvolgimento](configure.md#config-keys) 

## Contesto di crittografia
<a name="encryption-context"></a>

Per migliorare la sicurezza delle operazioni di crittografia, includi un contesto di crittografia in tutte le richieste di crittografia dei dati. L'utilizzo di un contesto di crittografia è facoltativo, ma viene consigliato come best practice.

Un *contesto di crittografia* è un set di coppie nome-valore che contiene dati autenticati aggiuntivi arbitrari e non segreti. Il contesto di crittografia può contenere qualsiasi tipo di dati scelto, ma in genere consiste in dati utili in registrazioni e monitoraggi, ad esempio i dati relativi al tipo di file, allo scopo o al proprietario. Durante la crittografia dei dati, il contesto di crittografia viene vincolato a livello crittografico ai dati crittografati, per cui dovrai utilizzare lo stesso contesto per decrittarli. L' AWS Encryption SDK include il contesto di crittografia in testo normale nell'intestazione del [messaggio crittografato](#message) restituito.

Il contesto di crittografia AWS Encryption SDK utilizzato è costituito dal contesto di crittografia specificato e da una coppia di chiavi pubblica aggiunta dal [gestore dei materiali crittografici](#crypt-materials-manager) (CMM). Nello specifico, ogni volta che utilizzi un [algoritmo di crittografia con firma](algorithms-reference.md), il CMM aggiunge una coppia nome-valore al contesto di crittografia, costituita da un nome riservato, `aws-crypto-public-key` e un valore che rappresenta la chiave di verifica pubblica. Il `aws-crypto-public-key` nome nel contesto di crittografia è riservato da AWS Encryption SDK e non può essere utilizzato come nome in nessun'altra coppia nel contesto di crittografia. Per informazioni dettagliate, consulta [AAD](message-format.md#header-aad) in *Riferimenti a formati di messaggi*.

Il contesto di crittografia nell'esempio seguente include due coppie del contesto specificato nella richiesta e una coppia di chiavi pubblica aggiunta dal CMM.

```
"Purpose"="Test", "Department"="IT", aws-crypto-public-key=<public key>
```

Per decrittografare i dati, è necessario passare il messaggio crittografato. Poiché è AWS Encryption SDK possibile estrarre il contesto di crittografia dall'intestazione del messaggio crittografato, non è necessario fornire il contesto di crittografia separatamente. Tuttavia, grazie al contesto di crittografia puoi verificare di stare decrittando il messaggio corretto. 
+ Nell'[interfaccia a riga di comando (CLI) dell'AWS Encryption SDK](crypto-cli.md), se fornisci un contesto di crittografia in un comando di decrittazione, la CLI verifica che i valori siano presenti nel contesto del messaggio crittografato prima di restituire i dati di testo normale. 
+ In altre implementazioni del linguaggio di programmazione, la risposta di decrittografia include il contesto di crittografia e i dati in chiaro. La funzione di decrittazione nell'applicazione deve sempre verificare che il contesto di crittografia nella risposta di decrittazione includa il contesto della relativa richiesta (o in un sottoinsieme) prima di restituire i dati di testo normale.

**Nota**  
Le versioni seguenti supportano il [contesto di crittografia richiesto CMM](configure.md#config-required-encryption-context-cmm), che è possibile utilizzare per richiedere un contesto di crittografia in tutte le richieste di crittografia.  
Versione 3. *x* del SDK di crittografia AWS per Java
Versione 4. *x* e versioni successive di AWS Encryption SDK for .NET
Versione 4. *x* di SDK di crittografia AWS per Python, se utilizzato con la dipendenza opzionale [Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL).
Versione 1. *x* del AWS Encryption SDK per Rust
Versione 0.1. *x* o versione successiva di AWS Encryption SDK for Go

Quando scegli un contesto di crittografia, ricordati che non è segreto. Il contesto di crittografia viene visualizzato in testo semplice nell'intestazione del [messaggio crittografato](#message) che restituisce. AWS Encryption SDK Se si utilizza AWS Key Management Service, il contesto di crittografia potrebbe anche apparire in testo non crittografato nei record e nei registri di controllo, ad esempio. AWS CloudTrail

[Per esempi di invio e verifica di un contesto di crittografia nel codice, consulta gli esempi relativi al linguaggio di programmazione preferito.](programming-languages.md)

## Messaggio crittografato
<a name="message"></a>

Quando si crittografano i dati con AWS Encryption SDK, viene restituito un messaggio crittografato.

[Un *messaggio crittografato* è una [struttura di dati formattata](message-format.md) portatile che include i dati crittografati insieme a copie crittografate delle chiavi dati, all'ID dell'algoritmo e, facoltativamente, un [contesto di crittografia](#encryption-context) e una firma digitale.](#digital-sigs) Le operazioni di crittografia in AWS Encryption SDK restituiscono un messaggio crittografato, mentre le operazioni di decrittazione richiedono un messaggio crittografato come input. 

Abbinando i dati crittografati e le relative chiavi di dati crittografati è possibile semplificare l'operazione di decrittografia e ti consente di evitare di archiviare e gestire chiavi di dati crittografate in modo indipendente rispetto ai dati che crittografano.

Per informazioni tecniche sui messaggi crittografati, vedi [Formato dei messaggi crittografati](message-format.md).

## Suite di algoritmi
<a name="crypto-algorithm"></a>

 AWS Encryption SDK Utilizza una suite di algoritmi per crittografare e firmare i dati contenuti nel [messaggio crittografato](#message) restituito dalle operazioni di crittografia e decrittografia. AWS Encryption SDK supporta diverse [suite di algoritmi](supported-algorithms.md). Tutte le suite supportate utilizzano Advanced Encryption Standard (AES) come algoritmo primario e lo combinano con altri algoritmi e valori. 

 AWS Encryption SDK Stabilisce una suite di algoritmi consigliata come predefinita per tutte le operazioni di crittografia. L'impostazione predefinita potrebbe cambiare con il migliorare di standard e best practice. È possibile specificare una suite di algoritmi alternativa nelle richieste di crittografia dei dati o durante la creazione di un [gestore di materiali crittografici (CMM)](#crypt-materials-manager), ma a meno che non sia richiesta un'alternativa per la propria situazione, è preferibile utilizzare quella predefinita. L'impostazione predefinita attuale è AES-GCM con una [funzione di derivazione delle extract-and-expand chiavi](https://en.wikipedia.org/wiki/HKDF) ([HKDF) basata su HMAC](https://en.wikipedia.org/wiki/HKDF), [key commitment](#key-commitment), una firma [Elliptic Curve Digital Signature Algorithm (ECDSA)](#digital-sigs) e una chiave di crittografia a 256 bit. 

Se la tua applicazione richiede prestazioni elevate e gli utenti che crittografano i dati e quelli che decifrano i dati sono altrettanto affidabili, potresti prendere in considerazione la possibilità di specificare una suite di algoritmi senza firma digitale. Tuttavia, consigliamo vivamente una suite di algoritmi che includa l'impegno delle chiavi e una funzione di derivazione delle chiavi. Le suite di algoritmi senza queste funzionalità sono supportate solo per la compatibilità con le versioni precedenti.

## Responsabile di materiali crittografici
<a name="crypt-materials-manager"></a>

Il gestore dei materiali crittografici (CMM) assembla i materiali crittografici utilizzati per crittografare e decrittografare i dati. I *materiali di crittografia* includono chiavi di dati crittografati e testo non crittografato e una chiave facoltativa di firma dei messaggi. Non interagisci mai direttamente con la CMM. I metodi di crittografia e decrittazione lo gestiscono per te.

È possibile utilizzare la CMM predefinita o la CMM di [memorizzazione nella cache AWS Encryption SDK fornita oppure scrivere una CMM](data-key-caching.md) personalizzata. E puoi specificare una CMM, ma non è obbligatoria. Quando specificate un portachiavi o un fornitore di chiavi principali, AWS Encryption SDK crea automaticamente una CMM predefinita. La CMM predefinita ottiene i materiali di crittografia o decrittografia dal portachiavi o dal provider di chiavi master specificato. Ciò potrebbe comportare una chiamata a un servizio crittografico, come [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

Poiché la CMM funge da collegamento tra il AWS Encryption SDK e un portachiavi (o fornitore di chiavi principali), è il punto ideale per la personalizzazione e l'estensione, ad esempio il supporto per l'applicazione delle policy e la memorizzazione nella cache. AWS Encryption SDK [Fornisce una CMM di memorizzazione nella cache per supportare la memorizzazione nella cache delle chiavi di dati.](data-key-caching.md) 

## Crittografia simmetrica e asimmetrica
<a name="symmetric-key-encryption"></a>

La *crittografia simmetrica utilizza la* stessa chiave per crittografare e decrittografare i dati. 

La *crittografia asimmetrica* utilizza una coppia di chiavi di dati matematicamente correlate. Una chiave della coppia crittografa i dati; solo l'altra chiave della coppia può decrittografare i dati.

 AWS Encryption SDK [Utilizza la crittografia a busta.](#envelope-encryption) Crittografa i dati con una chiave dati simmetrica. Crittografa la chiave dati simmetrica con una o più chiavi di avvolgimento simmetriche o asimmetriche. Restituisce un [messaggio crittografato](#message) che include i dati crittografati e almeno una copia crittografata della chiave dati. 

**Crittografia dei dati (crittografia simmetrica)**  
Per crittografare i dati, AWS Encryption SDK utilizza una [chiave dati](#DEK) simmetrica e una [suite di algoritmi che include un algoritmo](#crypto-algorithm) di crittografia simmetrica. Per decrittografare i dati, AWS Encryption SDK utilizza la stessa chiave dati e la stessa suite di algoritmi.

**Crittografia della chiave dati (crittografia simmetrica o asimmetrica)**  
Il [portachiavi](#keyring) o il [fornitore di chiavi master](#master-key-provider) fornito per un'operazione di crittografia e decrittografia determina il modo in cui la chiave dati simmetrica viene crittografata e decrittografata. Puoi scegliere un portachiavi o un provider di chiavi master che utilizza la crittografia simmetrica, ad esempio un portachiavi, o uno che utilizza la crittografia asimmetrica, come un AWS KMS portachiavi RSA non elaborato o. `JceMasterKey`

## Impegno chiave
<a name="key-commitment"></a>

 AWS Encryption SDK Supporta *key commitment* (a volte nota come *robustezza*), una proprietà di sicurezza che garantisce che ogni testo cifrato possa essere decrittografato solo in un singolo testo non crittografato. A tale scopo, key commitment garantisce che solo la chiave dati che ha crittografato il messaggio verrà utilizzata per decrittografarlo. [La crittografia e la decrittografia con impegno chiave è una best practice.AWS Encryption SDK](best-practices.md)

La maggior parte dei cifrari simmetrici moderni (incluso AES) crittografa un testo in chiaro con un'unica chiave segreta, ad esempio la chiave [dati univoca](#DEK) utilizzata per crittografare ogni messaggio di testo in chiaro. AWS Encryption SDK La decrittografia di questi dati con la stessa chiave di dati restituisce un testo in chiaro identico all'originale. La decrittografia con una chiave diversa di solito fallisce. Tuttavia, è possibile decrittografare un testo cifrato con due chiavi diverse. In rari casi, è possibile trovare una chiave in grado di decrittografare alcuni byte di testo cifrato in un testo semplice diverso, ma comunque comprensibile. 

 AWS Encryption SDK Crittografa sempre ogni messaggio di testo in chiaro con un'unica chiave di dati. Potrebbe crittografare quella chiave dati con più chiavi di wrapping (o chiavi master), ma le chiavi di wrapping crittografano sempre la stessa chiave dati. Tuttavia, un [messaggio crittografato sofisticato creato manualmente potrebbe effettivamente contenere diverse chiavi di dati, ognuna crittografata](#message) da una chiave di wrapping diversa. Ad esempio, se un utente decrittografa il messaggio crittografato, restituisce 0x0 (falso) mentre un altro utente che decrittografa lo stesso messaggio crittografato ottiene 0x1 (vero).

Per evitare questo scenario, supporta l'impegno chiave durante la crittografia e la decrittografia AWS Encryption SDK . Quando AWS Encryption SDK crittografa un messaggio con impegno chiave, associa crittograficamente la chiave di dati univoca che ha prodotto il testo cifrato alla stringa di impegno chiave, un identificatore di *chiave* di dati non segreto. Quindi memorizza la stringa di impegno chiave nei metadati del messaggio crittografato. Quando decripta un messaggio con impegno chiave, AWS Encryption SDK verifica che la chiave dati sia l'unica chiave per quel messaggio crittografato. Se la verifica della chiave dati non riesce, l'operazione di decrittografia ha esito negativo. 

Il supporto per key commitment è stato introdotto nella versione 1.7. *x*, che può decrittografare i messaggi con un impegno chiave, ma non lo farà con un impegno chiave. È possibile utilizzare questa versione per implementare completamente la capacità di decrittografare il testo cifrato con impegno chiave. Versione 2.0. *x* include il supporto completo per Key Commitment. Per impostazione predefinita, crittografa e decrittografa solo con l'impegno della chiave. Questa è una configurazione ideale per le applicazioni che non necessitano di decrittografare il testo cifrato crittografato dalle versioni precedenti di. AWS Encryption SDK

Sebbene la crittografia e la decrittografia con impegno chiave siano una best practice, lasciamo che sia tu a decidere quando utilizzarla e a regolare il ritmo con cui adottarla. A partire dalla versione 1.7. *x*, AWS Encryption SDK supporta una [politica di impegno](#commitment-policy) che imposta la [suite di algoritmi predefinita](supported-algorithms.md) e limita le suite di algoritmi che possono essere utilizzate. Questa politica determina se i dati vengono crittografati e decrittografati con un impegno chiave. 

Key Commitment si traduce in un [messaggio crittografato leggermente più grande (\$1 30 byte)](message-format.md) e richiede più tempo per l'elaborazione. Se l'applicazione è molto sensibile alle dimensioni o alle prestazioni, è possibile scegliere di disattivare l'impegno chiave. Ma fatelo solo se necessario. 

Per ulteriori informazioni sulla migrazione alle versioni 1.7. *x* e 2.0. *x*, incluse le loro principali funzionalità di impegno, vedi[Migrazione del tuo AWS Encryption SDK](migration.md). Per informazioni tecniche su Key Commitment, vedere [AWS Encryption SDK riferimento agli algoritmi](algorithms-reference.md) e[AWS Encryption SDK riferimento al formato del messaggio](message-format.md).

## Politica di impegno
<a name="commitment-policy"></a>

[Una *policy di impegno* è un'impostazione di configurazione che determina se l'applicazione esegue la crittografia e la decrittografia con un impegno chiave.](#key-commitment) [La crittografia e la decrittografia con impegno chiave è una procedura consigliata.AWS Encryption SDK](best-practices.md) 

La politica di impegno ha tre valori.

**Nota**  
Potrebbe essere necessario scorrere orizzontalmente o verticalmente per visualizzare l'intera tabella.


**Impegno, politica, valori**  

| Valore | Crittografa con impegno chiave | Crittografa senza impegno chiave | Decripta con impegno chiave | Decripta senza impegno chiave | 
| --- | --- | --- | --- | --- | 
| ForbidEncryptAllowDecrypt | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-no.png)  | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png)  | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png) | 
| RequireEncryptAllowDecrypt | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-no.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png) | 
| RequireEncryptRequireDecrypt | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-no.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/it_it/encryption-sdk/latest/developer-guide/images/icon-no.png) | 

L'impostazione della politica di impegno è stata introdotta nella AWS Encryption SDK versione 1.7. *x*. È valido in tutti i [linguaggi di programmazione](programming-languages.md) supportati.
+ `ForbidEncryptAllowDecrypt`decrittografa con o senza impegno chiave, ma non crittografa con impegno chiave. Questo valore, introdotto nella versione 1.7. *x*, è progettato per preparare tutti gli host che eseguono l'applicazione alla decrittografia con impegno chiave prima che incontrino un testo cifrato crittografato con impegno chiave. 
+ `RequireEncryptAllowDecrypt`crittografa sempre con un impegno chiave. Può decriptare con o senza impegno chiave. Questo valore, introdotto nella versione 2.0. *x*, consente di iniziare a crittografare con l'impegno delle chiavi, ma di decrittografare comunque i testi cifrati precedenti senza l'impegno di chiave.
+ `RequireEncryptRequireDecrypt`crittografa e decrittografa solo con un impegno chiave. Questo valore è l'impostazione predefinita per la versione 2.0. *x*. Usa questo valore quando sei certo che tutti i tuoi testi cifrati siano crittografati con l'impegno della chiave.

L'impostazione della politica di impegno determina quali suite di algoritmi è possibile utilizzare. A partire dalla versione 1.7. *x*, AWS Encryption SDK supporta [suite di algoritmi](supported-algorithms.md) per l'impegno chiave, con e senza firma. Se specificate una suite di algoritmi che è in conflitto con la vostra politica di impegno, AWS Encryption SDK restituisce un errore. 

Per informazioni sull'impostazione della politica di impegno, consulta[Impostazione della politica di impegno](migrate-commitment-policy.md).

## Firme digitali
<a name="digital-sigs"></a>

 AWS Encryption SDK Crittografa i dati utilizzando un algoritmo di crittografia autenticato, AES-GCM, e il processo di decrittografia verifica l'integrità e l'autenticità di un messaggio crittografato senza utilizzare una firma digitale. Tuttavia, poiché AES-GCM utilizza chiavi simmetriche, chiunque sia in grado di decrittografare la chiave dati utilizzata per decrittografare il testo cifrato potrebbe anche creare manualmente un nuovo testo cifrato crittografato, causando potenziali problemi di sicurezza. Ad esempio, se utilizzi una AWS KMS key come chiave di avvolgimento, un utente con autorizzazioni potrebbe creare testi cifrati crittografati senza chiamare. `kms:Decrypt` `kms:Encrypt`

Per evitare questo problema, AWS Encryption SDK supporta l'aggiunta di una firma Elliptic Curve Digital Signature Algorithm (ECDSA) alla fine dei messaggi crittografati. Quando viene utilizzata una suite di algoritmi di firma, AWS Encryption SDK genera una chiave privata temporanea e una coppia di chiavi pubbliche per ogni messaggio crittografato. AWS Encryption SDK Memorizza la chiave pubblica nel contesto di crittografia della chiave dati e scarta la chiave privata. Ciò garantisce che nessuno possa creare un'altra firma verificabile con la chiave pubblica. L'algoritmo associa la chiave pubblica alla chiave dati crittografata come dati autenticati aggiuntivi nell'intestazione del messaggio, impedendo agli utenti che possono solo decrittografare i messaggi di alterare la chiave pubblica o influire sulla verifica della firma.

La verifica della firma comporta un notevole costo in termini di prestazioni in termini di decrittografia. Se gli utenti che crittografano i dati e gli utenti che decifrano i dati sono altrettanto affidabili, prendi in considerazione l'utilizzo di una suite di algoritmi che non includa la firma.

**Nota**  
Se il portachiavi o l'accesso al materiale crittografico di imballaggio non fanno distinzione tra crittografatori e decryptor, le firme digitali non forniscono alcun valore crittografico.

AWS KMS I [portachiavi, incluso il portachiavi](use-kms-keyring.md) RSA AWS KMS asimmetrico, possono distinguere tra crittografatori e decryptor in base a policy chiave e policy IAM. AWS KMS 

A causa della loro natura crittografica, i seguenti portachiavi non possono distinguere tra crittografatori e decryptor:
+ AWS KMS Portachiavi gerarchico
+ AWS KMS Portachiavi ECDH
+ Keyring non elaborato AES
+ Keyring non elaborato RSA
+ Portachiavi ECDH grezzo

# Come AWS Encryption SDK funziona
<a name="how-it-works"></a>

[I flussi di lavoro di questa sezione spiegano come crittografa i dati e decrittografa i AWS Encryption SDK messaggi crittografati.](concepts.md#message) Questi flussi di lavoro descrivono il processo di base utilizzando le funzionalità predefinite. Per i dettagli sulla definizione e l'utilizzo di componenti personalizzati, consulta l' GitHub archivio per ogni implementazione [linguistica](programming-languages.md) supportata.

 AWS Encryption SDK Utilizza la crittografia a busta per proteggere i dati. Ogni messaggio è crittografato con una chiave dati unica. Quindi la chiave dati viene crittografata dalle chiavi di wrapping specificate. Per decrittografare il messaggio crittografato, AWS Encryption SDK utilizza le chiavi di wrapping specificate per decrittografare almeno una chiave di dati crittografata. Quindi può decrittografare il testo cifrato e restituire un messaggio in testo semplice.

Hai bisogno di aiuto con la terminologia che utilizziamo in? AWS Encryption SDK Per informazioni, consulta [Concetti nel AWS Encryption SDK](concepts.md).

## In che modo AWS Encryption SDK crittografa i dati
<a name="encrypt-workflow"></a>

 AWS Encryption SDK Fornisce metodi per crittografare stringhe, array di byte e flussi di byte. Per esempi di codice, consultate l'argomento Esempi in ogni sezione. [Linguaggi di programmazione](programming-languages.md)

1. Crea un [portachiavi](choose-keyring.md) (o [fornitore di chiavi principali](concepts.md#master-key-provider)) che specifichi le chiavi di avvolgimento che proteggono i tuoi dati.

1. Passa il portachiavi e i dati in testo semplice a un metodo di crittografia. [Ti consigliamo di passare in un contesto di crittografia opzionale e non segreto.](concepts.md#encryption-context)

1. Il metodo di crittografia richiede al portachiavi i materiali di crittografia. Il portachiavi restituisce chiavi di crittografia dei dati univoche per il messaggio: una chiave dati in testo semplice e una copia di tale chiave dati crittografata da ciascuna delle chiavi di wrapping specificate.

1. Il metodo di crittografia usa la chiave di dati di testo non crittografato per crittografare i dati, quindi elimina la chiave di dati di testo non crittografato. Se si fornisce un contesto di crittografia (una [procedura AWS Encryption SDK consigliata](best-practices.md)), il metodo di crittografia associa crittograficamente il contesto di crittografia ai dati crittografati.

1. Il metodo di crittografia restituisce un [messaggio crittografato](concepts.md#message) che contiene i dati crittografati, le chiavi dei dati crittografati e altri metadati, incluso il contesto di crittografia, se ne hai utilizzato uno.

## Come AWS Encryption SDK decripta un messaggio crittografato
<a name="decrypt-workflow"></a>

 AWS Encryption SDK Fornisce metodi che decrittografano il [messaggio crittografato](concepts.md#message) e restituiscono testo in chiaro. Per esempi di codice, consultate l'argomento Esempi in ogni sezione. [Linguaggi di programmazione](programming-languages.md)

Il [portachiavi](choose-keyring.md) (o [provider di chiavi master](concepts.md#master-key-provider)) che decrittografa il messaggio crittografato deve essere compatibile con quello utilizzato per crittografare il messaggio. Una delle sue chiavi di wrapping deve essere in grado di decrittografare una chiave di dati crittografata nel messaggio crittografato. Per informazioni sulla compatibilità con i portachiavi e i fornitori di chiavi principali, vedere. [Compatibilità dei keyring](choose-keyring.md#keyring-compatibility)

1. Crea un portachiavi o un fornitore di chiavi master con chiavi avvolgenti in grado di decrittografare i tuoi dati. Puoi utilizzare lo stesso portachiavi che hai fornito per il metodo di crittografia o uno diverso.

1. [Passate il messaggio crittografato](concepts.md#message) e il portachiavi a un metodo di decrittografia.

1. Il metodo di decrittografia richiede al portachiavi o al fornitore della chiave principale di decrittografare una delle chiavi di dati crittografate nel messaggio crittografato. Trasferisce le informazioni dal messaggio crittografato, incluse le chiavi di dati crittografate.

1. Il keyring utilizza le chiavi di wrapping per decrittare una delle chiavi di dati crittografate. Se ha esito positivo, la risposta include la chiave di dati in testo semplice. Se nessuna delle chiavi di wrapping specificate dal keyring o dal provider di chiavi master è in grado di decrittografare una chiave dati crittografata, la chiamata di decrittografia ha esito negativo.

1. Il metodo di decrittografia utilizza la chiave di dati in testo semplice per decrittografare i dati, scarta la chiave di dati in testo semplice e restituisce i dati in chiaro.

# Suite di algoritmi supportate in AWS Encryption SDK
<a name="supported-algorithms"></a>

Una *suite di algoritmi* è una raccolta di algoritmi di crittografia e dei relativi valori. I sistemi crittografici utilizzano l'implementazione di algoritmi per generare il messaggio di testo cifrato.

La suite di AWS Encryption SDK algoritmi utilizza l'algoritmo Advanced Encryption Standard (AES) in Galois/Counter Mode (GCM), noto come AES-GCM, per crittografare i dati grezzi. AWS Encryption SDK Supporta chiavi di crittografia a 256 bit, 192 bit e 128 bit. La lunghezza del vettore di inizializzazione (IV) è sempre 12 byte. La lunghezza del tag di autenticazione è sempre 16 byte.

[Per impostazione predefinita, AWS Encryption SDK utilizza una suite di algoritmi con AES-GCM con una funzione di derivazione delle chiavi (HKDF) basata su HMAC, firma e una extract-and-expand chiave di crittografia a 256 bit.](https://en.wikipedia.org/wiki/HKDF) Se la [politica di impegno](concepts.md#commitment-policy) richiede un [impegno chiave](concepts.md#key-commitment), AWS Encryption SDK seleziona una suite di algoritmi che supporti anche l'impegno delle chiavi; in caso contrario, seleziona una suite di algoritmi con derivazione e firma delle chiavi, ma non con impegno chiave.

## Consigliato: AES-GCM con derivazione delle chiavi, firma e impegno chiave
<a name="recommended-algorithms"></a>

 AWS Encryption SDK Raccomanda una suite di algoritmi che derivi una chiave di crittografia AES-GCM fornendo una chiave di crittografia dei dati a 256 bit alla funzione di derivazione delle chiavi basata su HMAC (HKDF). extract-and-expand AWS Encryption SDK Aggiunge una firma Elliptic Curve Digital Signature Algorithm (ECDSA). Per supportare [l'impegno chiave](concepts.md#key-commitment), questa suite di algoritmi ricava anche una *stringa di impegno chiave*, un identificatore di chiave di dati non segreto, che viene archiviata nei metadati del messaggio crittografato. Questa stringa di impegno chiave viene inoltre derivata tramite HKDF utilizzando una procedura simile alla derivazione della chiave di crittografia dei dati.


**AWS Encryption SDK Algorithm Suite**  

| Algoritmo di crittografia | Lunghezza della chiave di crittografia dei dati (in bit) | Algoritmo di derivazione della chiave | Algoritmo di firma | Impegno chiave | 
| --- | --- | --- | --- | --- | 
| AES-GCM | 256 | HKDF con SHA-384 | ECDSA con P-384 e SHA-384 | HKDF con SHA-512 | 

L'HKDF aiuta a evitare il riutilizzo accidentale di una chiave di crittografia dei dati e riduce il rischio di un uso eccessivo di una chiave dati. 

Per la firma, questa suite di algoritmi utilizza ECDSA con un algoritmo di funzione hash crittografica (SHA-384). ECDSA viene utilizzato per impostazione predefinita, anche quando non è specificato dalla policy per la chiave master sottostante. [La firma dei messaggi](concepts.md#digital-sigs) verifica che il mittente del messaggio sia autorizzato a crittografare i messaggi e garantisce il non ripudio. È particolarmente utile quando la policy di autorizzazione per una chiave master consente a un set di utenti di crittografare i dati e a un altro set di utenti di decrittografarli. 

Le suite di algoritmi con impegno chiave assicurano che ogni testo cifrato venga decrittografato in un solo testo in chiaro. Lo fanno convalidando l'identità della chiave dati utilizzata come input per l'algoritmo di crittografia. Durante la crittografia, queste suite di algoritmi derivano una stringa di impegno chiave. Prima della decrittografia, convalidano che la chiave dei dati corrisponda alla stringa di impegno della chiave. In caso contrario, la chiamata di decrittografia ha esito negativo.

## Altre suite di algoritmi supportate
<a name="other-algorithms"></a>

 AWS Encryption SDK Supporta le seguenti suite di algoritmi alternativi per la compatibilità con le versioni precedenti. di cui, in generale, sconsigliamo l'utilizzo. Tuttavia, riconosciamo che la firma può ostacolare in modo significativo le prestazioni, quindi offriamo una suite di key commit con derivazione delle chiavi per questi casi. Per le applicazioni che devono fare compromessi più significativi in termini di prestazioni, continuiamo a offrire suite prive di firma, impegno chiave e derivazione delle chiavi.

**AES-GCM senza impegno chiave**  
Le suite di algoritmi senza impegno chiave non convalidano la chiave dati prima della decrittografia. Di conseguenza, queste suite di algoritmi potrebbero decrittografare un singolo testo cifrato in diversi messaggi di testo in chiaro. Tuttavia, poiché le suite di algoritmi con impegno chiave producono un [messaggio crittografato leggermente più grande (\$130 byte)](message-format.md) e richiedono più tempo per l'elaborazione, potrebbero non essere la scelta migliore per ogni applicazione.   
 AWS Encryption SDK Supporta una suite di algoritmi con derivazione delle chiavi, impegno delle chiavi, firma e una suite con derivazione delle chiavi e impegno delle chiavi, ma non firma. Non è consigliabile utilizzare una suite di algoritmi senza impegno chiave. Se necessario, consigliamo una suite di algoritmi con derivazione delle chiavi e impegno delle chiavi, ma non con firma. Tuttavia, se il profilo prestazionale dell'applicazione supporta l'utilizzo di una suite di algoritmi, è consigliabile utilizzare una suite di algoritmi con impegno, derivazione delle chiavi e firma.

**AES-GCM senza firma**  
Le suite di algoritmi senza firma non dispongono della firma ECDSA che garantisce autenticità e non ripudio. Utilizza queste suite solo quando gli utenti che crittografano i dati e quelli che decifrano i dati sono altrettanto affidabili.   
Quando utilizzi una suite di algoritmi senza firmare, ti consigliamo di sceglierne una con derivazione e impegno delle chiavi. 

**AES-GCM senza derivazione di chiavi**  
Le suite di algoritmi senza derivazione di chiave utilizzano la chiave di crittografia dei dati come chiave di crittografia AES-GCM, invece di utilizzare una funzione di derivazione della chiave per derivare una chiave unica. Sconsigliamo di utilizzare questa suite per generare testo cifrato, ma la supporta per motivi di compatibilità. AWS Encryption SDK 

Per ulteriori informazioni su come queste suite sono rappresentate e utilizzate nella libreria, vedi [AWS Encryption SDK riferimento agli algoritmi](algorithms-reference.md).