私はプレゼンテーションの準備をしていますが、それが正しいことを再確認したいと思います。
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))
これは正しいです?
あなたのループは2つの面で間違っています。
wiki ページによると(または、必要に応じて [〜#〜] rfc [〜#〜] に移動できます):
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
どこ:
- PRFは、出力長がhLenの2つのパラメーターの疑似ランダム関数です(例:キー付きHMAC)
.。
派生キーDKの各hLenビットブロックTiは、次のように計算されます。
_
DK = T1 || T2 || ... || Tdklen/hlen
_
Ti = F(Password, Salt, c, i)
F(Password, Salt, c, i) = U1 ^ U2 ^ ... ^ Uc
どこ:
U1 = PRF(Password, Salt || INT_32_BE(i))
U2 = PRF(Password, U1)
_
...
_
Uc = PRF(Password, Uc-1)
WPA2は256ビットのDK(DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
)を使用します。SHA1の長さはわずか160ビットであるため、これに到達するにはプロセスに2つのブロック(Ti
)が必要です。さらに、ここで説明する反復では、各反復の元のパスワード、つまりUi = PRF(Password, Ui-1)
を使用するか、独自のループの各反復で変更されたパスワードを再利用します。
WPA2の簡易バージョンについては、次のように記述します。
_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
}
_