我正在研究在PHP中使用bcrypt進行哈希和醃製密碼。 有人可以向我解釋爲什麼 brcypt使用「work」/「rounds」防止攻擊?bcrypt的功能說明
我已經閱讀過「How do you use bcrypt for hashing passwords in PHP?」,但是我很難理解是什麼讓它變得如此特別,如果有人抓住了你的數據庫並且可以將它解開,
是否有可能達到鹽和散列在一起,以保護數據庫免受彩虹表的影響?或者bcrypt做些特別的事情來幫助防止這樣的攻擊?
我正在研究在PHP中使用bcrypt進行哈希和醃製密碼。 有人可以向我解釋爲什麼 brcypt使用「work」/「rounds」防止攻擊?bcrypt的功能說明
我已經閱讀過「How do you use bcrypt for hashing passwords in PHP?」,但是我很難理解是什麼讓它變得如此特別,如果有人抓住了你的數據庫並且可以將它解開,
是否有可能達到鹽和散列在一起,以保護數據庫免受彩虹表的影響?或者bcrypt做些特別的事情來幫助防止這樣的攻擊?
簡單地說,bcrypt
比其他一些散列算法(如sha
系列)「更好」,因爲它故意慢,並且可以通過使用高迭代次數而有目的地變慢。此外,它需要使用鹽,以防止使用預先計算的散列值(彩虹表)。 salt值應與bcrypt的每個輸出一起生成/存儲以禁止不同用戶的值之間的比較(以防他們使用相同的密碼)。
即使攻擊者獲得密碼哈希值和鹽分,只要您使用的bcrypt
使用大量迭代,就無法快速找到匹配的密碼。這是一種單向函數,因此您需要爲每個嘗試的密碼執行一次bcrypt計算。這當然對防止錯誤的密碼提供了保護。
簡而言之,bcrypt和其他密碼延伸算法都是關於工作放大。攻擊者必須做更多的工作才能破解密碼(因爲通常只會以低得多的速度獲得有效的登錄請求或密碼錯誤);因此,每加入密碼哈希時間,您的攻擊者必須支付一百萬甚至十億倍。 Bcrypt和其他算法會故意減慢速度,使攻擊者花費更多時間來破解密碼。
我對這個答案做了一些重要的改變:算法是已知/靜態的。使用的硬件不會改變bcrypt的結果。 bcrypt只依賴於迭代計數的速度;專用硬件/軟件平臺上的加密計算可能會快得多。請記住,雖然答案的要點是正確的,但更詳細的信息當然不是。 –