自從Unix流行以來,存儲密碼的正確方法是附加一個隨機值(SAT)并對其進行散列。把鹽留給你以后可以得到的地方,但你希望壞人不會得到它。
這有一些好的效果。首先,壞人不能僅僅列出諸如“Password 1”這樣的預期密碼,將它們散列到彩虹表中,然后遍歷密碼文件尋找匹配的密碼。如果你有一個很好的兩字節鹽,他們必須為每個預期密碼生成65,536個值,這使得彩虹表變得不那么實用了。第二,如果您可以防止查看您的密碼文件的壞人使用SALT,那么計算可能的值就會變得困難得多。第三,你讓壞人無法確定一個人是否在不同的網站上使用相同的密碼。
為了做到這一點,你會產生一個隨機的鹽。這應該以均勻的概率在期望的范圍內生成每一個數字。這并不難;一個簡單的線性同余隨機數生成器會做得很好。
如果你有復雜的計算來制造鹽,那你就錯了。如果你根據密碼計算它,你就錯了。在這種情況下,您所做的只是使散列復雜化,而不是在功能上添加任何鹽分。
沒有一個擅長安全的人會依賴于隱藏一個算法?,F代密碼學的基礎是經過廣泛測試的算法,為了進行廣泛的測試,它們必須是眾所周知的。通常,人們發現使用標準算法比使用自己的算法更安全,并且希望它是好的。不管代碼是否是開源的,壞人仍然有可能分析程序所做的事情。