Hash

使用靜態鹽調試 bcrypt 迭代

  • September 22, 2022

我想使用這個 python 庫用靜態鹽調試 bcrypt 輪

import bcrypt
salt = bcrypt.gensalt(14)
password = b"foo"
foo_1_round = bcrypt.kdf(password, salt, desired_key_bytes=10, rounds=1)
foo_2_rounds_manually = bcrypt.kdf(foo_1_round, salt, desired_key_bytes=10, rounds=1)

foo_2_rounds = bcrypt.kdf(password, salt, desired_key_bytes=10, rounds=2)

我希望看到平等foo_2_roundsfoo_2_rounds_manually

你的期望是不正確的。輸出不僅僅是可用於繼續處理的中間狀態。這是一個根據https://en.wikipedia.org/wiki/Bcrypt專門格式化的字元串。快速瀏覽一下,應該可以從中間輸出繼續計算,但您需要解析輸出並反轉編碼,而不是直接使用它。即便如此,輸出也不會完全匹配,因為成本已包含在最終結果中。

您無法從具有較低成本因子的 bcrypt 雜湊計算 bcrypt 雜湊。很少有密碼散列算法允許在不知道密碼的情況下增加成本因素​​,而 bcrypt 不是其中之一。即使對於支持工作因子增加的算法,這不僅僅是將低成本結果傳遞回輸入:它是一種獨特的算法。

密碼散列算法的成本因素通常稱為“迭代”,因為對於經典算法,它是迭代計數。但是對於現代算法,成本因素通常比循環次數具有更大的影響。對於 bcrypt,成本因子用於Blowfish 密鑰設置,它有一個循環 $ 2^{\textrm{cost}} $ 迭代。雜湊不是這個循環的輸出:這個循環的輸出是一個密鑰,而雜湊是用這個密鑰加密一個固定的文本。成本因素越高,關鍵是不同的,所以最終的結果是完全不相關的。

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