萬盛學電腦網

 萬盛學電腦網 >> 網絡應用技術 >> 安全地存儲密碼的方法

安全地存儲密碼的方法

  使用 bcrypt

  用 bcrypt、用 bcrypt、用 bcrypt、用 bcrypt、用 bcrypt、用 bcrypt、用 bcrypt、用 bcrypt、用 bcrypt (重要的話就是要多多地重復幾次)……

  為什麼不用 {MD5、 SHA1、 SHA256、 SHA512、 SHA-3 等加密算法}?

  這些都是通用的hash函數,設計的初衷是為了盡可能快的計算大量數據的摘要。這意味著它們在保證數據完整性方面非常優秀但是對於存儲密碼則十分糟糕。

  現代的服務器計算 MD5 的哈希值速度大概是每秒330MB。如果你的用戶密碼滿足小寫、數字字母混合、6個字符長這幾個條件,你就可以在40秒內窮舉出該密碼。

  完全不需要其他的投入。

  如果你願意花費2000美元和一到兩周的時間來挑選一塊支持 CUDA 的顯卡,那你可以搭建一個小型的、每秒計算700,000,000個密碼的超級計算機集群。估計你可以以每秒10%的速度來破解那些密碼。

  加鹽也救不了你

  注意了,非常重要的一點:hash加鹽對於字典攻擊和暴力破解無效。你可以用粗鹽,或許多的鹽,甚至是人工開采,陰涼的,有機的喜馬拉雅粉晶鹽。但這都無法影響到攻擊者破解你密碼的速度。

  加鹽與否,只要你用了為速度而設計的通用哈希函數,你就會受到影響。

  bcrypt 解決了這些問題

  怎麼做呢?從根本上說,是因為它的(計算速度可以)慢到令人發指。它由 Blowfish 加密算法演變而來,並引入了功系數(work factor),以便讓你能決定該哈希函數的計算強度。基於以上原因,bcrypt 可以緊隨摩爾定律的腳步。計算機發展更快,你也可以增加功系數來讓哈希更難計算。

  比起 MD5,bcrypt 的計算強度能達到多大呢?這就要看功系數了。把功系數設為12情況下,在我的電腦上用 bcrypt 哈希 yaaa 這個密碼大概要0.3秒。另一方面,用MD5 來處理要少於1微秒。

  你的密碼可能不需要那麼高的安全級別,而需要更快的運算速度。幸好,bcrypt允許你在速度和安全之間進行平衡。

copyright © 萬盛學電腦網 all rights reserved