Hash
使用類似於密碼和固定密鑰的 IV 來利用 AES
在查看同事制定的“安全通信協議”時,我注意到 AES-128 CBC 的使用引起了我的注意。我認為他們正在嘗試實施 HMAC,但做出了一些非常可疑的決定。
步驟如下所示:
- IV 被初始化為與使用者(明文)密碼相同,僅更改一個字節。
- AES CBC 將密碼、此 IV 和密鑰作為輸入,但每次都使用相同的密鑰。
- 然後將此加密的輸出與原始密碼進行異或,給出使用者的密碼雜湊。
現在假設我有密鑰和一些散列密碼,是否有可能獲得原始明文密碼,以便向我的同事證明這個系統被嚴重破壞了?
似乎完全有可能打破這個計劃。讓我們使用一些確定性的填充方案來獲取 2 個密碼。現在請記住,IV 在加密之前與明文進行了異或運算:
現在看來,這個異或運算的輸出只會相差一個字節。因此,如果您有足夠的雜湊密碼,那麼塊密碼的輸入和輸出可能會重複。由於生日綁定重複很可能在 16 次嘗試後有 0.5 的機會。
作為攻擊者利用這一點的一種方法是創建幾個具有不同密碼的帳戶。密碼的輸出可以使用密碼雜湊的輸出來檢索,稍後恢復。它可以簡單地將這個值與給定的密碼進行異或,這將導緻密碼的輸出。然後,攻擊者可以將此值與其他密碼散列進行異或,直到找到看起來像有效密碼字元串的內容(例如,通過檢測輸出中是否沒有控製字元)。這樣,如果不是所有密碼,大多數密碼都應該是可檢索的。
這種攻擊的有趣之處在於您甚至不需要密鑰。對手只需要一個散列預言機(伺服器本身)和(部分)散列數據庫。