有趣的密碼加密策略,你知道自己的密碼如何在網站中存儲的嗎?

yne7 9年前發布 | 6K 次閱讀 密碼

哈希加密的概況

    早期也就是很早的時候,系統里可能直接存的就是用戶的明文密碼,密碼是什么就存什么,然后每次校驗直接匹配就好了.后來人們開始使用哈希進行加密,得到現在的普遍使用的密文.

    最簡單的基于密文的密碼存儲策略(通常可能是MD5加密方式)就是我下面畫的圖:

有趣的密碼加密策略,你知道自己的密碼如何在網站中存儲的嗎?

  • 哈希算法是一個單向的函數,將任意大小的數據轉換成統一長度的密文,并且無法被反向計算.并且每個不同數據通過哈希函數轉換成的結果都是不同的.

  • 程序中真正比對的是密文哈希值,只有相同才被授權.不相同也不要告知到底是用戶名錯誤還是密碼錯誤,給出一個模糊的提示就行,防攻擊者在不知道密碼的情況下,遍歷出可用的用戶名.

  • 不是所有的哈希函數都是安全的,適用于加密的.有些哈希函數是用于哈希表這類數據結構,方便快速查找的.適用于加密的有類似于:SHA256,SHA512,RipeMD之類的哈希函數.

  • 最后要說明,單純的哈希加密太容易破解了,從目前的狀況看它并不安全.


為何說單純的哈希加密并不安全?

    之所以說單純的哈希加密并不安全因為破解的方式有很多,鑒于現在計算機性能(CPU發展已經到了一個瓶頸,現在普通的筆記本性能幾乎就是20年前的超級計算機)的提升以及黑客技術的進步,很多網站都提供了破解哈希的功能.下面列舉出一些常用的破解方式:

  • 暴力破解(這是不可阻止的破解方式之一,在給定長度的情況下嘗試各種字符的組合,雖然效率非常低,但通過遍歷最終一定會得到密碼,相當于把所有的可能都嘗試一遍)

  • 字典攻擊(同樣是不可阻止的破解方式之一,相當于暴力破解的升級版,通過收集常用的單詞,詞組,密碼然后將所有的都存儲起來,根據這些更加接近的數據進行比對,碰運氣去猜)

  • 查表法(預先計算密碼字典中得每個密碼,然后把哈希值和對應密碼存儲到一個快插查詢的數據結構中,以后就查詢這個表就行了)

  • 彩虹表(這才是大殺器,說白了就是把一定長度的明文密碼以及對應的哈希密碼都存儲下來,然后按照查表法的方式進行破解)


傳說中讓彩虹表都無力的加鹽

    我們上面說到的幾種破解方式都是基于一個最基本的原則,所有密碼都以相同的方式進行哈希加密.也就是說如果兩個賬號明文密碼相同,他們哈希后得到的密文也是相同的.如果我們能通過一些'小手段'讓它們不同,那么破解的難度就是指數級的倍增了.

    具體的做法就是在密碼中加入一段"隨機化"的字符串,然后再進行哈希化.這樣就將原來的同樣明文映射到同樣密文的規則打亂了,其中混入的'隨機'字符串就是所謂的'鹽'.

有趣的密碼加密策略,你知道自己的密碼如何在網站中存儲的嗎?

    這些思想都不復雜,但是在真正的工作中大多數人還是會犯下一些"錯誤",使我們的料加的并不好,比如:

  • "鹽值"的長度太短(通常要和密文長度一樣才行)或者"鹽值"出現重復

  • 哈希函數進行嵌套或者組合使用(非常重要的一點,別相信自己發明的某種加密方式,使用由密碼學家研究出來的標準算法)

  • 盡量避免使用已經過時或者低端的哈希函數,例如: MD5,SH1等,推薦SH256,SH512等等.

  • "鹽值"的產生并不是一個隨意的rand()函數,要使用基于加密的偽隨機函數生成器,更加高度的隨機性.

來自:

 本文由用戶 yne7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!