SHA1 的安全性如何?真正利用的機會有多大?
我讀到,在 2017 年 2 月,第一次計算了 SHA1 碰撞。這和更早的理論證明意味著 SHA1 在正式的密碼學上是不安全的。但是,當在協議中使用 SHA1 時(在我的例子中是 SAML 斷言),協議都規定了某種消息格式,並且消息中的資訊必須有意義才能創建真正的衝突利用。在這種情況下,真正的漏洞利用有多可行?
不受該領域任何真正知識的阻礙,我懷疑這將“永遠不會”發生。還是我錯過了什麼?
實際上,自從 2011 年發布了一種攻擊方法以來,SHA-1 已經“官方不安全”的時間更長了。2017 年的碰撞只是已知的第一個實際執行攻擊的案例。但是每個人都已經非常確信這次攻擊是有效的,而且事實上,2017 年的碰撞是在預期的計算成本下產生的。
重要的一點是我們在這裡談論的是碰撞。當您發現兩條不同的消息被散列到相同的值時,就會發生衝突。
在許多協議中,衝突並不重要。重要的是對第二原像的抵抗力。第二個原像就像碰撞,只是攻擊者無法選擇其中一個消息;攻擊者面臨的挑戰是找到一對沖突的消息,第一個消息是固定的。尋找第二個原像比尋找碰撞要困難得多。對於具有 160 位輸出的“完美”散列函式(如 SHA-1),可以通過 2 80的努力找到衝突,而找到第二個原像需要 2 160的努力(即一百萬倍以上)。此外,雖然 SHA-1 存在結構上的弱點,但可以將碰撞攻擊的成本從 2 80降低到 2 63,使它僅僅是“非常昂貴”,沒有已知的有助於第二個原像的弱點。
所以現在,SHA-1 對於第二個原像似乎仍然非常健壯,任何使用 SHA-1 並依賴於第二個原像抗性的協議都可以暫時安全地繼續這樣做。
棘手的問題是確定給定協議是否依賴於第二個原像,或者衝突是否會影響它。SAML是一個複雜的野獸。它似乎將 SHA-1 與數字簽名結合使用,這依賴於第二個原像,除非在攻擊者可以選擇正在簽名的部分數據的情況下,在這種情況下,他們可能想要在“看似無辜的數據”和惡意數據。在已發布的 SHA-1 衝突的情況下,這是通過 PDF 文件完成的,因為 PDF 格式足夠靈活,可以將僅幾位的差異轉化為任意視覺效果。
謹慎的做法是遷移到 SHA-256。這樣做沒有絕對的緊迫性;但是如果十年後你仍然使用 SHA-1,那麼這意味著你的軟體管理很糟糕(這比 SHA-1 的弱點更有可能成為問題)。