MD5 的弱點會影響 Oplop 嗎?
Oplop 是一種從主密碼和使用者選擇的暱稱(通常是使用者名@域)生成帳戶特定密碼的算法。從網站:
- 將主密碼與暱稱連接起來(按此順序!)。
- 生成連接字元串的 MD5 雜湊。
- 將 MD5 雜湊轉換為 URL 安全的 Base64。
- 查看前 8 個字元中是否有數字。如果找不到數字…
一種。搜尋第一個不間斷的數字子串。
灣。如果找到數字子字元串,請將它們添加到 Base64 字元串的前面。
C。如果沒有找到子字元串,則在前面加上 1。 5. 使用前 8 個字元作為帳戶密碼。
作者說MD5是安全的。這是真的?MD5 中是否存在使其作為單向函式(而不是字元串的“指紋”)不安全的缺陷?當攻擊者可以訪問所有 128 位散列時是否安全,或者是否需要截斷散列(就像在 Oplop 中一樣)以防止碰撞攻擊?
簡短的回答是:從技術上講,不。MD5的弱點在這裡不是問題。然而 MD5 是非常不合適的,因為它是錯誤的安全原語之王;它的聲譽也受到損害。
如果要擔心碰撞攻擊,那麼使用 MD5將是一場災難,因為它 現在 已經 無可救藥地 破壞了抗碰撞性;但這在所述用法中似乎並不構成嚴重威脅。更糟糕的是,似乎有可能展示不同的(主密碼,暱稱)對導致相同的帳戶密碼,但我看不到它會導致實際攻擊。
在所述用法中使用 MD5 的主要技術缺點是,矛盾的是,MD5 的主要質量:它很快。這使得密碼破解比故意緩慢的基於密碼的密鑰派生函式(如PBKDF2或Scrypt)更容易,並且比使用比 MD5 更強的雜湊(如SHA-2之一)更容易。然而,速度快不被認為是MD5 的弱點;使用快速散列是建議用法的一個弱點。
此外,從公共關係的角度來看,使用 MD5 是一個壞主意,就像使用已知高速爆炸的輪胎對於低速汽車製造商來說是一個壞主意一樣。
更新:除非將主密碼強加給使用者(這使得該方案的用處大大降低),否則需要一個可控的慢速密鑰派生函式,並且作為旁白,應該遵循更好的方法來生成可接受的密碼(如在另一個答案)。我推薦Scrypt,因為它使用可控的大量 RAM 和(可能)CPU 核心,因此提高了對使用者的給定懲罰的確定攻擊的成本(一個小的可參數化延遲,並在此期間使用電腦的資源)。請參閱定義 Scrypt的論文中的此表::注意:一個
字母 在26 個小寫中是隨機的;一個字元在 95 個 ASCII 符號中是隨機的;每個文本熵NIST SP800-63-1。
你的計劃很糟糕。它太快了。此外,您的第 4 步很奇怪,我擔心它可能會在密碼中引入偏差,從而降低您生成的密碼的熵。相反,我建議您使用以下替代方法:
- 使用PBKDF2對密碼進行雜湊處理,暱稱為 salt,並設置迭代計數以使其盡可能慢。讓 K 表示 PBKDF2 輸出的前 128 位。將 i 設置為 0。
- 設置 X = AES(K, i)。以某種確定的方式將 X 轉換為候選密碼 P(例如,通過應用 base64 編碼並僅保留結果的前 8 個字元)。
- 如果 P 符合您的“可接受性標準”,那麼它就是您的密碼。否則,增加 i 並返回步驟 2。
聽起來您的“可接受性標準”是:密碼必須至少包含一個數字。沒關係。上述算法將適用於該可接受性標準。(它也可以與許多其他人一起使用。)對於給定的 PBKDF2 迭代計數,它將提供您可以獲得的最佳安全性。