scrypt
Tarsnap開發的演演算法
scrypt是由著名的FreeBSD黑客Colin Percival為他的備份服務,Tarsnap開發的。
scrypt不僅計算所需時間長,而且佔用的內存也多,使得并行計算多個摘要異常困難,因此利用rainbow table進行暴力攻擊更加困難。scrypt沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函數庫支持。但是,scrypt在演演算法層面只要沒有破綻,它的安全性應該高於PBKDF2和Bcrypt。
scrypt
PBKDF2
PBKDF2簡單而言就是將salted hash進行多次重複計算,這個次數是可選擇的。如果計算一次所需要的時間是1微秒,那麼計算1百萬次就需要1秒鐘。假如攻擊一個密碼所需的rainbow table有1千萬條,建立所對應的rainbow table所需要的時間就是115天。這個代價足以讓大部分的攻擊者望而生畏。美國政府機構已經將這個方法標準化,並且用於一些政府和軍方的系統。這個方案最大的優點是標準化,實現容易同時採用了久經考驗的SHA演演算法。
bcrypt
bcrypt是專門為密碼存儲而設計的演演算法,基於Blowfish加密演演算法變形而來,由Niels Provos和David Mazières發表於1999年的USENIX。 bcrypt最大的好處是有一個參數(work factor),可用於調整計算強度,而且work factor是包括在輸出的摘要中的。隨著攻擊者計算能力的提高,使用者可以逐步增大work factor,而且不會影響已有用戶的登陸。
bcrypt經過了很多安全專家的仔細分析,使用在以安全著稱的OpenBSD中,一般認為它比PBKDF2更能承受隨著計算能力加強而帶來的風險。bcrypt也有廣泛的函數庫支持,因此我們建議使用這種方式存儲密碼。