我剛剛讀了一些關於使用鹽的,我一直在讀的例子給出了加入鹽的哈希之前的密碼,以防止字典攻擊。但是我真的不明白這有什麼幫助 - 如果攻擊者可以訪問密碼的散列(正如他們在我讀過的例子中所做的那樣),他們很可能也會訪問salt 。 因此,在運行字典之前,攻擊者是不是可以預先計算並將鹽加到字典中的每個項目,以查看它是否與散列匹配?所以他們不得不遍歷字典不止一次,這似乎不是一個保護增強?
回答
一個字典攻擊是攻擊下,攻擊者需要密碼,可能是由情形產生/概率有序的大名單,並應用算法爲每次它,檢查的結果。
如果密碼被淹沒,如果攻擊者擁有鹽(通常假定的),那麼這種攻擊仍然是可能的(並且成本不高):只需在算法中輸入salt即可。
什麼是鹽保護,是彩虹桌。 A 彩虹表是一個包含明文對(例如密碼)和相應散列對(通過散列排序)的表。給定散列,這樣的表允許簡單查找密碼。
產生彩虹表是一個昂貴的步驟(取決於用作輸入的字典的大小),但你可以使用它沒有任何代價後來因爲要查找儘可能多的密碼。
由於鹽可以防止這種情況發生,因爲您現在需要每種鹽的單獨表格。即使使用簡單的Unix密碼的2字母鹽,這已經是3,844的因素。現代密碼哈希算法使用一個更大的鹽(例如bcrypt使用128位的鹽,它給出了2 的一個因素。)
爲了防止字典攻擊,同樣,你將使用一個慢哈希算法,而不是像簡單的MD5或SHA1/SHA2這樣的快速算法。 Bcrypt就是這樣一種算法(具有可配置的工作因子),同一作者後來提出了scrypt(這不僅需要很多時間,還需要大量內存,而攻擊者往往沒有處理能力那麼多)。
字典攻擊是基於字典中的單詞。通過添加一個隨機鹽,你不再有字典單詞。因此,基於字典單詞的密碼哈希表將不會有助於破解密碼。
如果你知道字典的內容,並且你知道salt,那麼附加到字典的salt就是一個新的字典,字典前綴的salt是另一個新的字典。因此,你現在知道兩本字典沒有?或者是有時散佈在密碼中的鹽? – Gruntcakes
對於UNIX系統上的/ etc/passwd,密碼前面有兩個字符。相同的兩個字符存儲在密碼文件的值的開頭。當用戶設置密碼時使用隨機鹽,因此「密碼」變爲「azPASSWORD」,散列值爲(說)az12345。然後,當用戶嘗試登錄時,輸入「PASSWORD」,系統知道使用「az」作爲鹽。即使鹽只有a-zA-Z0-9,你的字典仍然是(10 + 26 + 26)^ 2 = 3,844倍大。 –
BiscutWoofington在正確的軌道上,Teddy的答案是錯誤的。你可以簡單地修改你選擇的破解引擎,實際上所有的都是開源的,可以附加salt值,你有魔力。醃製的目的是爲了消除預先計算的彩虹表的威脅,可以快速搜索,現在我們生活在EC2和GPU並行化的時代,每個需要今天破解密碼的人都可以這麼做,但無論如何,它們都是可笑的。 –
1-您不能使用彩虹表破解哈希
2 - 如果兩個用戶具有相同的密碼,如果醃製的哈希會有所不同(所以它很難趕上普通密碼)
它通過增加密碼文件中可能的答案數量來增加他們必須做的工作。
執行字典攻擊的一種方法是掃描密碼文件。如果沒有鹽,並且您看到「DFGE $%$%£TEW」,那麼您知道密碼是「PASSWORD」。加鹽意味着你必須使用一個更大的字典,其中包含所有可能的鹽類的「PASSWORD」的值,或者你必須花費精力讀取鹽分並加密,這會降低你的速度。它不再是一個簡單的搜索。
在多個用戶選擇相同密碼的情況下,鹽也有幫助。尤其是在過去,所有用戶都可以讀取密碼文件,但是如果其他用戶使用的密碼與您的密碼相同,或者密碼與您知道的密碼相同,這種情況並不明顯。
你所描述的「字典」通常被稱爲「彩虹桌」。字典(用於字典攻擊)僅僅是可能/可能密碼的一長串列表(沒有它們的哈希值)。你仍然可以使用這樣的列表來攻擊一個鹹味的密碼,它比彩虹桌面攻擊慢得多(但仍然比蠻力更快)。 –
其實鹽不能防止字典的攻擊。它具有以下好處:
- 增加打破它的計算成本,因爲對於攻擊者的每個密碼,攻擊者需要嘗試使用所有可能的鹽進行哈希處理。
- 防止具有相同密碼的兩個用戶也具有相同的散列。這樣一來,即使在同一文件中存在相同的密碼(密碼的哈希總是不同),攻擊者也必須明確地破解所有密碼。
每個salt值都需要一個不同的字典,因此每個不使用鹽的數據庫都可能被同一個字典攻擊。
在沒有任何鹽的攻擊者可以只使用一個現成的,貨架 預先計算的字典,其中有很多。
如果你的整個數據庫有一個鹽,那麼他們需要 創建一個特定於你的數據庫的字典。
如果每個用戶記錄都有它自己的salt,現在他們需要爲每個用戶創建一個1 字典。
- 1. 鹽可以防止字典或蠻力攻擊?
- 2. 如何防止XXE攻擊
- 3. 防止XSS攻擊
- 4. 防止XSS攻擊
- 5. 字典攻擊
- 6. 如何防止二階SQL攻擊?
- 7. 如何防止重播攻擊?
- 8. 如何防止黑客攻擊tomcat?
- 9. 如何防止以下CSRF攻擊Oauth2?
- 10. jinja2如何防止XSS攻擊?
- 11. PHP:如何完全防止XSS攻擊?
- 12. 如何防止暴力攻擊?
- 13. 你如何防止特定CSRF攻擊
- 14. 攻擊MySQL - 以及如何防止它?
- 15. django admin如何防止蠻力攻擊?
- 16. 防止xss攻擊/注入
- 17. 防止數據庫攻擊
- 18. 防止Javascript和XSS攻擊
- 19. CakePHP的:防止XSS攻擊
- 20. Json.Net Wrapper防止Xss攻擊
- 21. 防止MDX注入攻擊
- 22. angularjs防止XSS攻擊
- 23. 防止輸入型攻擊
- 24. 防止重複blockchain攻擊
- 25. 阻止IP地址,防止DoS攻擊
- 26. 哈希鹽有沒有其他用途比防止彩虹表攻擊?
- 27. Android防止人爲攻擊SSL中間人攻擊
- 28. 防止類似於PHP的DoS攻擊的蠻力攻擊
- 29. 如何防止或阻止拒絕收入攻擊?
- 30. 速率限制Django管理登錄與Nginx的防止字典攻擊
這是否意味着鹽可能不是一個隨機的字符串。例如,如果我存儲用戶密碼,我可以使用用戶名爲salt目的:md5(密碼+用戶名)?這將防止彩虹桌,我可以通過不儲存鹽來保留一些空間。 – alexpods
@alexpods這適用於某些攻擊場景,但不適用於所有攻擊場景 - 例如現在在不同的應用程序(網站)中使用相同的用戶名 - 密碼組合會產生相同的散列。 (另外,請不要使用任何東西的MD5。) –
感謝您的回答! (md5我只用於實驗目的)但是我還是不太明白:爲了最好的安全性鹽總是必須是隨機的,或者不是。對於exapmle,我可以從用戶名獲得散列並迭代多次(僞代碼):hash(密碼+ iterate(1512,hash(username))。迭代計數特定於我的應用程序即使攻擊者知道算法和迭代計數他是老公司的僱員,他被解僱了,想要報復他)他什麼也做不了,至少這比用隨機鹽不安全,也許我錯了?我的錯誤是什麼? – alexpods