來給密碼加點“鹽”
來給密碼加點“鹽”
背景
什么是“鹽”
Salt),在密碼學(xué)中,是指通過在密碼任意固定位置插入特定的字符串,讓散列后的結(jié)果和使用原始密碼的散列結(jié)果不相符,這種過程稱之為“加鹽”。為什么要加“鹽”
彩虹表
彩虹表是一個用于加密散列函數(shù)逆運算的預(yù)先計算好的表, 為破解密碼的散列值(或稱哈希值、微縮圖、摘要、指紋、哈希密文)而準(zhǔn)備。一般主流的彩虹表都在100G以上。這樣的表常常用于恢復(fù)由有限集字符組成的固定長度的純文本密碼。這是空間/時間替換的典型實踐, 比每一次嘗試都計算哈希的暴力破解處理時間少而儲存空間多,但卻比簡單的對每條輸入散列翻查表的破解方式儲存空間少而處理時間多。使用加salt的KDF函數(shù)可以使這種攻擊難以實現(xiàn)。彩虹表是馬丁·赫爾曼早期提出的簡單算法的應(yīng)用。
—— 摘自《百度百科》
用例子來說明加“鹽”的意義
原始對照
| uid | username | password |
| 100 | Jeremy | 123456 |
| 101 | Melissa | 654321 |
進階的設(shè)計
| uid | username | password |
| 100 | Jeremy | E10ADC3949BA59ABBE56E057F20F883E |
| 101 | Melissa | C33367701511B4F6020EC61DED352059 |
注:上面password列存儲的是經(jīng)過MD5散列計算得出的32位大寫的計算結(jié)果
MD5(123456) = E10ADC3949BA59ABBE56E057F20F883E
MD5(654321) = C33367701511B4F6020EC61DED352059
?密碼破解的利器——彩虹表(rainbow table) https://www.jianshu.com/p/732d9d960411
加“鹽”的設(shè)計
| uid | username | salt | password |
| 100 | Jeremy | 9eb8fd | 5830FA2FC5AF55D71363A9956387EE63 |
| 101 | Melissa | 7fb9ek | C33367701511B4F6020EC61DED352059 |
對上表的解讀:
?上表中的 salt 是一個隨機的6位字符串?password 的算法變更為 MD5( 密碼明文 + salt )?MD5("123456" + "9eb8fd") = 5830FA2FC5AF55D71363A9956387EE63?MD5("654321" + "7fb9ek") = D925CC53A219768B128AE52DD2C3AFFD
?1234569eb8fd 末尾加鹽?9eb8fd123456 頭部加鹽?1239eb8fd456 任意位置插入鹽?129eb4568fd 任意位置分散插入鹽?1234df8be956 任意位置倒序加鹽
MD5(MD5(password + salt) + salt)。正因為如此,多種的可能性極大的增加了破譯的難度。最后
歡迎關(guān)注我的公眾號“須彌零一”,原創(chuàng)技術(shù)文章第一時間推送。
