Dettagli di caching della chiave dei dati - 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à.

Dettagli di caching della chiave dei dati

La maggior parte delle applicazioni possono utilizzare l'impostazione predefinita del caching della chiavi dei dati senza la necessità di scrivere codice personalizzato. Questa sezione descrive l'implementazione predefinita e alcuni dettagli sulle opzioni.

In che modo funziona il caching della chiave dei dati

Quando utilizzi il caching della chiave dei dati in una richiesta di crittografia o decrittografia dei dati, AWS Encryption SDK prima cerca la cache per una chiave di dati in grado di soddisfare la richiesta. Se trova una corrispondenza valida, utilizza la chiave di dati memorizzati per crittografare i dati. In caso contrario, genera una nuova chiave di dati, come farebbe in assenza della cache.

Il caching della chiave di dati non viene utilizzato per i dati di dimensione sconosciuta, come, ad esempio i dati in streaming. Ciò consente al CMM di caching di applicare correttamente ilsoglia massima di byte. Per evitare questo comportamento, aggiungi le dimensioni del messaggio alla richiesta di crittografia.

Oltre a una cache, il caching della chiave di dati utilizza unGestore di materiali crittografici(memorizzazione nella cache di CMM). Il caching CMM è specializzatoResponsabile di materiali crittografici (CMM)che interagisce con uncachee un sottostanteCMM. Quando specifichi unProvider di chiavi mastero portachiavi, ilAWS Encryption SDKcrea un CMM predefinito per te.) CMM di caching memorizza nella cache le chiavi di dati restituite dal CMM sottostante. CMM di caching applica anche le soglie di sicurezza della cache che hai impostato.

Per evitare che venga selezionata la chiave di dati errata dalla cache, tutti i CMM di caching compatibili richiedono che le proprietà seguenti dei materiali crittografici memorizzati nella cache corrispondano alla richiesta di materiali.

Nota

AWS Encryption SDK memorizza nella cache le chiavi dei dati solo quando la suite di algoritmi utilizza una funzione di derivazione della chiave.

I seguenti flussi di lavoro mostrano il modo in cui una richiesta di crittografia dei dati viene elaborata con e senza il caching della chiave dei dati. Questi mostrano il modo in cui i componenti di caching che crei, tra cui la cache e il CMM di caching, vengono utilizzati nel processo.

Crittografia dei dati senza caching

Per ottenere i materiali di crittografia senza caching:

  1. Un'applicazione chiede a AWS Encryption SDK di crittografare i dati.

    La richiesta specifica un fornitore di chiavi master o keyring. LaAWS Encryption SDKcrea un CMM predefinito che interagisce con il provider di chiavi master o keyring.

  2. LaAWS Encryption SDKchiede al CMM i materiali di crittografia (ottieni materiali crittografici).

  3. Il CMM chiedeKeyringC eJavaScript) oProvider di chiavi master(Java e Python) per materiali crittografici. Ciò potrebbe comportare una chiamata a un servizio crittografico, come AWS Key Management Service (AWS KMS). CMM restituisce i materiali di crittografia all'AWS Encryption SDK.

  4. L'AWS Encryption SDK utilizza la chiave di dati in testo normale per crittografare i dati. Archivia i dati crittografati e le chiavi di dati crittografate in un messaggio crittografato che viene restituito all'utente.

Crittografia dei dati senza caching

Crittografia dei dati con il caching

Per ottenere i materiali di crittografia con il caching della chiave di dati:

  1. Un'applicazione chiede a AWS Encryption SDK di crittografare i dati.

    La richiesta specifica unCaching di materiali crittografici (caching CMM)associato a un gestore di materiali crittografici sottostante (CMM). Quando specifichi un provider di chiavi master o keyring,AWS Encryption SDKcrea un CMM predefinito per te.

  2. L'SDK richiede i materiali di crittografia al CMM di caching specificato.

  3. CMM di caching richiede i materiali di crittografia dalla cache.

    1. Se la cache trova una corrispondenza, aggiorna l'età, utilizza i valori della voce della cache corrispondente e restituisce i materiali di crittografia al CMM di caching.

      Se la voce cache è conforme alla suaSoglie di sicurezza, il CMM di caching lo restituisce all'SDK. In caso contrario, comunica alla cache di eliminare la voce e di procedere come se non ci fossero corrispondenze.

    2. Se la cache non è in grado di trovare una corrispondenza valida, il CMM di caching chiede al CMM sottostante di generare una nuova chiave di dati.

      Il CMM sottostante ottiene i materiali crittografici dal proprio keyring (C eJavaScript) o fornitore di chiavi master (Java e Python). Questo potrebbe comportare una chiamata a un servizio, come AWS Key Management Service. Il CMM sottostante restituisce copie di testo crittografato e non crittografato della chiave di dati al CMM di caching.

      CMM di caching salva i nuovi materiali di crittografia nella cache.

  4. CMM di caching restituisce i materiali di crittografia all'AWS Encryption SDK.

  5. L'AWS Encryption SDK utilizza la chiave di dati in testo normale per crittografare i dati. Archivia i dati crittografati e le chiavi di dati crittografate in un messaggio crittografato che viene restituito all'utente.

