密碼是用來進行鑑權(身份認證)一種手段,說白了就是證明你是誰。一般鑑權都可以總結為下面3種形式:
你知道什麼? (如密碼,密碼提示問題等)
你有什麼? (如信用卡,token卡等)
你是什麼?(如指紋識別,瞳孔識別等)
常見的針對密碼的攻擊方式有:
暴力破解(brute-force)
字典攻擊(dictionary attack)
彩虹表攻擊(rainbow table attacks)
暴力破解
暴力破解指的是嘗試密碼空間中所有的可能情況。字典攻擊
上面說了暴力搜尋空間巨大,然而大部分使用者選擇的密碼都是有一定規律的:如使用生日,姓名,單詞縮寫,**,以及以上各種方法的混合。如果把這些常見的密碼放到乙個檔案裡,破解密碼的時候就直接從這些常見的密碼中嘗試,這樣嘗試的空間和暴力破解相比就會小很多。這種儲存了許多常見密碼的
檔案就像是一本使用者常見密碼的字典,字典攻擊因此得名。
彩虹表
比查詢表的o(1)要慢一點。通俗一點說就是:彩虹表犧牲了一點計算速度,換來的好處是較少的空間儲存更多的密碼資料。舉個例子: 如果乙個查詢表裡需要
儲存所有的10個字元小寫字母的字典(至少需要儲存使用者名稱,密碼hash輸出),需要的磁碟空間為 26^10 * (10+16) / (2^40) ~= 3338t,如果改用彩虹表儲存,
那麼這個彩虹表可能只需要約300g的磁碟空間就能涵蓋99.9%的組合。
最簡單直觀的做法是將密碼明文儲存到資料庫。這種方式資料庫的一條記錄類似: 。
這種方式最簡單但無安全可言。黑客獲取了資料庫就活得了所有使用者資訊。因此直接儲存明文是不可取的,至少需要對明文做一些處理
先對明文密碼進行hash計算,將hash函式的輸出儲存到資料庫。這裡的hash是指密碼學中具有單向性和不可逆性的hash函式(如md5,sha1等),不是資料結構中的hash演算法。這種方式
的資料庫中記錄格式類似: 。這種方法比存明文要好很多,惡意使用者獲得了密碼資料庫以後不能直接得到使用者的密碼。這種方法的問題是:抵抗不了字典和
彩虹表攻擊,一旦黑客針對資料庫構造好彩虹表,就很容易破解了。因此,我們需要一種方法使惡意使用者預先構造字典和彩虹表的代價變大。
密碼學中的鹽是指一段隨機位元組串,通常和密碼一起作為hash函式的輸入。密碼加鹽後,資料庫記錄類似 ,這種方法有一些變種如:
或 ,本質都是一樣的。加鹽後的資料庫構造彩虹表需要的巨大儲存空間,
使得構造查詢表和彩虹表的攻擊方式失效。
大大增加構成字典和彩虹表的成本。
降低相同密碼hash值相同的概率。
關於鹽的使用有一點需要說明:加鹽的目的是為了增加提前構造字典和彩虹表的代價,並不是為了加密或增加密碼hash的計算複雜性。因此,鹽並不需要加密儲存,
通常是明文和使用者名稱一起儲存於資料庫的。
前面說了,密碼加鹽能有效的對抗提前構造字典和彩虹表的攻擊,但是對於暴力破解還是無能為力,對於單個使用者的密碼,如果黑客採用多台計算機平行計算或者
採用gpu等特殊硬體進行暴力破解,能很快的破解較弱的密碼。
因此,比較理想的密碼儲存方法要具備2點:
單次密碼儲存的計算要盡可能的慢,慢到對單個普通使用者的鑑權來說計算時間剛好可以接受,但是對於需要嘗試很多密碼組合的惡意使用者來說,計算代價將會大大增加。
可以動態的控制密碼計算過程的複雜性,這樣就可以應對摩爾定律下計算機計算能力越來越強的趨勢。
密碼的安全儲存目前正確的做法是使用自適應加鹽的方法進行儲存,具體的說是可以使用pbkdf2, bcrypt, scrypt中的任何一種。本文主要討論了如何安全的儲存密碼,
如果是保證使用者賬戶的安全,那麼除了保證密碼儲存安全之外,通常需要綜合使用下面的各種方法:
引導選擇強度較高的密碼
使用驗證碼
密碼驗證錯誤以後短時間鎖住賬號
敏感操作需要二次鑑權
使用two-factor驗證
加鹽密碼雜湊:如何正確使用
密碼破解之王:ophcrack彩虹表(rainbow tables)
漫話成語 謠言
良言一句三冬暖,惡語相加徹骨寒。比惡語更可怕的就是謠言!今天我們就一起來看幾個與謠言有關的成語與典故吧。1.三人成虎 釋義 三個人謊報城市裡有老虎,聽的人就信以為真。比喻說的人多了,就能使人們把謠言當作事實。典故 原文 戰國策 魏策二 龐蔥與太子質於邯鄲,謂魏王曰 今一人言市有虎,王信之乎?王曰 否...
漫話CLR 委託
委託,delegate,說白了也就是個語法糖.沒有他我們可以寫程式,有了他我們可以寫出更好的程式.delegate void feedback int value 方法簽名之前前加上 delegate 關鍵字,我們就定義了乙個最簡單的委託.但,事實上編譯器為我們做了另一件事 建立委託類.人肉解壓縮一...
系統優化的漫話
最近在乙個系統功能的優化。這個是乙個把資料校對的部分給優化一下。目前的背景是相當的慘,幾萬資料要通過介面重新整理幾天。這個實在不能忍了。開始接手優化。一邊理解業務,一邊優化。裡邊多的是可以發揮優化的餘地,優化了幾處的sql。也把業務流程給優化了一下。主流程中,如果主要部分沒有資料,那麼就不要再查詢詳...