無論何時只要口令改變,隨機數就改變。
隨機數以未加密的方式存放在口令檔案中,這樣每個人都可以讀。
不再只是儲存加密過的口令,而是先將口令和隨機數連線起來然後一同加密,加密後的結果放在口令檔案中。
ps:這裡的口令應該指的是password
由於相同的密碼經過雜湊之後的密文是相同的,當儲存使用者密碼的資料庫洩露後,攻擊者會很容易便能找到相同密碼的使用者,從而降低了破解密碼的難度。因此,在對使用者密碼進行加密時,需要考慮對密碼進行掩飾,即使是相同的密碼,也應該要儲存為不同的密文,即使使用者輸入的是弱密碼,也需要考慮進行增強,從而增加密碼被攻破的難度,而使用帶鹽的加密hash值便能滿足該需求。
可以將 salt 放到 password 前面作為字首或放到 password 後面作為字尾得到新的字串ps,即 ps = password 和 salt 的組合串;
密碼密文passwordhash = hash加密函式(ps );
將使用者名稱、密碼密文 passwordhash 和鹽值 salt 一起儲存到資料庫中。
這樣,因為salt 是隨機生成的,所以就算兩個完全相同的password所產生的salt也是不同的。
從資料庫中取出當前使用者密碼當初加密時使用的鹽值salt
得到本次輸入的密碼passwordcur和鹽值salt的組合字串ps
得出本次輸入密碼的密文passwordhashcur= hash加密函式(ps)
比較 passwordhashcur 和使用者最初設定的密碼密文 passwordhash 是否一致,如果一致,則校驗成功,否則校驗失敗。
常用的密碼攻擊方式有字典攻擊、暴力破解、查表法、反向查表法、彩虹表等。
對字典攻擊和暴力破解,攻擊者均採用逐密碼嘗試的方式,目前沒有很好的手段來阻止字典攻擊和暴力破解攻擊,只能是想辦法讓這兩種攻擊方式變得相對低效一些,而相同的密碼產生不同的hash值便能讓攻擊者針對每乙個hash值都需要從頭進行嘗試,從而使攻擊變得更加低效。
對查表法、反向查表法和彩虹表攻擊方式,攻擊者需要提前準備好包含密碼和密碼hash值的密碼表,然後根據該錶和使用者密碼資料庫進行批量匹配,從而達到攻破密碼的目的;而如果我們在加密時,給每個密碼附加了不同的隨機值,這樣每個密碼對應的hash值也會不同,這樣攻擊者在準備密碼表時,就必須要將最基本的密碼和使用者密碼資料庫中的鹽值進行笛卡爾積後再計算hash值,鹽值越多,攻擊者需要準備的表量越大,這樣對於攻擊而言,就變得有些得不償失了。
由此可見,如果想要完全杜絕密碼破解是不可能的,但是通過加鹽可以使得(password+salt)的長度變長,這樣攻擊者需要準備的表量越大,當表特別大的時候,攻擊者在有限的時間內無法破解,而得不償失。其實好多加密的方法的本質就是複雜化,目的只是阻止,而無法做到真正的杜絕。
加鹽的目的是為了增加攻擊者破解的難度,那麼在加鹽的時候要注意以下幾點,否則加鹽的意義也不會太大。鹽值不能太短。如果鹽值只有少數兩三位甚至一兩位的話,攻擊者完全可以窮舉所有可能的鹽值;關於鹽值長度的乙個經驗值是長度至少要和hash加密函式的返回值長度保持一致。
鹽值不能固定。如果系統使用了固定的鹽值,那麼和不加鹽相當於是一回事了,攻擊者完全可以使用該固定的鹽值提前準備密碼表;另外,相同密碼對應的hash值仍然是一樣的,仍然無法對密碼相同這一事實進行掩飾。
不要使用能提前預知的值作為鹽值。如果鹽值能提前得知或提前推斷出,攻擊者也完全可以根據提前預知的鹽值準備密碼表,從而對破解的難度也增加不了多少。
每一次修改密碼重新計算hash值時,要重新生成新的鹽值,不要使用上次密碼對應的鹽值。因為如果使用者密碼洩露之後,鹽值相應的也就洩露了,使用者修改密碼時,如果還沿用原來的鹽值,攻擊者也仍然可以根據上次的鹽值提前準備密碼表,從而使攻破可能性變得更高了。
鹽值加密介紹
簡單說就是為了使相同的密碼擁有不同的hash值的一種手段 就是鹽化 md5自身是不可逆的 但是目前網路上有很多資料庫支援反查詢 如果使用者密碼資料庫不小心被洩露 黑客就可以通過反查詢方式獲得使用者密碼 或者對於資料庫中出現頻率較高的hash碼 即很多人使用的 進行暴力破解 因為它通常都是弱口令 鹽值...
鹽值加密介紹
簡單說就是為了使相同的密碼擁有不同的hash值的一種手段 就是鹽化 md5自身是不可逆的 但是目前網路上有很多資料庫支援反查詢 如果使用者密碼資料庫不小心被洩露 黑客就可以通過反查詢方式獲得使用者密碼 或者對於資料庫中出現頻率較高的hash碼 即很多人使用的 進行暴力破解 因為它通常都是弱口令 鹽值...
鹽加密快速上手
一 鹽加密是什麼?加鹽加密是一種對系統登入口令的加密方式,它實現的方式是將每乙個口令同乙個叫做 鹽 salt 的n位隨機數相關聯。無論何時只要口令改變,隨機數就改變。隨機數以未加密的方式存放在口令檔案中,這樣每個人都可以讀。不再只儲存加密過的口令,而是先將口令和隨機數連線起來然後一同加密,加密後的結...