5

Nodecrypto.PBKDF2が HMAC SHA-1 を使用している場合、キーの長さが 20 バイトを超えることはあり得ますか?

これが私が理解していることです(明らかに間違っています):crypto.PBKDF2(password, salt, iterations, keylen, callback)HMAC SHA-1を使用して、ソルトでパスワードをハッシュします。次に、そのハッシュを取得し、同じソルトでハッシュします。何回繰り返してもそれを繰り返し、結果を返します。結果は、で指定したバイト数に切り捨てられますkeylen

SHA-1 は 160 ビットまたは 20 バイトを出力します。しかし、 から 20 バイト以上を要求できkeylen、20 バイトを超えるcrypto.PBKDF2とデータが繰り返されません。それは私には意味がありません。

ここで私は何を誤解していますか?

やってみて:

c.pbkdf2('password', 'salt', 1, 21, function(err, key) {
    for (var i = 0; i < key.length; i++) {
        console.log(key[i].toString(36));
    }
});

20 番目のバイトの後に何らかのパターンが見られると思いますが、そうではありません。

4

1 に答える 1

6

ithブロックを導出するために、PBKDF2iはソルトに連結された完全な鍵導出を実行します。したがって、21バイト目を取得するには、異なる有効ソルトを使用して派生を再度実行するだけで、出力が完全に異なります。これは、21バイトの導出は20バイトの導出の2倍の費用がかかることを意味します。


PBKDF2を使用して、基になるハッシュの自然な出力サイズ/サイズよりも多くを導出することはお勧めしません。多くの場合、これは防御側の速度を低下させるだけで、攻撃側の速度を低下させることはありません。

一度実行PBKDF2して単一のマスターキーを取得し、次にHKDFを使用してそこから複数のシークレットを取得したいと思います。暗号化してからMAC用にAESキーとHMACキーの両方を生成するときに、PBKDF2をソルトする方法を参照してください。crypto.SEで

于 2013-01-18T08:22:29.357 に答える