Passwords
PBKDF2 中的最大密碼長度
還沒有在Google找到任何明確的答案,所以這取決於你們:
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
在這裡,密碼長度的上限是多少?我嘗試了最多 16 個字元,它可以工作。我能走多遠?我在某處讀到鹽沒有上限!這是真的嗎?
可以與 PBKDF2 一起使用的密碼或鹽長度沒有實際限制。
然而,理論限制是由 PBKDF2 使用的散列函式決定的:在底層,它使用 $ HMAC(Password, Salt || Counter) $ ,這又將轉換為一系列雜湊函式呼叫:
- $ K_0 = H(Password) $ (假設密碼比雜湊塊長)
- $ HMAC = H((K_0 \oplus opad) || H((K_0 \oplus ipad) || Salt)) $
如果我們假設一個非常長的密碼和/或鹽,那麼兩個雜湊函式呼叫可能會“溢出”: $ H(Password) $ 和 $ H((K_0 \oplus ipad) || Salt) $ . 為了避免這種“溢出” $ Password $ 必須小於散列函式支持的最大輸入大小,並且 $ Salt $ 必須小於最大輸入長度減去函式的塊大小。
為了給出一些觀點並說明為什麼這在現實世界中並不重要,例如 SHA-1 的最大輸入長度是 $ 2^{64}-1 $ 位或 $ 2^{61}-1 $ 字節。SHA-1 的塊大小為 64 字節,因此最大 $ Salt $ 大小將是 $ 2^{61}-65 $ 字節。