3. Cryptographic Algorithms for Digital Signatures and MACs (Algoritmi crittografici per firme digitali e MAC)
JWS utilizza algoritmi crittografici per firmare digitalmente o creare un MAC del contenuto del JWS Protected Header (Intestazione protetta JWS) e del JWS Payload (Carico utile JWS).
3.1 "alg" (Algorithm) Header Parameter Values for JWS (Valori del parametro di intestazione "alg" per JWS)
La tabella seguente definisce i valori del parametro di intestazione "alg" (algorithm) per JWS definiti da questa specifica:
| Valore parametro "alg" | Algoritmo di firma digitale o MAC | Requisiti di implementazione |
|---|---|---|
| HS256 | HMAC using SHA-256 (HMAC utilizzando SHA-256) | Required (Richiesto) |
| HS384 | HMAC using SHA-384 (HMAC utilizzando SHA-384) | Optional (Opzionale) |
| HS512 | HMAC using SHA-512 (HMAC utilizzando SHA-512) | Optional (Opzionale) |
| RS256 | RSASSA-PKCS1-v1_5 using SHA-256 (RSASSA-PKCS1-v1_5 utilizzando SHA-256) | Recommended (Raccomandato) |
| RS384 | RSASSA-PKCS1-v1_5 using SHA-384 (RSASSA-PKCS1-v1_5 utilizzando SHA-384) | Optional (Opzionale) |
| RS512 | RSASSA-PKCS1-v1_5 using SHA-512 (RSASSA-PKCS1-v1_5 utilizzando SHA-512) | Optional (Opzionale) |
| ES256 | ECDSA using P-256 and SHA-256 (ECDSA utilizzando P-256 e SHA-256) | Recommended+ (Raccomandato+) |
| ES384 | ECDSA using P-384 and SHA-384 (ECDSA utilizzando P-384 e SHA-384) | Optional (Opzionale) |
| ES512 | ECDSA using P-521 and SHA-512 (ECDSA utilizzando P-521 e SHA-512) | Optional (Opzionale) |
| PS256 | RSASSA-PSS using SHA-256 and MGF1 with SHA-256 (RSASSA-PSS utilizzando SHA-256 e MGF1 con SHA-256) | Optional (Opzionale) |
| PS384 | RSASSA-PSS using SHA-384 and MGF1 with SHA-384 (RSASSA-PSS utilizzando SHA-384 e MGF1 con SHA-384) | Optional (Opzionale) |
| PS512 | RSASSA-PSS using SHA-512 and MGF1 with SHA-512 (RSASSA-PSS utilizzando SHA-512 e MGF1 con SHA-512) | Optional (Opzionale) |
| none | No digital signature or MAC performed (Nessuna firma digitale o MAC) | Optional (Opzionale) |
Nota: Il "+" nella colonna dei requisiti di implementazione indica che la forza del requisito può essere aumentata nelle future versioni della specifica.
3.2 HMAC with SHA-2 Functions (HMAC con funzioni SHA-2)
Gli Hash-based Message Authentication Codes (HMACs) (Codici di autenticazione dei messaggi basati su hash) consentono di utilizzare un segreto più una funzione hash crittografica per generare un MAC. Questo algoritmo è definito nella RFC 2104 [RFC2104].
Requisiti della chiave: Una chiave della stessa dimensione dell'output dell'hash (ad esempio, 256 bit per "HS256") o più grande deve (MUST) essere utilizzata con questo algoritmo.
Valori dell'algoritmo HMAC:
| Valore parametro "alg" | Algoritmo MAC |
|---|---|
| HS256 | HMAC using SHA-256 (HMAC utilizzando SHA-256) |
| HS384 | HMAC using SHA-384 (HMAC utilizzando SHA-384) |
| HS512 | HMAC using SHA-512 (HMAC utilizzando SHA-512) |
Requisiti di validazione: Il confronto dei valori HMAC deve (MUST) essere eseguito in tempo costante per prevenire attacchi temporali.
3.3 Digital Signature with RSASSA-PKCS1-v1_5 (Firma digitale con RSASSA-PKCS1-v1_5)
Questa sezione definisce l'uso dell'algoritmo di firma digitale RSASSA-PKCS1-v1_5 come definito nella sezione 8.2 della RFC 3447 [RFC3447] con le funzioni hash SHA-2.
Requisiti della chiave: Una chiave di dimensione 2048 bit o maggiore deve (MUST) essere utilizzata con questo algoritmo.
Valori dell'algoritmo:
| Valore parametro "alg" | Algoritmo di firma digitale |
|---|---|
| RS256 | RSASSA-PKCS1-v1_5 using SHA-256 (RSASSA-PKCS1-v1_5 utilizzando SHA-256) |
| RS384 | RSASSA-PKCS1-v1_5 using SHA-384 (RSASSA-PKCS1-v1_5 utilizzando SHA-384) |
| RS512 | RSASSA-PKCS1-v1_5 using SHA-512 (RSASSA-PKCS1-v1_5 utilizzando SHA-512) |
3.4 Digital Signature with ECDSA (Firma digitale con ECDSA)
L'Elliptic Curve Digital Signature Algorithm (ECDSA) (Algoritmo di firma digitale a curva ellittica) [DSS] utilizza la crittografia a curva ellittica, fornendo sicurezza equivalente a RSA con lunghezze di chiave più brevi e elaborazione più veloce.
Curve e funzioni hash supportate:
- Curva P-256 con SHA-256
- Curva P-384 con SHA-384
- Curva P-521 con SHA-512
Passi di generazione della firma ECDSA P-256 SHA-256:
- Generare una firma digitale dell'input di firma JWS utilizzando ECDSA P-256 SHA-256 con la chiave privata, producendo una coppia (R, S), ciascuna un intero senza segno a 256 bit
- Convertire R e S in sequenze di ottetti in ordine big-endian, ciascuna lunga 32 ottetti
- Concatenare le due sequenze di ottetti nell'ordine R poi S
- La sequenza risultante di 64 ottetti è il valore della firma JWS
Valori dell'algoritmo:
| Valore parametro "alg" | Algoritmo di firma digitale |
|---|---|
| ES256 | ECDSA using P-256 and SHA-256 (ECDSA utilizzando P-256 e SHA-256) |
| ES384 | ECDSA using P-384 and SHA-384 (ECDSA utilizzando P-384 e SHA-384) |
| ES512 | ECDSA using P-521 and SHA-512 (ECDSA utilizzando P-521 e SHA-512) |
Lunghezze della firma:
- ES256: 64 ottetti (R e S sono ciascuno 32 ottetti)
- ES384: 96 ottetti (R e S sono ciascuno 48 ottetti)
- ES512: 132 ottetti (R e S sono ciascuno 66 ottetti)
3.5 Digital Signature with RSASSA-PSS (Firma digitale con RSASSA-PSS)
Questa sezione definisce l'uso dell'algoritmo di firma digitale RSASSA-PSS come definito nella sezione 8.1 della RFC 3447 [RFC3447], con la funzione di generazione della maschera MGF1 e le funzioni hash SHA-2.
Parametri chiave:
- La funzione hash RSASSA-PSS e la funzione hash MGF1 utilizzano la stessa funzione hash
- La dimensione del valore salt è uguale alla dimensione di output della funzione hash
- Requisito di dimensione della chiave: 2048 bit o maggiore
Valori dell'algoritmo:
| Valore parametro "alg" | Algoritmo di firma digitale |
|---|---|
| PS256 | RSASSA-PSS using SHA-256 and MGF1 with SHA-256 (RSASSA-PSS utilizzando SHA-256 e MGF1 con SHA-256) |
| PS384 | RSASSA-PSS using SHA-384 and MGF1 with SHA-384 (RSASSA-PSS utilizzando SHA-384 e MGF1 con SHA-384) |
| PS512 | RSASSA-PSS using SHA-512 and MGF1 with SHA-512 (RSASSA-PSS utilizzando SHA-512 e MGF1 con SHA-512) |
3.6 Using the Algorithm "none" (Utilizzo dell'algoritmo "none")
La specifica JWS [JWS] definisce il valore "alg" "none" per l'uso nella creazione di oggetti JWS non sicuri che non forniscono protezione dell'integrità.
Avviso di sicurezza: Le implementazioni devono (MUST) comprendere le implicazioni di sicurezza dell'utilizzo di questo algoritmo. Il valore "alg" "none" dovrebbe (SHOULD) essere utilizzato solo quando la protezione dell'integrità non è necessaria.