1. Introduction (Introduzione)
1. Introduction (Introduzione)
Una funzione di derivazione chiavi (key derivation function, KDF) è un componente di base ed essenziale dei sistemi crittografici. Il suo obiettivo è prendere una fonte di materiale di chiave iniziale e derivare da essa una o più chiavi segrete crittograficamente forti.
Questo documento specifica una KDF semplice basata su HMAC [HMAC], denominata HKDF, che può essere utilizzata come elemento costitutivo in vari protocolli e applicazioni, ed è già utilizzata in diversi protocolli IETF, tra cui [IKEv2], [PANA] e [EAP-AKA]. Lo scopo è documentare questa KDF in modo generale per facilitarne l'adozione in futuri protocolli e applicazioni e per scoraggiare la proliferazione di molteplici meccanismi KDF. Non è inteso come un appello a modificare i protocolli esistenti e non modifica o aggiorna le specifiche esistenti che utilizzano questa KDF.
HKDF segue il paradigma "estrai-poi-espandi" (extract-then-expand), in cui la KDF è logicamente composta da due moduli. La prima fase prende il materiale di chiave di input e ne "estrae" una chiave pseudocasuale K di lunghezza fissa. La seconda fase "espande" la chiave K in diverse chiavi pseudocasuali aggiuntive (l'output della KDF).
In molte applicazioni, il materiale di chiave di input non è necessariamente distribuito uniformemente e l'attaccante può avere una conoscenza parziale di esso (ad esempio, un valore Diffie-Hellman calcolato da un protocollo di scambio chiavi) o addirittura un controllo parziale su di esso (come in alcune applicazioni di raccolta di entropia). Pertanto, l'obiettivo della fase di "estrazione" è "concentrare" l'entropia possibilmente dispersa del materiale di chiave di input in una chiave pseudocasuale breve ma crittograficamente forte. In alcune applicazioni, l'input può già essere una buona chiave pseudocasuale; in questi casi, la fase di "estrazione" non è necessaria e la parte di "espansione" può essere utilizzata da sola.
La seconda fase "espande" la chiave pseudocasuale alla lunghezza desiderata; il numero e le lunghezze delle chiavi di output dipendono dagli algoritmi crittografici specifici per i quali sono necessarie le chiavi.
Si noti che alcune specifiche KDF esistenti, come NIST Special Publication 800-56A [800-56A], NIST Special Publication 800-108 [800-108] e IEEE Standard 1363a-2004 [1363a], considerano solo la seconda fase (espansione di una chiave pseudocasuale) o non differenziano esplicitamente tra le fasi di "estrazione" e "espansione", spesso con conseguenti carenze progettuali. L'obiettivo di questa specifica è soddisfare un'ampia gamma di requisiti KDF minimizzando le assunzioni sulla funzione hash sottostante. Il paradigma "estrai-poi-espandi" supporta bene questo obiettivo (vedere [HKDF-paper] per maggiori informazioni sulla giustificazione del design).