為什麼 bcrypt 是單向的,而 Blowfish 是可逆的?
雖然
bcrypt
通常被認為是不可逆的散列函式,但它基於可逆的 Blowfish 密碼。我只是好奇這是如何工作的。這是來自維基的虛擬碼:bcrypt(cost, salt, input) state ← EksBlowfishSetup(cost, salt, input) ctext ← "OrpheanBeholderScryDoubt" //three 64-bit blocks repeat (64) ctext ← EncryptECB(state, ctext) //encrypt using standard Blowfish in ECB mode return Concatenate(cost, salt, ctext)
我知道第一個 bcrypt 將通過
EksBlowfishSetup
key shcedule 函式將狀態輸出為加密密鑰。然後它"OrpheanBeholderScryDoubt"
用密鑰加密文本。根據https://security.stackexchange.com/questions/66050/should-bcrypt-be-used-for-client-side-password-hashing/66056#66069中的回答,bcrypt 是不可逆的,因為BCrypt 可以被視為通過丟棄密鑰進行加密。雖然 Blowfish 幾乎不可能進行已知明文攻擊,但這就是使 bcypt 不可逆轉的原因嗎?因為我認為已知明文攻擊仍然是**“計算上可行的”**。
我想知道的是,如果我們通過
EksBlowfishSetup(cost, salt, input)
已知明文攻擊或其他方式獲得加密密鑰(由 產生),並且我們有傳遞給 EksBlowfishSetup 的成本和鹽,是否有可能獲得真正的密碼?根據此處的答案,
EksBlowfishSetup
這是brcypt
單向的原因,因為您需要知道傳遞給它的所有 3 個參數才能檢索明文密碼。那麼我可以說它EksBlowfishSetup
實際上使 bcrypt 不可逆嗎?可能對您有所幫助:密碼技術與實踐
bcrypt
使用作為EksBlowfishSetup
河豚密碼的擴展密鑰步進函式,將您的密鑰擴展為適當的加密隨機密鑰以使用它。然後使用擴展的密鑰加密一些文本,加密的文本是儲存的雜湊因此,攻擊者可以知道純文字(
"OrpheanBeholderScryDoubt"
)、成本和鹽(它在散列中)。但是 Blowfish 作為每個被認為是安全的現代加密系統(如 AES 或 Serpent)都是專門為防止已知的明文攻擊而設計的,這意味著攻擊者無法從明文中獲取密鑰並且它是相應的密文,因此他唯一的機會是嘗試每個可能的密碼來加密該文本並獲得相同的結果,這是一種蠻力攻擊,對於實際已知的硬體來說是不“計算上可行的”