Hmac

HMAC vs PKDBF2 邁向 HKDF 的第一步

  • August 31, 2017

我正在實現一個應用程序,該應用程序必須從密碼派生兩個密鑰,一個用於伺服器身份驗證,一個用於加密。我正在使用 Java、JCA 和 Bouncy Castle。

到目前為止,要從我使用 PBKDF2 的密碼生成密鑰,如下所示:

SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512", BC);
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, iterations, keyLength);
SecretKey passwordKey = secretKeyFactory.generateSecret(keySpec);

但在我發現的 HKDF 的兩個例子中:

它們以 HmacSHA256 開頭,而不是 PBKDF2。這是為什麼?在這種情況下,這兩種算法的優缺點是什麼?

我認為您沒有得到那些“範例”:它們實現了HKDF。HKDF的全稱是HMAC-based Extract-and-Expand Key Derivation Function。他們不使用PBKDF2,因為他們沒有實現特定的案例,他們實現了算法

所以使用它是非常好的:

master = PBKDF2(SHA-256, iterations, salt, password, 32)
authKey = HKDF(SHA-256, master, "authKey", 32)
encKey = HKDF(SHA-256, master, "encKey", 32)

這是虛擬碼,其中配置選項(例如散列函式和輸出大小)也出現在參數中。

請注意,雖然 SHA-256 被指定為配置選項,但 PBKDF2 和 HKDF 都將在下面使用 HMAC-SHA-256(但 HMAC 只有一個配置選項:要使用的雜湊函式,所以這是等效的)。

引用自:https://crypto.stackexchange.com/questions/51229