在美國的2月23日,Google在密碼學領域干了件大事,它提交了第一次成功的SHA-1碰撞攻擊。谷歌宣布找到SHA-1碰撞的算法,需要耗費110塊GPU一年的運算量,並將在90天后公布源碼。
1、首先說說,什么是SHA-1?
SHA-1,被稱作哈希(Hash)算法,一個非常流行的加密散列函數。在許多安全協議中廣為使用,通常被用做密碼加密,文件校驗等,曾被視為MD5的后繼者,且存在不可逆性。
簡單來講:
比如,我有一個網站,用戶在注冊的時候會輸入用戶名和密碼。大家都知道如果密碼是明文的方式存儲在數據庫里的話,那么這個數據一旦泄漏或者內部人員作惡的話,會造成信息安全問題。
所以通用的做法是,把用戶輸入的用戶名密碼做MD5或SHA-1的運算,這時會生成一個哈希值字串。
舉例:把“卡拉是條狗”保存為一個TXT文件,計算出這個文本文件的哈希值為b32200d4f3b0c50c5ce7e9801aecbcdce6adcbcc。
因為這個算法的“不可逆”性,僅憑b32200d4f3b0c50c5ce7e9801aecbcdce6adcbcc這串哈希值無法反計算出明文是什么。
2、再來說說,SHA-1碰撞是怎么一回事?
當散列函數有漏洞,兩個文件產生相同的哈希值時,就產生了碰撞。
作為證明,Google在公布的結果中,顯示了兩個不同的PDF文件,經過SHA-1處理后,產生了相同的哈希值。

3、SHA-1碰撞會產生什么危害?
這里,為了能夠簡單易懂,我們先將SHA-1碰撞比喻成軍事領域上的情報傳遞。
首先,傳遞的情報一定都是加密的,不會明文。
通過校驗密文,我們可以保證接收到情報的正確性(加密的結果是唯一的,可以保證信息不被篡改),但是這次的問題在於,通過某種方式,我們造出了能得到相同密文的情報C。
通過校驗密文,我們可以保證接收到情報的正確性(加密的結果是唯一的,可以保證信息不被篡改),但是這次的問題在於,通過某種方式,我們造出了能得到相同密文的情報C。

那么這時候,接受到密文a的人就懵逼了,究竟是該執行進攻,還是執行待命呢?
而SHA-1碰撞就好似接收情報,因為它與合法文件有一樣的哈希值,所以會讓攻擊者濫用惡意文件。
此外,Google 在發表 SHA-1 沖突新聞的Shattered.it 網站上表示:
我們已經通過這個實例演示了如何攻破 SHA-1 加密。
這項被業內廣泛用於數字簽名、文件完整性驗證、以及保護廣泛的數字資產(包括信用卡交易、電子文檔、開源軟件資源庫與軟件更新等)的加密標准,現已被實際證明可精心制作出兩份沖突的 PDF 文件。
它們包含了不同的內容,卻擁有相同的 SHA-1 數字簽名,意味着一個有效簽名可被另一份 PDF 文件所濫用。
舉例來說,別有用心的人可以利用這種方法制作兩份內容不一致的租賃協議,然后用低價‘副本’欺騙他人‘簽下’價格更高的那份合約。
當然,想要達成 Google 這樣的“成就”並非易事,因之實際上共執行了9,223,372,036,854,775,808 次 SHA-1 計算(9×10^18);破解分為兩階段,分別需要一個CPU 進行 6,500 年,和一個GPU 進行 110 年的計算才可完成。
4、作為普通用戶,我們需要恐慌嗎?
顯然,Google找到新的破解算法,可以利用110塊GPU,一年內完成破解。這里我們不妨猜想:如果是地下黑產,面對一個高價值的目標,會不會動用掌握的數百萬台肉雞電腦的計算能力,在更短的時間內完成碰撞攻擊呢?
做為一種老舊的加密演算法,SHA-1 漸漸被后來者如 SHA-2 和 SHA-3 新演算法,以及各種變體取代。三大瀏覽器 Chrome、微軟 Edge / IE 和火狐瀏覽器都決定棄用 SHA-1。
截至今年的1月1日,當你訪問一個經由SHA-1加密的網站時,每一個主流的瀏覽器都會向你發出警告(一般情況是全屏紅色),當證書過期后,瀏覽器將無法存取這些網站。
Google 方面也建議 IT 人士采用 SHA-256 等更安全的算法,所以不必過於擔心。
隨着硬件能力高速發展,GPU已取代CPU來處理數據,導致原有的加密技術面臨走下神壇的危機。而任何的安全都是當下的安全,相信時間會改變這一切!