Crittografia dei dati con il caching della chiave dei dati

Creazione di una cache di materiali crittografici

AWS Encryption SDK definisce i requisiti per una cache di materiali di crittografia utilizzata nel caching della chiave dei dati. Fornisce anche una cache locale, che è configurabile, in memoria,Cache utilizzata meno di recente (LRU). Per creare un'istanza della cache locale, utilizzare ilLocalCryptoMaterialsCachecostruttore di Java e Python, ilgetLocalCryptographicMaterialsCachefunzione inJavaScript, o ilaws_cryptosdk_materials_cache_local_newCostruttore di C.

La cache locale include la logica per la gestione della cache di base, incluso l'aggiunta, la cancellazione e la corrispondenza di voci memorizzate e mantenute nella cache. Non è necessario scrivere una logica di gestione della cache personalizzata. È possibile utilizzare la cache locale così com'è, personalizzarla o sostituirla con qualsiasi cache compatibile.

Quando crei una cache locale, la imposticapacitàCioè, il numero massimo di voci che la cache può contenere. Questa impostazione consente di progettare una cache efficiente con un riutilizzo della chiave dei dati limitato.

LaSDK di crittografia AWS per Javae laSDK di crittografia AWS per Pythonfornire anche uncache di materiali crittografici(NullCryptoMaterialsCache). La NullCryptoMaterialsCache restituisce un vuoto per tutte le operazioni GET e non risponde alle operazioni PUT. Puoi utilizzare la NullCryptoMaterialsCache per i test o per disabilitare temporaneamente il caching in un'applicazione che include il codice di memorizzazione nella cache.

NellaAWS Encryption SDKogni cache di materiali crittografici è associata a unGestore di materiali crittografici(memorizzazione nella cache di CMM). CMM di caching ottiene le chiavi dei dati dalla cache, mette le chiavi dei dati nella cache e applicaSoglie di sicurezzache hai impostato. Quando viene creato un CMM di caching, è necessario specificare la cache utilizzata e il CMM sottostante o il provider della chiave master che genera le chiavi di dati che memorizza.

Creazione di un responsabile della cache di materiali crittografici

Per abilitare il caching della chiave di dati, crea uncachee aGestore di materiali crittografici(memorizzazione nella cache di CMM). Quindi, nelle tue richieste per crittografare o decrittografare i dati, è necessario specificare un CMM di caching, invece di uno standardResponsabile di materiali crittografici (CMM), oppureProvider di chiavi masteroKeyring.

Esistono due tipi di CMM. Entrambi ottengono le chiavi dei dati (e relativo materiale crittografico), ma in modi diversi, come segue:

  • Un CMM è associato a un keyring (C o C oJavaScript) o un provider di chiavi master (Java e Python). Quando l'SDK richiede i materiali di crittografia o decrittazione al CMM, il CMM ottiene i materiali dal proprio keyring o fornitore di chiavi master. In Java e Python, il CMM utilizza le chiavi master per generare, crittografare o decrittare le chiavi di dati. In C e JavaScript, il keyring genera, crittografa e restituisce i materiali crittografici.

  • Un CMM di caching è associato a una cache, ad esempio acache localee un CMM sottostante. Quando l'SDK richiede i materiali crittografici al CMM, il caching CMM prova a ottenerli dalla cache. Se non è in grado di trovare una corrispondenza, il CMM di caching richiede i materiali al CMM sottostante. Quindi, memorizza nella cache i nuovi materiali crittografici prima di restituirli all'intermediario.

Anche il CMM di memorizzazione nella cacheSoglie di sicurezzache hai impostato per ogni voce della cache. Poiché le soglie di sicurezza sono impostate e applicate dal CMM nella cache, è possibile usare qualsiasi cache compatibile, anche se la cache non è progettata per materiali sensibili.

Cosa c'è in una voce della cache della chiave di dati?

Il caching della chiave di dati memorizza le chiavi di dati e i relativi materiali crittografici in una cache. Ogni voce include gli elementi elencati di seguito. Queste informazioni potrebbero esserti utili quando decidi di utilizzare la funzionalità di caching della chiave dei dati e quando imposti le soglie di sicurezza su cache di materiali crittografici (caching CMM).

