密碼的儲存用哪一種演算法?
您選對了嗎? 密碼儲存的演算法, MD5, SHA, PBKDF2, BCrypt
這邊文章主要說明密碼的儲存要用哪一種加密演算法儲存?
各種演算法的優缺點? 業界與相關標準的建議
MD5
這是目前業界算是禁止使用的演算法
優點是快速 , 但是卻很快就會被破解, 只有128bit
除此之外, 該演算法很容易產生 collision
也就是說計算出來的 Hash值有可能重複
密碼 Hash的儲存通常會加上一個隨機數 (Salt)的方式當作參數
Hash = (password, 隨機數 Salt)
這樣一來, 駭客才無法用字典檔案產生一組 Hash來猜出原始密碼
SHA
SHA1 也被認定為弱演算法, 因此業界普遍使用SHA256
- SHA-1 (Simplest one – 160 bits Hash)
- SHA-256 (Stronger than SHA-1 – 256 bits Hash)
- SHA-384 (Stronger than SHA-256 – 384 bits Hash)
- SHA-512 (Stronger than SHA-384 – 512 bits Hash)
但是密碼儲存我們也通常不會使用 SHA的方式
密碼的儲存主要使用的演算法是 PBKDF2, BCrypt, Script
PBKDF2, BCrypt , Scrypt的出現
這三個是目前業界普遍使用來儲存密碼的 Hash演算法
PBKDF2, BCrypt, Script有一個共通的特色,
就是讓電腦執行速度變得很慢
因此, 這樣的演算法有助於防止暴力破解
哪一個演算法比較推薦呢?
由於美國 NIST 與FIPS標準推薦使用 PBKDF2
因此, 也讓 PBKDF2 更為有公信力
倒不是因為其他兩個演算法比較弱或是有被找到漏洞
所以如果您的密碼儲存演算法不是這三個其中之一的話
要好好跟開發團隊討論討論囉.
演算法比較
相關標準: PBKDF2
參考
- https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
- https://medium.com/@mpreziuso/password-hashing-pbkdf2-scrypt-bcrypt-1ef4bb9c19b3#.g50emg8le
- http://howtodoinjava.com/security/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples