摘要:通俗一點說就是彩虹表犧牲了一點計算速度,換來的好處是較少的空間存儲更多的密碼數(shù)據(jù)。關于鹽的使用有一點需要說明加鹽的目的是為了增加提前構(gòu)造字典和彩虹表的代價,并不是為了加密或增加密碼的計算復雜性。
背景
密碼是用來進行鑒權(quán)(身份認證)一種手段,說白了就是證明你是誰。一般鑒權(quán)都可以總結(jié)為下面3種形式:
你知道什么? (如密碼,密碼提示問題等)
你有什么? (如信用卡,token卡等)
你是什么?(如指紋識別,瞳孔識別等)
常見攻擊方式常見的針對密碼的攻擊方式有:
暴力破解(Brute-force)
字典攻擊(Dictionary Attack)
彩虹表攻擊(Rainbow table attacks)
暴力破解
暴力破解指的是嘗試密碼空間中所有的可能情況。
字典攻擊
上面說了暴力搜索空間巨大,然而大部分用戶選擇的密碼都是有一定規(guī)律的:如使用生日,姓名,單詞縮寫,電話,以及以上各種方法的混合。如果把這
些常見的密碼放到一個文件里,破解密碼的時候就直接從這些常見的密碼中嘗試,這樣嘗試的空間和暴力破解相比就會小很多。這種存儲了許多常見密碼的
文件就像是一本用戶常見密碼的字典,字典攻擊因此得名。
彩虹表
彩虹表:彩虹表是計算機科學時間/空間權(quán)衡的典型體現(xiàn)。起核心思想和查找表是類似的,只是相對于查找表,彩虹表需要的存儲空間相對較小,查找速度
比查找表的O(1)要慢一點。通俗一點說就是:彩虹表犧牲了一點計算速度,換來的好處是較少的空間存儲更多的密碼數(shù)據(jù)。舉個例子: 如果一個查找表里需要
存儲所有的10個字符小寫字母的字典(至少需要存儲用戶名,密碼hash輸出),需要的磁盤空間為 26^10 * (10+16) / (2^40) ~= 3338T,如果改用彩虹表存儲,
那么這個彩虹表可能只需要約300G的磁盤空間就能涵蓋99.9%的組合。
最簡單直觀的做法是將密碼明文存儲到數(shù)據(jù)庫。這種方式數(shù)據(jù)庫的一條記錄類似:
這種方式最簡單但無安全可言。黑客獲取了數(shù)據(jù)庫就活得了所有用戶信息。因此直接存儲明文是不可取的,至少需要對明文做一些處理
先對明文密碼進行hash計算,將hash函數(shù)的輸出存儲到數(shù)據(jù)庫。這里的hash是指密碼學中具有單向性和不可逆性的hash函數(shù)(如MD5,SHA1等),不是數(shù)據(jù)結(jié)構(gòu)中的hash算法。這種方式
的數(shù)據(jù)庫中記錄格式類似:
彩虹表攻擊,一旦黑客針對數(shù)據(jù)庫構(gòu)造好彩虹表,就很容易破解了。因此,我們需要一種方法使惡意用戶預先構(gòu)造字典和彩虹表的代價變大。
密碼學中的鹽是指一段隨機字節(jié)串,通常和密碼一起作為hash函數(shù)的輸入。密碼加鹽后,數(shù)據(jù)庫記錄類似
使得構(gòu)造查找表和彩虹表的攻擊方式失效。
大大增加構(gòu)成字典和彩虹表的成本。
降低相同密碼hash值相同的概率。
關于鹽的使用有一點需要說明:加鹽的目的是為了增加提前構(gòu)造字典和彩虹表的代價,并不是為了加密或增加密碼hash的計算復雜性。因此,鹽并不需要加密存儲,
通常是明文和用戶名一起存儲于數(shù)據(jù)庫的。
前面說了,密碼加鹽能有效的對抗提前構(gòu)造字典和彩虹表的攻擊,但是對于暴力破解還是無能為力,對于單個用戶的密碼,如果黑客采用多臺計算機并行計算或者
采用GPU等特殊硬件進行暴力破解,能很快的破解較弱的密碼。
因此,比較理想的密碼存儲方法要具備2點:
單次密碼存儲的計算要盡可能的慢,慢到對單個普通用戶的鑒權(quán)來說計算時間剛好可以接受,但是對于需要嘗試很多密碼組合的惡意用戶來說,計算代價將會大大增加。
可以動態(tài)的控制密碼計算過程的復雜性,這樣就可以應對摩爾定律下計算機計算能力越來越強的趨勢。
總結(jié)密碼的安全存儲目前正確的做法是使用自適應加鹽的方法進行存儲,具體的說是可以使用pbkdf2, bcrypt, scrypt中的任何一種。本文主要討論了如何安全的存儲密碼,
如果是保證用戶賬戶的安全,那么除了保證密碼存儲安全之外,通常需要綜合使用下面的各種方法:
引導選擇強度較高的密碼
使用驗證碼
密碼驗證錯誤以后短時間鎖住賬號
敏感操作需要二次鑒權(quán)
使用two-factor驗證
參考鏈接加鹽密碼哈希:如何正確使用
密碼破解之王:Ophcrack彩虹表(Rainbow Tables)
WilsonLiu"s blog首發(fā)地址:http://blog.wilsonliu.cn
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/80075.html
摘要:軟件實現(xiàn)的是偽隨機數(shù)。有限狀態(tài)機不能產(chǎn)生真正的隨機數(shù)的。復聯(lián)中,滅霸打了指響之后,復仇者聯(lián)盟中存活和死亡的名單其實并不是隨機的。可見,滅霸的指響抹除過程并不是隨機的。綜上,滅霸的指響抹除過程不符合隨機性不可預測性以及不可復現(xiàn)性。showImg(https://user-gold-cdn.xitu.io/2019/5/7/16a91fc63239db4d);周末,陪女朋友去電影院看了《復仇者聯(lián)...
摘要:基因追本溯源在編程語言的歷史長河中,曾經(jīng)出現(xiàn)過很多編程語言。的歷史繼承年,網(wǎng)景公司招募了,目的是將編程語言嵌入到中。網(wǎng)景公司決定,他們想創(chuàng)建的腳本語言將補充,并且應該有一個類似的語法,排除采用,,或等其他語言。 引子: 很多時候,當我要字符串截取時,我會想到substr和substring的方法,但是具體要怎么傳參數(shù)時,我總是記不住。哪個應該傳個字符串長度,哪個又應該傳個開始和結(jié)尾的下...
摘要:基因追本溯源在編程語言的歷史長河中,曾經(jīng)出現(xiàn)過很多編程語言。的歷史繼承年,網(wǎng)景公司招募了,目的是將編程語言嵌入到中。網(wǎng)景公司決定,他們想創(chuàng)建的腳本語言將補充,并且應該有一個類似的語法,排除采用,,或等其他語言。 引子: 很多時候,當我要字符串截取時,我會想到substr和substring的方法,但是具體要怎么傳參數(shù)時,我總是記不住。哪個應該傳個字符串長度,哪個又應該傳個開始和結(jié)尾的下...
摘要:策略策略,指的是可以實現(xiàn)目標的方案集合,在某些特定情況下,策略之間是可以相互替換的。如何計算金額我們先拿點外賣中會員折扣活動舉例子來說明一下吧。這就是策略模式。策略模式提供了管理相關的算法族的辦法。showImg(https://user-gold-cdn.xitu.io/2019/5/13/16aaf673fde1b546);?周末無事,窩在家里面看《權(quán)力的游戲第八季》,看的很是津津有味,...
閱讀 2804·2021-11-19 11:35
閱讀 2582·2021-11-02 14:40
閱讀 1396·2021-09-04 16:48
閱讀 3009·2019-08-30 15:55
閱讀 1753·2019-08-30 13:11
閱讀 1956·2019-08-29 11:12
閱讀 1088·2019-08-27 10:52
閱讀 3157·2019-08-26 18:36