題:
是否認為MD5不安全?
Tawfik Khalifeh
2012-09-08 22:21:57 UTC
view on stackexchange narkive permalink

所有這些在線散佈有關 md5漏洞利用 的文章之後,我正在考慮切換到另一種哈希算法。據我所知,它一直是眾多DBA中選擇的算法。使用MD5而不是(SHA1,SHA256,SHA384,SHA512)有很多好處嗎?還是純粹的性能問題?

您還建議使用其他哪種哈希(考慮到數據綁定應用程序)作為平台)?我目前使用的是鹽醃的哈希(MD5鹽醃的哈希)。請同時考慮md5文件哈希和密碼哈希。

您提到過鹽醃哈希,這是否意味著您在談論密碼哈希?密碼散列需要與普通散列不同的屬性,這使得SHA-256在這種情況下幾乎與MD5一樣糟糕。
我正在使用md5哈希值在加載關鍵文件之前檢查其完整性,並使用鹽醃的md5哈希值作為密碼。
都不是一個好選擇,但是出於完全不同的原因。
像有多糟糕,我需要在重新編碼整個部分之前充分了解情況,至少需要24小時才能完成。代碼庫就像2K
您可能想閱讀[如何安全地對密碼進行哈希處理](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)。我認為這是該網站上最重要的問題之一。
七 答案:
CodesInChaos
2012-09-09 00:10:16 UTC
view on stackexchange narkive permalink

MD5輸入密碼

使用鹽醃md5輸入密碼是一個壞主意。不是因為MD5的加密弱點,而是因為它速度很快。這意味著攻擊者可以在單個GPU上每秒嘗試數十億個候選密碼。

您應該使用故意慢速的哈希構造,例如scrypt,bcrypt和PBKDF2。簡單的鹽醃SHA-2不夠好,因為像大多數通用哈希一樣,它很快。查看如何安全地對密碼進行散列?以獲取有關應使用的詳細信息。

MD5來確保文件完整性

使用MD5來確保文件完整性是一個實際問題,具體取決於您的實際使用情況。

針對MD5的攻擊是碰撞攻擊,而不是前映像攻擊。這意味著,如果攻擊者可以控制兩個文件,則它們可以產生具有相同哈希值的兩個文件。但是他無法匹配他沒有影響的現有文件的哈希值。不。忽略某些東西太容易了。安全勝過遺憾。

目前,在這種情況下,最好的解決方案是SHA-2(SHA-256)。一旦SHA-3標準化,這也是一個不錯的選擇。

