如何安全的存儲密碼 - hash、salt 以及更多

轉載地址:http://www.oschina.net/question/28_57478


最近爆出的網站安全問題越來越多,甚至有部分網站的密碼泄露,這是一篇簡單的教程,教你如何更加安全的保存密碼。我這裏說的“安全”是指當密碼泄露以後,對方需要相當一段時間來破解以獲得明文密碼。


下面我列出了常用的密碼存儲手段,從不安全到安全: 
明文存儲 
hash 存儲,例如 MD5,SHA,SHA256 
hash 加鹽(salt)存儲 
使用 bit/key stretching 機制 

大家已經知道,即使是大型網站例如 Linked-In,存儲密碼也是簡單的 hash。我認爲這是一個嚴重的疏漏。我們有很多方法來加強密碼的存儲以防止暴力破解和 彩虹表。在這裏,我要大聲的說一遍,僅僅加鹽(salt)是不夠的! 

首先讓我們來看看不同的技術出現的時間: 
明文存儲:有史以來 
hash 存儲:20世紀70年代早期 
加鹽 hash:20世紀70年代晚期 
bit/key stretching: bcrypt 2002, scrypt 2009, PBKDF2 2009 

不同技術的耐破解程度


Technique / KDF Year Bruteforce Dictionnary RT GPU FPGA ASIC

Hash 1970 No No No No No No

Salted Hash 1976 No No Yes No No No

PBKDF2 * 2000 Yes Yes Yes Partial No No

Bcrypt 2002 Yes Yes Yes Yes** ?? No

Scrypt * 2009 Yes Yes Yes Yes** Yes Yes


RT - Rainbow Table 彩虹表

在一年內破解一個密碼的開銷

Technique / KDF 6 LL 8 LL 8 chars 10 chars
DES CRYPT < 1$ < 1$ < 1$ < 1$
MD5 < 1$ < 1$ < 1$ 1.1K$
MD5 CRYPT < 1$ < 1$ 130$ 1.1M$
PBKDF2 (100ms) < 1$ < 1$ 18k$ 160M$
bcrypt (95ms) < 1$ 4$ 130K$ 1.2B$
scrypt (64ms) < 1$ 150$ 4.8M$ 43B$
PBKDF2 (5.0s) < 1$ 29$ 920K$ 8.3B$
bcrypt (3.0s) < 1$ 130$ 4.3M$ 39B$
scrypt (3.8s) 900$ 610K$ 19B$ 175T$

解釋: 
  • "DES CRYPT" 和 "MD5 Crypt" 是加鹽的
  • "LL" : 小寫字母,例如"aeterws"
  • "chars" : 95 個可打印字符,例如"6,uh3y[a"
  • 括號中的數字是算法設置所需要的時間,跟 CPU 和循環此處都有關係。

 


發佈了48 篇原創文章 · 獲贊 5 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章