Sha-1
為什麼 bcrypt 的作者選擇了河豚而不是像 SHA-1 這樣的雜湊函式?
我想知道使用 bcrypt 與基於某些加密雜湊函式(如 SHA-1(或 SHA-3))的迭代和加鹽 KDF 相比有什麼優勢?我猜 bcrypt 的作者選擇 Blowfish(一種分組密碼)是出於一個嚴肅的原因,但我們幾乎無法將其替換為 SHA-1/SHA-3(一種雜湊函式)。這種方法有什麼問題?塊密碼帶來的安全屬性是什麼,而不是散列函式?
bcrypt KDF 不按原樣使用整個分組密碼。它依賴於其密鑰計劃的修改版本。這很重要,因為與許多其他密碼不同,河豚的密鑰時間表非常昂貴。它需要大約 4 KB 的快速記憶體,而 SHA-1 非常輕,幾乎可以完全在 x86 寄存器中計算。儘管 bcrypt 不像 Argon2 等其他現代 KDF 那樣記憶體困難,但它在當時仍然相當出色,並且在許多方面仍然比 PBKDF2 更好,PBKDF2 在內部使用像 SHA-1 或 SHA-2 這樣的雜湊函式家庭。
請參閱為什麼不能在 Cuda 中實現 bcrypt?有關為什麼記憶硬度好的更多資訊。它解釋了為什麼你不能從帶有 bcrypt 的 GPU 的大規模並行性中獲得那麼多。Thomas Pornin 在其他地方也有精彩的回答,其中詳細介紹了 bcrypt 的安全性。