Voci nella cache per le richieste di crittografia

Le voci che vengono aggiunte a una cache della chiave di dati in seguito a un'operazione di crittografia includono i seguenti elementi:

  • Chiave di dati di testo non crittografato

  • Chiavi di dati crittografati (una o più)

  • Contesto di crittografia

  • Chiave di firma del messaggio (se ne viene utilizzata una)

  • Suite di algoritmi

  • Metadati, inclusi i contatori di utilizzo per applicare le soglie di sicurezza

Voci nella cache per le richieste di decrittografia

Le voci che vengono aggiunte a una cache della chiave di dati in seguito a un'operazione di decrittografia includono i seguenti elementi:

  • Chiave di dati di testo non crittografato

  • Chiave di verifica della firma (se ne viene utilizzata una)

  • Metadati, inclusi i contatori di utilizzo per applicare le soglie di sicurezza

Contesto di crittografia: Come selezionare le voci della cache

È possibile specificare un contesto di crittografia in qualsiasi richiesta per crittografare i dati. Tuttavia, il contesto di crittografia svolge un ruolo speciale nel contesto del caching della chiave dei dati. Ti consente di creare sottogruppi di chiavi di dati nella cache, anche quando le chiavi di dati provengono dalla stessa cache.

Un contesto di crittografia è un set di coppie chiave-valore che contiene dati arbitrari non segreti. Durante la crittografia, il contesto di crittografia è legato ai dati crittografati, in modo che lo stesso contesto di crittografia è necessario per decrittografare i dati. In AWS Encryption SDK, il contesto di crittografia viene memorizzato nel messaggio crittografato insieme ai dati crittografati e alle chiavi di dati.

Quando utilizzi una cache di chiavi di dati, è anche possibile utilizzare il contesto di crittografia per selezionare chiavi di dati specifiche nella cache per le tue operazioni di crittografia. Il contesto di crittografia viene salvato nella voce della cache con la chiave dei dati (fa parte dell'ID della voce della cache). Le chiavi dei dati nella cache vengono riutilizzate solo quando i contesti di crittografia corrispondono. Se desideri riutilizzare alcune chiavi dei dati per una richiesta di crittografia, specificare lo stesso contesto di crittografia. Se desideri evitare tali chiavi di dati, specifica un contesto di crittografia diverso.

Il contesto di crittografia è sempre facoltativo, ma consigliato. Se non specifichi un contesto di crittografia nella tua richiesta, un contesto di crittografia vuoto è incluso nell'identificatore della voce di cache e corrisponde a ogni richiesta.

La mia applicazione utilizza chiavi dati memorizzate nella cache?

La memorizzazione nella cache delle chiavi dati è una strategia di ottimizzazione molto efficace per determinate applicazioni e carichi di lavoro. Tuttavia, poiché comporta un certo rischio, è importante determinare quanto sia efficace per la propria situazione e quindi decidere se i benefici superano i rischi.

Poiché la memorizzazione nella cache delle chiavi dati riutilizza le chiavi dati, l'effetto più evidente è ridurre il numero di chiamate per generare nuove chiavi dati. Quando viene implementata la memorizzazione nella cache delle chiavi dati, AWS Encryption SDK richiama l'operazione GenerateDataKey AWS KMS solo per creare la chiave dati iniziale e quando la cache non viene eseguita. Tuttavia, la memorizzazione nella cache migliora sensibilmente le prestazioni solo nelle applicazioni che generano numerose chiavi dati con le stesse caratteristiche, tra cui lo stesso contesto di crittografia e suite di algoritmi.

Per determinare se l'implementazione di AWS Encryption SDK utilizza effettivamente le chiavi dati dalla cache, provare le seguenti tecniche.

  • Nei registri dell'infrastruttura della chiave master, controllare la frequenza delle chiamate per creare nuove chiavi dati. Quando la memorizzazione nella cache delle chiavi dati è efficace, il numero di chiamate per creare nuove chiavi dovrebbe diminuire sensibilmente. Ad esempio, se si sta utilizzando unAWS KMSmaster key provider o portachiavi, cerca nelCloudTrailRegistri perGenerateDataChiavechiama.

  • Confrontare i messaggi crittografati restituiti da AWS Encryption SDK in risposta a diverse richieste di crittografia. Ad esempio, se si sta utilizzando ilSDK di crittografia AWS per Java, confrontare ilParsedCiphertextoggetto da diverse chiamate crittografate. NellaSDK di crittografia AWS per JavaScriptconfrontare i contenuti dellaencryptedDataKeysproprietà delMessageHeader. Quando le chiavi dati vengono riutilizzate, le chiavi dati crittografate nel messaggio crittografato sono identiche.