Sto guardando JSON Web Encryption (JWE) e sono lasciato un po 'confuso sul motivo per cui useresti AES key wrapping .
Il documento parla anche dell'uso di corrispondenti punti di forza dell'algoritmo chiave :
Algorithms of matching strengths should be used together whenever possible. For instance, when AES Key Wrap is used with a given key size, using the same key size is recommended when AES GCM is also used. If the key encryption and content encryption algorithms are different, the effective security is determined by the weaker of the two algorithms.
In sostanza, mi chiedo perché useresti la funzione AES per l'avvolgimento delle chiavi.
Esempio
Quindi per un confronto di esempio, utilizzando l'algoritmo di crittografia A256GCM ho bisogno di una chiave a 256 bit. Per essere semplice, la mia chiave sarà "secret0123456789secret0123456789" e sto codificando "Test".
DIR
Utilizzare l'algoritmo della chiave direct (DIR) (così usando la mia chiave come chiave dei contenuti), ottengo:
eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..Vlf_WdLm-spHbfJe.RxMPrw.5VC8Y_qSPdSubbGNGyfn6A
Questo si rompe come:
JWE Header: {"alg":"dir","enc":"A256GCM"}
Encrypted key (CEK): (blank)
IV: Vlf_WdLm-spHbfJe
Ciphertext: RxMPrw
Authentication Tag: 5VC8Y_qSPdSubbGNGyfn6A
A256KW
Corrispondente all'algoritmo dell'involucro chiave con l'algoritmo di crittografia, userò un Chiave AES 256 bit , che produce:
eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMjU2R0NNIn0.66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA.X5ZL8yaOektXmfny.brz-Lg.xG-EvM-9hrw0XRiuRW7HrA
Questo si rompe come:
JWE Header: {"alg":"A256KW","enc":"A256GCM"}
Encrypted key (CEK): 66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA
IV: X5ZL8yaOektXmfny
Ciphertext: brz-Lg
Authentication Tag: xG-EvM-9hrw0XRiuRW7HrA
A quanto ho capito, la chiave del contenuto è crittografata usando Chiave Web JSON ( JWK) , ma in sostanza ciò che sta facendo è:
- creazione di una chiave di crittografia del contenuto a 256 bit casuale (CEK)
- crittografando i dati effettivi con questo CEK (e un IV casuale)
- crittografia del CEK con la chiave fornita
I dati crittografati CEK, IV e crittografati fanno tutti parte dell'oggetto JWE risultante (tutti codificati in base 64url).
Direct JWE comporta un payload più piccolo da inviare over-the-wire, e presumo che sia leggermente più veloce sia per crittografare che per decriptare perché salta un passaggio.
L'uso del wrapper AES offre maggiore sicurezza e, in tal caso, perché? In caso contrario, perché dovresti usarlo invece della semplice crittografia diretta dei contenuti?