2015-10-04 14 views
0

,用戶密碼必須存儲爲散列而不是加密,因爲攻擊者無法從其散列中推導出密碼,而他可以推導出密碼從它的加密中,如果他能夠訪問加密密鑰。據我所知,每個系統或服務器如何獲得不同的散列函數來存儲密碼

現在,顯然每個系統都必須使用不同的散列函數來散列其密鑰。我的問題是,他們如何創建這些不同的散列函數?他們是否使用標準哈希函數並用大鍵來填充它?如果是這樣,如果攻擊者能夠訪問該密鑰,那麼攻擊者是否能夠推斷密碼,使其與加密一樣?

+0

請在發佈「新」問題之前搜索Internet和StackOverflow存檔。 – Prune

+0

我正在投票結束這個問題,因爲這不是關於編程。 [security.se]更適合這類問題。請事先查看其他問題。 –

+0

不要混淆加密和哈希。這是兩種不同的方法。提示:迭代哈希函數採用隨機鹽。 –

回答

0

現在,很明顯每個系統必須使用不同的散列函數哈希其鍵

不,他們沒有。

如果你的密碼是s3cr3t,那麼它將具有相同的哈希值在很多服務器的數據庫中,遺憾的是可能A4D80EAC9AB26A4A2DA04125BC2C096A

的方式,使這個吸吮少是生成每個口令的隨機碼,所謂的鹽,這樣的s3cr3t在服務器1散列很可能會比s3cr3t Server2上的哈希不同:hashFunction('s3cr3t' + 'perUserSalt')

使用bcrypt,scrypt,或只使用PBKDF2密碼存儲。

1

加密哈希函數總是不可逆的,這是他們的目的。即使灰心的「不安全」的功能,如MD5和SHA1是不可逆的,他們不需要鑰匙。問題在於,你可以通過暴力破解找到可能的匹配密碼(超過10 Giga MD5/sec)。

你提到的「大關鍵」可能是鹽。您會生成隨機鹽並在計算中使用此鹽。將此鹽與散列一起存儲是安全的,因爲它的目的是防止攻擊者構建一個單獨的彩虹表並一次爲所有密碼查找匹配項。相反,他必須分別爲每種鹽建立一個彩虹桌,這些桌子是不可行的。

速度問題只能通過迭代散列函數來克服。成本因素定義了計算散列的次數。推薦的算法是BCrypt,PBKDF2和SCrypt。

相關問題