5. Funzioni di derivazione della chiave
- Funzioni di derivazione della chiave (KDFs)
La sezione 8.4 di [RFC9052] contiene una descrizione generica delle funzioni di derivazione della chiave. Questo documento definisce una singola struttura di contesto e una singola KDF. Questi elementi sono utilizzati per tutti gli algoritmi del destinatario definiti in questo documento che richiedono un processo KDF. Questi algoritmi sono definiti nelle sezioni 6.1.2, 6.3.1 e 6.4.1.
5.1. Funzione di derivazione della chiave Extract-and-Expand basata su HMAC (HKDF)
L'algoritmo di derivazione della chiave HKDF è definito in [RFC5869] e [HKDF].
L'algoritmo HKDF accetta questi input:
secret: Un valore condiviso che è segreto. I segreti possono essere precedentemente condivisi o derivati da operazioni come un accordo di chiave Diffie-Hellman (DH).
salt: Un valore opzionale utilizzato per modificare il processo di generazione. Il valore del sale può essere pubblico o privato. Se il sale è pubblico e trasportato nel messaggio, viene utilizzato il parametro dell'intestazione dell'algoritmo "salt" definito nella Tabella 9. Sebbene [RFC5869] suggerisca che la lunghezza del sale sia la stessa della lunghezza del valore hash sottostante, qualsiasi lunghezza positiva del sale migliorerà la sicurezza, poiché verranno generati valori di chiave diversi. Questo parametro è protetto essendo incluso nel calcolo della chiave e non necessita di essere autenticato separatamente. Il valore del sale non deve essere univoco per ogni messaggio inviato.
length: Il numero di byte di output che devono essere generati.
context information: Informazioni che descrivono il contesto in cui verrà utilizzato il valore risultante. Rendere queste informazioni specifiche per il contesto in cui il materiale verrà utilizzato garantisce che il materiale risultante sarà sempre legato a tale utilizzo. La struttura del contesto definita nella Sezione 5.2 è utilizzata dalle KDF in questo documento.
PRF: La funzione pseudocasuale sottostante da utilizzare nell'algoritmo HKDF. La PRF è codificata nella selezione dell'algoritmo HKDF.
HKDF è definito per utilizzare HMAC come PRF sottostante. Tuttavia, è possibile utilizzare altre funzioni nello stesso costrutto per fornire una KDF diversa più appropriata nel mondo vincolato. In particolare, si può utilizzare AES-CBC-MAC come PRF per la fase di espansione, ma non per la fase di estrazione. Quando si utilizza un buon segreto condiviso casuale della lunghezza corretta, la fase di estrazione può essere saltata. Per le versioni dell'algoritmo AES, la fase di estrazione viene sempre saltata.
La fase di estrazione non può essere saltata se il segreto non è uniformemente casuale, ad esempio se è il risultato di una fase di accordo di chiave ECDH. Ciò implica che la versione AES HKDF non può essere utilizzata con ECDH. Se la fase di estrazione viene saltata, il valore "salt" non viene utilizzato come parte della funzionalità HKDF.
Gli algoritmi definiti in questo documento si trovano nella Tabella 8.
+==============+===================+========================+
| Nome | PRF | Descrizione |
+==============+===================+========================+
| HKDF SHA-256 | HMAC con SHA-256 | HKDF utilizzando HMAC |
| | | SHA-256 come PRF |
+--------------+-------------------+------------------------+
| HKDF SHA-512 | HMAC con SHA-512 | HKDF utilizzando HMAC |
| | | SHA-512 come PRF |
+--------------+-------------------+------------------------+
| HKDF AES- | AES-CBC-MAC-128 | HKDF utilizzando AES- |
| MAC-128 | | MAC come PRF (128 bit) |
+--------------+-------------------+------------------------+
| HKDF AES- | AES-CBC-MAC-256 | HKDF utilizzando AES- |
| MAC-256 | | MAC come PRF (256 bit) |
+--------------+-------------------+------------------------+
Tabella 8: Algoritmi HKDF