Passa al contenuto principale

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.)