大概是前天吧,朋友圈普天蓋地地被sha1破解刷屏了。做這事的人是google,酷酷的google,喜歡酷酷的發一篇論文,然後一大堆人跟屁蟲似的開始了實現之旅;喜歡酷酷的破解後,發一個報告,然後一眾人又對谷歌頂禮膜拜。頂禮膜拜之餘,人們不免心生怯意,這尼瑪世上還有不被破解的加密算法嗎?怎麼感覺沒有啊,都是玩得文字遊戲啊。
也許有的朋友還並不是非常了解sha是個什麼東東,直到它被破解的那一日。
讓我們從maven repository目錄下的文件說起吧:
相信你對這樣的目錄相當熟悉,發現沒?這裡邊就有sha1文件。
pom和jar都有對應sha1文件。
SHA1算法
安全哈希算法(Secure Hash Algorithm)主要適用於數字籤名標準(Digital Signature Standard DSS)裡面定義的數字籤名算法(Digital Signature Algorithm DSA)。對於長度小於2^64位的消息,SHA1會產生一個160位的消息摘要。當接收到消息的時候,這個消息摘要可以用來驗證數據的完整性。在傳輸的過程中,數據很可能會發生變化,那麼這時候就會產生不同的消息摘要。
SHA1有如下特性:不可以從消息摘要中復原信息;兩個不同的消息不會產生同樣的消息摘要。
也就是上面maven的那些sha1文件都是jar和pom對應的校驗文件。
Wiki:
On February 23, 2017 CWI Amsterdam and Google announced a practical collision attack against SHA-1, publishing two dissimilar PDF files which produce the same SHA-1 hash as proof of concept.
大概是在2017年 2月23日 CWI Amsterdam 和 Google 宣布一個對sha1實踐地衝突攻擊,他們說,兩個不同的pdf文件卻產生了相同的sha hash。
為什麼強調pratical呢?因為在這之前有人就說sha1不安全,但僅僅停留在理論層面。
2013年,Marc Stevens發表了一篇論文,概述了創建SHA-1碰撞的理論方法。他說兩份不一樣的pdf文件,可以散列到相同的SHA-1摘要。 可能有雨他沒時間也沒基礎設施破解這玩意,於是他說在實踐中構建這種理論上攻擊,要克服一些挑戰。
然後谷歌就把這事幹了。
當兩個不同的數據(文檔,二進位或網站的證書)散列到如上所示的相同摘要時,會發生衝突。 實際上,對於安全散列函數不應發生衝突。 然而,如果哈希算法有一些缺陷,如SHA-1,一個資金充足的攻擊者可以進行衝突。 攻擊者然後可以使用這種衝突來欺騙依賴於哈希的系統接受惡意文件代替其良性對應。 例如,兩個保險合同具有完全不同的術語。
破解難度有多大?
下面的列出了一些數字,讓大家了解破解這種算法所需要的計算規模有多大:
總計900萬兆(即百萬的五次冪,具體為9,223,372,036,854,775,808)次SHA1計算。
要完成攻擊的首個階段需要單一CPU計算6500年。
要完成攻擊的第二階段需要單一GPU計算110年。
總之,就是也就只有谷歌這些雲計算基礎設施才能搞得定,不是誰都可以。
md5:只需要一個智慧型手機30秒就破解了。
sha-1 shattered:110GPU 需要一年;
sha-1 bruteforce:12000000GPU 需要一年。
下面是谷歌他們發出來的一個說明文件:
你也可以通過http://shattered.io/來在線檢測自己的文件是否安全。
如何避免sha1安全問題?
升級到sha256
什麼類型的系統受到影響?
任何依賴SHA-1進行數字籤名,文件完整性或文件識別的應用程式都可能存在漏洞。 這些包括:
數字證書籤名
電子郵件PGP / GPG籤名
軟體供應商籤名
軟體更新
ISO校驗和
備份系統
重複數據刪除系統
GIT
等等
TLS / SSL證書是否有風險?
任何遵守CA /瀏覽器論壇法規的認證機構不允許再頒發SHA-1證書。 此外,要求證書機構在序列號欄位內插入至少64位的隨機性。 如果正確實施,這有助於防止風險。
我的瀏覽器會向我顯示警告嗎?
從2017年1月發布的第56版開始,Chrome會將任何受SHA-1證書保護的網站視為不安全。 Firefox已計劃於2017年初推出此功能,已於2017年2月24日淘汰了SHA-1。
GIT是否受影響?
GIT強烈依賴SHA-1來識別和完整性檢查所有文件對象和提交。 基本上可以創建兩個具有相同的頭提交哈希和不同內容的GIT存儲庫,例如良性的原始碼和後代的。 攻擊者可以選擇性地為目標用戶提供服務。 這將需要攻擊者計算自己的衝突。
SVN是否受影響?
是的 - 請小心,因為SHA-1碰撞文件正在破壞SVN存儲庫。 Subversion伺服器使用SHA-1進行重複數據刪除,並且當兩個衝突文件提交到存儲庫時,存儲庫損壞。 這已經在WebKit的Subversion存儲庫中發現,並由我們獨立確認。 我們注意到,在某些情況下,由於損壞,進一步提交被阻止。
如何修補/升級我的系統?
考慮使用更安全的替代品,例如SHA-256或SHA-3。
如何檢測此攻擊?
您可以使用上面的在線工具提交文件,並讓他們檢查對SHA-1的密碼分析衝突攻擊。 它的代碼由Marc Stevens(CWI)和Dan Shumow(Microsoft)開發,並在GitHub上公開提供。
它基於反密碼分析的概念,並且它能夠檢測已知和未知的SHA-1密碼分析衝突攻擊,只給出來自衝突文件對的單個文件。
誰能夠進行這種攻擊?
這種攻擊需要超過9,223,372,036,854,775,808個SHA1計算。這使得等價的處理能力為6,500年的單CPU計算和110年的單GPU計算。
這個攻擊與強力攻擊相比怎麼樣?
SHAttered攻擊比依靠生日悖論的暴力攻擊快100,000倍。暴力攻擊需要12,000,000 GPU年才能完成,因此是不切實際的。
你是如何利用PDF格式的這種攻擊?
一個差不多一千個大小的一張圖片。就是下面這張:
這項研究背後的團隊是誰?
這個結果是Centrum Wiskunde&Informatica(CWI) - 荷蘭數學和計算機科學國家研究所和Google研究安全,隱私和反濫用小組的長期合作的產物。兩年前,Marc Stevens和領導Google反濫用研究團隊的Elie Bursztein開始合作,利用Google的專業知識和基礎設施,使Marc對SHA-1的密碼分析攻擊成為可能。從那時起,許多CWI研究人員和Google員工幫助這個項目成為可能,包括從事密碼分析和原型GPU實現的Pierre Karpman,以及開發PDF攻擊的Google Ange Albertini,Yarik Markov負責分布式GPU代碼,Alex Petit-Bianco實施了碰撞檢測器來保護Google用戶,Luca Invernizzi創建了在線文件檢查程序,Clement Blaisse負責監督計算可靠性。