所有這些在線散佈有關 md5漏洞利用 的文章之後,我正在考慮切換到另一種哈希算法。據我所知,它一直是眾多DBA中選擇的算法。使用MD5而不是(SHA1,SHA256,SHA384,SHA512)有很多好處嗎?還是純粹的性能問題?
您還建議使用其他哪種哈希(考慮到數據綁定應用程序)作為平台)?我目前使用的是鹽醃的哈希(MD5鹽醃的哈希)。請同時考慮md5文件哈希和密碼哈希。
所有這些在線散佈有關 md5漏洞利用 的文章之後,我正在考慮切換到另一種哈希算法。據我所知,它一直是眾多DBA中選擇的算法。使用MD5而不是(SHA1,SHA256,SHA384,SHA512)有很多好處嗎?還是純粹的性能問題?
您還建議使用其他哪種哈希(考慮到數據綁定應用程序)作為平台)?我目前使用的是鹽醃的哈希(MD5鹽醃的哈希)。請同時考慮md5文件哈希和密碼哈希。
使用鹽醃md5輸入密碼是一個壞主意。不是因為MD5的加密弱點,而是因為它速度很快。這意味著攻擊者可以在單個GPU上每秒嘗試數十億個候選密碼。
您應該使用故意慢速的哈希構造,例如scrypt,bcrypt和PBKDF2。簡單的鹽醃SHA-2不夠好,因為像大多數通用哈希一樣,它很快。查看如何安全地對密碼進行散列?以獲取有關應使用的詳細信息。
使用MD5來確保文件完整性是一個實際問題,具體取決於您的實際使用情況。
針對MD5的攻擊是碰撞攻擊,而不是前映像攻擊。這意味著,如果攻擊者可以控制兩個文件,則它們可以產生具有相同哈希值的兩個文件。但是他無法匹配他沒有影響的現有文件的哈希值。不。忽略某些東西太容易了。安全勝過遺憾。
目前,在這種情況下,最好的解決方案是SHA-2(SHA-256)。一旦SHA-3標準化,這也是一個不錯的選擇。
要完成@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)產生數據,因此哈希功能幾乎不會成為瓶頸。因此,相對於數據庫中的散列而言,沒有性能問題。
對於散列函數,通常的建議是:
不要這樣做。您不應使用基本的密碼算法,而應使用協議,它們會組合幾種算法,以便它們共同提供一些安全功能(例如,具有機密性和完整性的數據傳輸)。
真的,不要這樣做。為了存儲密碼(更準確地說,是密碼驗證令牌),請不要自定義混合使用哈希函數和鹽。使用經過專門研究的建築。 這通常表示bcrypt或PBKDF2。
如果散列函數確實起作用,則使用SHA-256。僅在適當檢測到並檢測到SHA-256的一些嚴重問題(很可能是其性能)時,才考慮使用其他任何功能。
我目前正在使用鹽醃的哈希(MD5鹽醃的哈希)。
如果您正在鹽醃MD5哈希,則肯定不想使用MD5。聽起來您需要使用PBKDF2或bcrypt。
據我所知,它一直是眾多DBA的首選算法。
令人信服的理由。
我已經與許多DBA進行了合作,這些DBA在通用技術方面至少落後了5年(不使用版本控制,不格式化所有內容的Perl腳本等)。他們可能是特別糟糕的DBA,但我認為它帶有不改變事物的極其保守的心態。
僅是為了補充已經給出的答案(其中大多數都是非常好的),我們現在有一個真實的示例,其中數據洩露(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是不安全的,SHA-1也是不安全的,如果摘要的大小有問題,我建議使用SHA-256。請記住,如果將其存儲到BINARY列中,則將比存儲到CHAR中佔用更少的空間。只需確保正確完成即可。 MD5比SHA-256快2.3倍。有關更多基准信息,請訪問 http://www.cryptopp.com/benchmarks.html
簡而言之,由於彩虹表,它現在很不安全,彩虹表是MD5哈希及其匹配字符串的列表。所以基本上我會考慮其他替代方案,例如SHA1
你們都在談論不安全,但是你們都沒有直接回答這個問題。
我一直在使用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次嘗試後阻止該用戶。