天天看點

Using Improved d-HMAC for Password Storage 使用改進的d-HMAC進行密碼存儲

翻譯自:  Computer and Information Science; Vol. 10, No. 3; 2017

ISSN 1913-8989 E-ISSN 1913-8997

Published by Canadian Center of Science and Education

密碼是用于認證授權使用者的最常見通路控制工具。密碼的基本定義是一系列隻有使用者才能記住和知道的秘密字元,用于登入任何類型的資訊系統(Forouzan,2008)。

密碼的安全性意味着它必須能夠抵抗字典攻擊和暴力攻擊,并且不能被攻擊者猜測。為了對各種攻擊具有如此強大的密碼抵抗力(Hitachi,2016):1)密碼必須由具有不同組合的大字母組成,如小寫字母、大寫字母、數字和特殊字元;2)密碼長度應盡可能長,并且3)密碼的複雜度必須非常高。

大多數人認為擁有一個強大的、不洩露的、不可猜測的密碼可以保護他們,但他們錯了!!因為許多人都知道,黑客能夠用密碼竊取數百萬個帳戶的攻擊不是密碼強度的結果,而是這些密碼的存儲方式(Hitachi,2016)。密碼存儲是整個密碼通路控制系統的重要組成部分。用于此存儲的技術必須設計為即使密碼存儲系統已受損,攻擊者也不可能得出密碼結論。

密碼存儲的曆史

refer: ​​https://blog.csdn.net/dreaming9420/article/details/123622811​​

  1. 明文存儲 c = (p) ,
  2. 對稱加密存儲
Using Improved d-HMAC for Password Storage 使用改進的d-HMAC進行密碼存儲
  1. 使用MD5, SHA256或其它算法哈希後存儲 c = Hash (p)
  • MD5算法的原理可簡要的叙述為:MD5碼以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,算法的輸出由四個32位分組組成,将這四個32位分組級聯後将生成一個128位散列值。
  • 假如你設定的密碼是123456,使用MD5後那資料庫中存儲的就是4QrcOUm6Wau+VuBX8g+IPg==,當使用者登陸的時候,會把使用者輸入的密碼執行MD5後再和資料庫就行對比,判斷使用者身份是否合法,這種加密算法稱為散列(哈希)。
  • 但是這種方式使用同一個密碼進行哈希得到的密文始終是一樣的,考慮到多數人所使用的密碼為常見的組合,攻擊者可以将所有密碼的常見組合進行單向哈希,得到一個密文組合,然後與資料庫中的摘要進行比對即可獲得對應的密碼,這個密文組合也被稱為彩虹表(rainbow table)。
  1. 加鹽後哈希存儲 c = Hash (p || salt)
不能在代碼中寫死鹽,且鹽需要有一定的長度(鹽寫死太簡單的話,可能被注冊幾個賬号反推出來)
每一個密碼都有獨立的鹽,并且鹽要長一點,比如超過 20 位。(鹽太短,加上原始密碼太短,容易破解)
最好是随機的值,并且是全球唯一的,意味着全球不可能有現成的彩虹表給你用。      
  1. 使用慢加密算法BCrypt, PBKDF2,SCrypt存儲 c = Hash (“work factor”,p || salt)
  2. 使用 d-HMAC存儲 d-HMACK(m) = h(K+ ⊕ d-opad, h(K+ ⊕ d-ipad, m))

d-HMAC算法圖解