我是新來加密和我有一個疑問。這可能是一個愚蠢的問題,但我會問。我知道SHA1不可解密。但是一個快速的想法是,如果黑客創建一個包含兩列的表 - 非加密密碼及其SHA1加密值。並且這些行包含他在6個月內使用程序生成的所有字符組合(例如9億條記錄)的密碼。如果他獲得了SHA1加密密碼,他不能輕易獲得未加密的密碼嗎?
如果是,是否有解決方案來防止這種情況?
在此先感謝。
我是新來加密和我有一個疑問。這可能是一個愚蠢的問題,但我會問。我知道SHA1不可解密。但是一個快速的想法是,如果黑客創建一個包含兩列的表 - 非加密密碼及其SHA1加密值。並且這些行包含他在6個月內使用程序生成的所有字符組合(例如9億條記錄)的密碼。如果他獲得了SHA1加密密碼,他不能輕易獲得未加密的密碼嗎?
如果是,是否有解決方案來防止這種情況?
在此先感謝。
您所描述的攻擊稱爲rainbow table。是的,它確實是短密碼的有效擔憂 - 因此是密碼最小長度的典型安全要求。但是,表的大小需要隨密碼長度呈指數級增長;例如,對於每個附加字符,字母數字區分大小寫的密碼將使表增加62倍。因此,計算超過一定的長度變得難以處理。 (僅8個字符都會引起周圍218 萬億組合。)
你可以採取另一種預防措施是salt你的密碼(這可以簡單地涉及計算其散列之前追加一個字符串常量每個密碼)。這樣,即使攻擊者可以訪問預先計算好的彩虹表,它也不會對付你的散列;必須爲每種鹽計算一個新的彩虹表。
是的。這就是爲什麼它重要的鹽你的散列。只要您的食鹽已經正確醃製,您所談論的表格類型僅適用於單一密碼。
詞典攻擊,如你所描述的,可以通過鹽析散列來防止。從本質上講,你迫使明文的長度和複雜度超出了正在使用的字典的範圍。
實現也很簡單。一種方法是維護一個密碼,如「0shunF1ave」並將其附加到您的明文。因此,不是存儲SHA1(密碼),而是存儲SHA1(「0shunF1ave」+密碼)。當你驗證密碼時,你對像SHA1(「0shunF1av1」+候選人)這樣的候選人執行相同的哈希到最初存儲的哈希,並查看它們是否匹配。
防止彩虹表攻擊的常用解決方案是使用Salt。
雖然我會加上,但SHA1並不被認爲是非常安全的。強大的計算機使用強力找到解密的密碼是相當容易的。爲了存儲密碼,建議使用像bcrypt或PBKDF2這樣的慢哈希算法。
您的9億條記錄的價值來自哪裏?例如,8個字母或數字的密碼給出2.18 * 10^14的可能性。 –
不要嚴重考慮這個數字:D我只是用它來說黑客在他的分貝中有所有密碼組合。 – Matt
你所指的是[彩虹表](http://en.wikipedia.org/wiki/Rainbow_table)。除此之外,這個問題是重複的。 –