數字相當嚇人,[hashcat](http://hashcat.net/hashcat/)可以在8個線程上嘗試[86.24M組合/秒]贏得7個64位(md5哈希),就像密碼時代一樣鬆散地開裂。好答案...
與在GPU上運行的ocl-hashcat相比,@sarepta哈希貓是無害的。單個GPU每秒可以實現超過60億個組合。
從理論上講,針對MD5進行預映像攻擊是可能的,但是對於完整的預映像而言,當前攻擊的計算複雜度為2 ^ 123.4。
請記住,使用MD5可能會進行*部分*的映像前攻擊。您可以獲取現有文件並更改元數據/附加垃圾,並與完全生成的文件產生衝突。這就是MD5 SSL證書衝突攻擊的工作方式。
@ewanm89-2 ^ 123.4是不可行的(即使數十億個GPU在數十億年中每秒計算數十億個MD5哈希值)。是的,它比2 ^ 128好24倍,但這種區別對實際攻擊沒有意義。 (但是同意避免MD5的其他原因)。
@Polynomial我不會稱其為部分原像。這有點像結構性碰撞。
@CodesInChaos是的,這可能是一個更好的描述。我寫這篇文章的時間大約是早上7點!
@drjimbob我還沒有說這是可行的,儘管我們已經到達那裡,我只是指出它存在,並且那是一次完整的映像前攻擊。正如其他人指出的那樣,部分原像通常足夠好。以我們目前的速度,GPU和FPGA硬件在加速蠻力並且始終保持更快的速度,可能需要很長時間才能實現完整的預映像。
@sarepta我的GPU每秒可以處理SHA1約279.5M的組合,並且它已經使用了兩年了。我討厭考慮一個好的閃亮的新GPU可以為更快的MD5做些什麼...
使用GPU,您可以為MD5每秒獲得331億個哈希值。 6個char密碼可立即用作烤麵包。
Flame惡意軟件的作者設法在MD5中生成一個選定的前綴衝突,這非常令人恐懼,我不再建議將此算法用於任何目的。 SHA-3現在通過AFAIK進行了標準化。
@buherator我認為SHA-3尚未標準化。我們知道keccak是比賽的獲勝者,但我們不知道NIST在成為SHA-3之前會對其進行哪些調整。關於MD5的不安全性,並不是每個應用程序都依賴於抗衝突性,因此,並不是每個應用程序都需要緊急從MD5遷移。對於新項目,我當然不會推薦MD5。
我已經多次看到這種推理(關於md5的速度),雖然我同意較慢的散列更為安全,但我不理解針對鹽醃的實用建議。因此,我用20個字符的鹽加鹽,結果字符串至少是28個字符。現在,攻擊者每個GPU每秒可以進行數十億次哈希處理,比方說,他一年可以運行數百萬個GPU。他獲得原始琴弦的機會是多少?我可以做數學,概率幾乎為0。
@ivan鹽與密碼哈希一起存儲,因此攻擊者可以知道。當攻擊者入侵服務器的所有機密(包括用於加密密碼哈希的加密密鑰或Pepper)時,密碼哈希只是最後一級的防禦措施。
Thomas Pornin
2013-02-24 09:43:55 UTC
view on stackexchange narkive permalink

要完成@CodesInChaos的答案,通常使用MD5的原因是傳統,而不是因為性能。處理數據庫的人與處理安全性的人不同。他們通常認為使用弱算法沒有問題(例如,請參見MySQL用來散列密碼的算法笑話)。他們之所以使用MD5,是因為他們曾經使用過MD5,並且習慣於使用MD5。

Performance 討論的次數多於測量的次數。但是,從邏輯上講,如果沒有什麼可衡量的,則不會出現性能問題。使用基本CPU的一個內核,使用MD5可以每秒散列400 MB以上的字節,使用SHA-1可以散列300 MB / s的速度,而使用SHA-256則散列150 MB / s的速度。另一方面,像樣的硬盤將以更低的速率(通常為100到120 MB / s)產生數據,因此哈希功能幾乎不會成為瓶頸。因此,相對於數據庫中的散列而言,沒有性能問題。

對於散列函數,通常的建議是:

  1. 不要這樣做。您不應使用基本的密碼算法,而應使用協議,它們會組合幾種算法,以便它們共同提供一些安全功能(例如,具有機密性和完整性的數據傳輸)。

  2. 真的,不要這樣做。為了存儲密碼(更準確地說,是密碼驗證令牌),請不要自定義混合使用哈希函數和鹽。使用經過專門研究的建築。 這通常表示bcrypt或PBKDF2

  3. 如果散列函數確實起作用,則使用SHA-256。僅在適當檢測到並檢測到SHA-256的一些嚴重問題(很可能是其性能)時,才考慮使用其他任何功能。

  4. ol>
我的回答是:“不要直接使用哈希函數-使用更大的系統,例如TLS進行數據傳輸,使用證書進行身份驗證和/或使用bcrypt或PBKDF2進行密碼存儲。”
Bradley Kreider
2012-09-10 07:11:10 UTC
view on stackexchange narkive permalink

我目前正在使用鹽醃的哈希(MD5鹽醃的哈希)。

如果您正在鹽醃MD5哈希,則肯定不想使用MD5。聽起來您需要使用PBKDF2或bcrypt。

據我所知,它一直是眾多DBA的首選算法。

令人信服的理由。

我已經與許多DBA進行了合作,這些DBA在通用技術方面至少落後了5年(不使用版本控制,不格式化所有內容的Perl腳本等)。他們可能是特別糟糕的DBA,但我認為它帶有不改變事物的極其保守的心態。

Machavity
2015-10-28 19:28:09 UTC
view on stackexchange narkive permalink

僅是為了補充已經給出的答案(其中大多數都是非常好的),我們現在有一個真實的示例,其中數據洩露(Ashley Madison)導致整個密碼表被洩漏。他們使用帶有隨機鹽的bcrypt來哈希密碼。安全研究人員決定採用這些哈希並將其強行使用。 這是結果

所有這些的結果是,bcrypt出於至少兩個原因,對試圖破解Ashley Madison轉儲的任何人提出了苛刻的要求。首先,4,096個哈希迭代需要大量的計算能力。在Pierce的情況下,bcrypt將他的四GPU破解設備的速度限制為每秒只有156次猜測。其次,因為bcrypt哈希值是加鹽的,所以他的裝備必須一次猜測每個哈希值的明文,而不是全部一致。

“是的,沒錯,每秒156個哈希值,” Pierce寫道。 “對於一個習慣於破解MD5密碼的人來說,這看起來很令人失望,但是它是bcrypt,所以我會盡我所能。”

Pierce在突破4,000分後就放棄了。他估計,要在Pierce的有限池中使用RockYou密碼運行所有六百萬個哈希,將需要長達19,493年的時間。在Ashley Madison轉儲中總共有3600萬個哈希密碼,完成這項工作將需要116,958年。

最後,他唯一能夠破解的密碼是荒謬的簡單或通用密碼(例如“ 123456”)。

實際上,其中一些可以作為MD5散列使用(我不確定是從較舊的系統還是從其他系統獲得)。那些都沒問題。
Matrix
2012-09-08 22:37:08 UTC
view on stackexchange narkive permalink

是的,MD5是不安全的,SHA-1也是不安全的,如果摘要的大小有問題,我建議使用SHA-256。請記住,如果將其存儲到BINARY列中,則將比存儲到CHAR中佔用更少的空間。只需確保正確完成即可。 MD5比SHA-256快2.3倍。有關更多基准信息,請訪問 http://www.cryptopp.com/benchmarks.html

請勿使用標準哈希值存儲密碼。他們太快了。 PBKDF2 / bcrypt是必經之路。
Shane
2013-06-20 13:50:08 UTC
view on stackexchange narkive permalink

簡而言之,由於彩虹表,它現在很不安全,彩虹表是MD5哈希及其匹配字符串的列表。所以基本上我會考慮其他替代方案,例如SHA1

彩虹表幾乎同樣適用於所有無鹽散列。遷移到SHA1或SHA2幾乎沒有任何作用。正確的密碼散列方法是將salt與故意慢速的密碼散列功能(例如PBKDF2,bcrypt或scrypt)一起使用。即使使用快速無鹽散列的哈希,運行新的GPU搜索通常也比使用彩虹表便宜。
Dom
2013-06-20 12:57:21 UTC
view on stackexchange narkive permalink


你們都在談論不安全,但是你們都沒有直接回答這個問題。

我一直在使用MD5和Sha512,一旦我就很容易破解它們曾經把我的小黑客專家放在上面,直到它們都像雷聲般擊中了我們!阻止如上所述的“大規模攻擊”的最簡單有效的方法是設置登錄嘗試的限制,這意味著:

  function checkbrute($ user_id,$ mysqli){//獲取當前時間的時間戳$ now = time(); //所有登錄嘗試都是從過去2小時開始計算的。 $ valid_attempts = $ now-(2 * 60 * 60);如果($ stmt = $ mysqli->prepare(“ SELECT time FROM login_attempts WHERE user_id =?AND time >'$ valid_attempts'”)){$ stmt->bind_param('i',$ user_id); //執行準備好的查詢。 $ stmt->execute(); $ stmt->store_result(); //如果登錄失敗次數超過5,則if($ stmt->num_rows > 5){返回true; } else {返回false; }}}  


您明白我的意思了嗎?
黑客想要嘗試的最大組合數量,他限制為每2小時5次失敗。您甚至可以在X次嘗試後阻止該用戶。

您無需考慮用戶數據庫或通過某些漏洞(例如SQLi)整體檢索到的用戶記錄被盜/不當丟棄的備份。您的答案與通過服務器應用程序入侵實時數據庫有關,服務器應用程序被認為是唯一訪問此類數據的應用程序,一次只能使用一個用戶帳戶,如果這是唯一的風險,則可以更優雅地解決該問題,並使用密碼首先不需要哈希。不相信我嗎詢問[LinkedIn](http://www.zdnet.com/blog/btl/6-46-million-linkedin-passwords-leaked-online/79290)(還有許多其他內容;)
1)我明確地寫道,MD5和SHA-2作為密碼散列並不安全。 2)正確使用SHA-512不會產生已知的攻擊。這是加密哈希,而不是密碼哈希。 3)您缺少密碼哈希的要點。密碼哈希的目的是在數據庫洩漏時保護密碼。在那種情況下,速率限制器根本無濟於事。
FWIW以這種方式限制登錄嘗試,這使得執行拒絕服務非常容易
-1
在IPv6時代的@Evi1M4chine中,攻擊者可以輕鬆(廉價地)擁有數百萬個不同的IPv6地址


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...