2011-04-22 103 views
14

好吧,我知道這可能很簡單,但我似乎無法在任何地方找到直接的答案。比方說,我有以下幾點:什麼是第一個,鹽或哈希?

Password: "mypassword" 
Salt: 1234567 

是鹽析像做hash(password + salt)hash(password) + salt的想法?我的猜測是,只有前者纔有意義,但我只是想確保我不會錯過任何東西。

請原諒我的無知。

回答

17

你明白了,它是前者。

如果你只是連接鹽和散列,那麼攻擊者可以簡單地刪除「鹽」並使用彩虹表。通過對明文+鹽進行哈希處理,不能分解出鹽。

0

該鹽應該是散列計算的一部分

6

散列(密碼+鹽)。如果在散列之後連接鹽,級聯很容易逆轉,並且不會增加任何難度來反轉密碼上的散列(使用彩虹表)。

也就是說,一些系統可以同時執行兩個操作,例如, Django在數據庫中存儲salt $ hash(salt + password)。這很簡單,因此需要根據散列檢查密碼的每一條數據都在一個地方提供。

11

其實,這是salt + hash(salt+password)(鹽是散列計算的一部分 - 但你也必須保持它在清除)

+2

爲什麼你需要先放鹽?黑客會忽略它會不會毫無意義? – Diskdrive 2011-04-29 06:19:09

+0

您需要存儲它(明確),因爲沒有它,您將無法檢查密碼。 – leonbloy 2011-04-29 14:04:24

3

我添加這些鏈接到這個問題的完整性 - 鹹散列的這個話題需要廣泛瞭解主題,避免代價高昂的錯誤。

在這裏的答案中沒有完全表達的一個關鍵點是使用的每個密碼的唯一鹽的必要性。有關原因的詳細信息,請閱讀鏈接的項目。

爲什麼讓每一個獨特的鹽:在話題Salting Your Password: Best Practices?

全面概述:Salt Generation and open source software