2. HMAC-based Key Derivation Function (Funzione di derivazione chiavi basata su HMAC)
2. HMAC-based Key Derivation Function (Funzione di derivazione chiavi basata su HMAC)
2.1. Notation (Notazione)
HMAC-Hash indica la funzione HMAC [HMAC] istanziata con la funzione hash 'Hash'. HMAC ha sempre due argomenti: il primo è una chiave e il secondo un input (o messaggio). (Si noti che nel passo di estrazione, 'IKM' è utilizzato come input HMAC, non come chiave HMAC.)
Quando il messaggio è composto da diversi elementi, utilizziamo la concatenazione (indicata con |) nel secondo argomento; ad esempio, HMAC(K, elem1 | elem2 | elem3).
Le parole chiave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" e "OPTIONAL" in questo documento devono essere interpretate come descritto in [KEYWORDS].
2.2. Step 1: Extract (Passo 1: Estrazione)
HKDF-Extract(salt, IKM) -> PRK
Options (Opzioni):
Hash: una funzione hash; HashLen indica la lunghezza dell'output della funzione hash in ottetti
Inputs (Input):
salt: valore salt opzionale (un valore casuale non segreto); se non fornito, è impostato su una stringa di HashLen zeri.IKM: materiale di chiave di input (input keying material)
Output:
PRK: una chiave pseudocasuale (di HashLen ottetti)
L'output PRK è calcolato come segue:
PRK = HMAC-Hash(salt, IKM)
2.3. Step 2: Expand (Passo 2: Espansione)
HKDF-Expand(PRK, info, L) -> OKM
Options (Opzioni):
Hash: una funzione hash; HashLen indica la lunghezza dell'output della funzione hash in ottetti
Inputs (Input):
PRK: una chiave pseudocasuale di almeno HashLen ottetti (di solito, l'output del passo di estrazione)info: informazioni opzionali di contesto e specifiche dell'applicazione (può essere una stringa di lunghezza zero)L: lunghezza del materiale di chiave di output in ottetti (<= 255*HashLen)
Output:
OKM: materiale di chiave di output (di L ottetti)
L'output OKM è calcolato come segue:
N = ceil(L/HashLen)
T = T(1) | T(2) | T(3) | ... | T(N)
OKM = first L octets of T
dove:
T(0) = empty string (zero length)
T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)
T(2) = HMAC-Hash(PRK, T(1) | info | 0x02)
T(3) = HMAC-Hash(PRK, T(2) | info | 0x03)
...
(dove la costante concatenata alla fine di ogni T(n) è un singolo ottetto.)