Logo Logo
GitHub Designed by Logto

Cos’è la Crittografia Web JSON (JSON Web Encryption, JWE)?

Come definito nell’RFC 7516, la Crittografia Web JSON (JSON Web Encryption, JWE) è un meccanismo per crittografare e decrittografare dati in formato JSON. Aggiunge un livello di riservatezza ai dati ed è particolarmente utile quando si trasmettono informazioni sensibili su una rete non affidabile.

JWE è spesso utilizzato in combinazione con i JSON Web Token (JWT) per proteggere i dati del payload. Ad esempio, un Token ID o un Token di accesso (Access token) può essere crittografato utilizzando JWE per garantire che i dati siano sicuri durante la trasmissione.

Come funziona JWE?

JWE ha due formati di serializzazione: compatto e JSON. Ogni formato ha il proprio modo di rappresentare i dati crittografati.

Serializzazione compatta

Nella serializzazione compatta, il JWE è rappresentato come una stringa con cinque parti codificate in Base64URL separate da punti (.). Le cinque parti sono:

{{header}}.{{encrypted-key}}.{{iv}}.{{ciphertext}}.{{tag}}

Ogni parte ha uno scopo specifico:

  • header: Contiene i metadati sull’algoritmo di crittografia e la gestione delle chiavi.
  • encrypted-key: La chiave di crittografia del contenuto crittografata (CEK) utilizzata per crittografare il payload.
  • iv: Il vettore di inizializzazione utilizzato nel processo di crittografia.
  • ciphertext: I dati del payload crittografati.
  • tag: Il tag di autenticazione utilizzato per verificare l’integrità dei dati crittografati.

Serializzazione JSON

La serializzazione JSON è più verbosa e fornisce un modo strutturato per rappresentare il JWE. Il JWE è rappresentato come un oggetto JSON con le seguenti proprietà:

{
  "protected": "{{protected-header}}",
  "unprotected": "{{unprotected-header}}",
  "header": "{{header}}",
  "encrypted_key": "{{encrypted-key}}",
  "iv": "{{iv}}",
  "ciphertext": "{{ciphertext}}",
  "tag": "{{tag}}",
  "aad": "{{additional-authenticated-data}}"
}
  • protected: Contiene l’header protetto codificato in Base64URL.
  • unprotected: Contiene l’header non protetto condiviso del JWE.
  • header: Contiene l’header non protetto per destinatario del JWE.
  • encrypted_key: Contiene la chiave di crittografia del contenuto crittografata (CEK) codificata in Base64URL.
  • iv: Contiene il vettore di inizializzazione codificato in Base64URL.
  • ciphertext: Contiene il testo cifrato codificato in Base64URL (payload crittografato).
  • tag: Contiene il tag di autenticazione codificato in Base64URL.
  • aad: Contiene i dati autenticati aggiuntivi codificati in Base64URL.

Il client dovrebbe essere in grado di decrittografare il JWE utilizzando la chiave e l’algoritmo appropriati. Una chiave pre-comunicata o una chiave derivata da un protocollo di accordo chiave può essere utilizzata per decrittografare il JWE.

Ad esempio, un Token ID può essere crittografato utilizzando JWE, e il client può decrittografarlo utilizzando la chiave appropriata ottenuta dall’endpoint jwks_uri del provider OpenID.

Vedi anche