L'implementazione di PBKDF2 è corretta?

1

Mi sto preparando per una presentazione e voglio solo ricontrollare che ho capito bene:

PBKDF2 è:

for (0,4096)
{
     data1 = HMACSHA1(data1, data2); 
     data2 = HMACSHA1(data2, data1);
}
where data1 and data2 are pass and respectively salt and
HMACSHA1 = SHA1(salt+SHA1(pass+salt))

È corretto?

    
posta Zodiac 07.09.2016 - 09:12
fonte

1 risposta

1

Il tuo ciclo è sbagliato in due aspetti.

  1. Anche la lunghezza del DK è importante
  2. La password viene riutilizzata

In base alla pagina wiki (oppure puoi andare agli RFC se desideri):

DK = PBKDF2(PRF, Password, Salt, c, dkLen)

where:

  • PRF is a pseudorandom function of two parameters with output length hLen (e.g. a keyed HMAC)

...

Each hLen-bit block Ti of derived key DK, is computed as follows:

DK = T1 || T2 || ... || Tdklen/hlen

Ti = F(Password, Salt, c, i)

F(Password, Salt, c, i) = U1 ^ U2 ^ ... ^ Uc

where:

U1 = PRF(Password, Salt || INT_32_BE(i))

U2 = PRF(Password, U1)

...

Uc = PRF(Password, Uc-1)

WPA2 utilizza un DK a 256 bit ( DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256) ), quindi il processo richiede due blocchi ( Ti ) per raggiungere questo poiché SHA1 è lungo solo 160 bit. Inoltre, l'iterazione descritta qui utilizza la password originale per ogni iterazione, ovvero Ui = PRF(Password, Ui-1) , oppure si riutilizza la password modificata su ogni iterazione nel proprio loop.

Per una versione semplificata per WPA2 vorrei scrivere:

DK = B1 || trunc(B2)
B1 = F(Password, SSID || INT(1))
B2 = F(Password, SSID || INT(2))

where F(P, S) is the function

for(0, 4096) {
    U = HMAC-SHA1(P, S)
    S = U
}
    
risposta data 07.09.2016 - 10:11
fonte

Leggi altre domande sui tag