Utilizarea unei sări are două scopuri: separarea domeniilor și extracție aleatorie.
Dacă sunteți sigur că IKM (materialul de introducere a cheii) este utilizat doar într-un „domeniu”, nu aveți nevoie de o sare în scopul separării domeniilor. În același domeniu, utilizați în schimb parametrul info pentru a genera mai multe chei din același IKM pentru diferite contexte din domeniu.
Dacă IKM-ul dvs. este deja uniform aleatoriu (cum ar fi atunci când este o cheie privată uniform aleatorie utilizată pentru a obține sub-chei prin HKDF), atunci nu aveți nevoie de o sare în scopul extragerii aleatorii dacă IKM-ul are o lungime suficientă de biți pentru scopurile dumneavoastră.
Separarea domeniilor
Pagina 26 din "Extracția criptografică și derivarea cheilor:
Schema HKDF„Hârtia (denumită [HKDF-paper] în rfc5869) oferă următorul exemplu de necesitate a separării domeniilor:
Importanța unei astfel de independențe poate fi ilustrată de
urmând exemplul din „viața reală”... A
Schimbul Diffie-Hellman este autentificat prin semnarea cheii $g^{xy}$. În
realitate, ceea ce este semnat este $H(g^{xy})$ pentru unele funcții hash $H$, Spune
SHA-1. Dacă semnătura permite recuperarea mesajului (de exemplu, RSA), atunci
atacatorul nu învață $g^{xy}$ ci mai degrabă $H(g^{xy})$; astfel dacă unul
se gândește la $H$ ca un oracol aleatoriu atunci nimic nu se învață $g^{xy}$.
Acum, să presupunem că protocolul de mai sus derivă chei printr-un protocol tradițional
KDF, și anume, cheile sunt calculate ca $H(g^{xy} \mathbin\| v)$ pentru unii
valorile publice $v$. În acest caz, dacă urmărim $H$ = exemplu SHA-1 și
presupune $g^{xy}$ are lungimea 1024, obținem acel calcul $H(g^{xy}\mathbin\|v)$ este
la fel ca si informatica $H$ pe $v$ cu IV al $H$ setat la $H(g^{xy})$ (pentru
simplitatea presupune că calculul de $H$ pe $g^{xy}$ nu foloseste
lungime anexată). Cu toate acestea, aceasta înseamnă că atacatorul învață totul
cheile de când știe $H(g^{xy})$! Eșecul protocolului nu este
datorita unei slabiciuni specifice a $H$ ci mai degrabă la folosirea aceloraşi
(deterministă) funcție pentru două funcționalități diferite: hash
funcţie aplicată la $g^{xy}$ și KDF. Spre deosebire de aceasta, dacă unul este cu cheie $H$ prin intermediul
o valoare de sare în utilizarea sa de către KDF ar impune independența
între cele două funcţionalităţi.
HDKF constă din două etape:
- HKDF-Extract: PRK = HMAC-Hash(sare, IKM)
- HKDF-Expand(PRK, info, L) -> OKM
(Acolo unde IKM este „material de introducere a tastei”, PRK este „o cheie pseudoaleatorie”, OKM este „material de codare de ieșire”, L este lungimea rezultatului dorit).
Prin urmare, dacă nu s-a folosit sare și valoarea HMAC-Hash(NULL, IKM) s-a scurs cumva (de exemplu, în scenariul „recuperare mesaj” de mai sus), atunci toate utilizările HKDF ulterioare, folosind același IKM și fără sare ar fi fi de asemenea compromis.
Dacă nu aveți nevoie de o sare pentru separarea domeniului, atunci ar trebui să vă gândiți dacă aveți nevoie de o sare în scopul extracției aleatorie. Acea întrebare este postat aici.