技術宅
最近谷歌公布了一個攻破SHA-1算法的實例,谷歌可以制作出兩個SHA完全相同的文件,這讓目前很多仍在使用SHA-1算法的網站感到威脅。那么什么是SHA-1算法?它是怎么對我們的文件進行保護?谷歌又是怎樣進行破解?本文將一一解析,并對使用什么更好的算法來保護而給出一些建議。
知識掃盲 了解算法到底是個什么鬼
說到加密,幾乎每個網蟲都要接觸到,無論是訪問網站、論壇,還是下載、發(fā)送郵件、QQ信息,這些常見的網絡活動都在使用各種各樣的加密來進行保護。舉個簡單的例子,當我們在網站下載一些類似Windows 10安裝系統(tǒng)這些大型文件的時候,下載網站經常會在下載地址后方列出一些類似MD5:D09F6E80E9F681084991990C4EE62A1C、SHA1:261FA93907D2A987C268646618C1E2C158CBF307這樣的數(shù)值代碼,這些其實就是MD5、SHA1算法的數(shù)值,用它來表明下載文件的“身份”(圖1)。
安全護身符 加密算法是怎么保護文件的安全
因為文件在網絡傳輸?shù)臅r候可能會被其他人篡改,或者由于網絡原因造成損壞,為了保證文件的唯一性,確保用戶下載或者接收到的是同一文件,文件發(fā)送者會根據(jù)文件特征生成一個哈希值,這個哈希值就類似我們的指紋數(shù)據(jù)。文件常見的哈希值有MD5、SHA1、CRC等。SHA-1值是通過哈希算法生成的,該算法是一種單向密碼體制,即它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程,而且只要文件經過任意更改(比如更改某篇文章任意一個字母),那么文件的SHA-1值就會發(fā)生變化,因此可以很好地保護文件的完整性(圖2)。
比如在上述下載例子中,如果一些不懷好意的人在Windows 10安裝文件中添加木馬文件,那么用戶再將這個文件重新上傳到網站后,安裝文件的SHA-1值就發(fā)生變化。這樣為了確保我們下載到的是正確的官方文件,一般先要到官網(或者原始發(fā)布網站)獲取文件的初始SHA-1值,下載后再對下載的文件進行SHA-1值校驗,確保SHA-1值是一致的。SHA-1值校驗可以借助Hash校驗工具來完成,通過生成的SHA-1值來和網站提供的原始SHA-1值比對,如果完全一樣則表明下載的文件沒有被更改過(圖3)。
當然SHA-1值的保護并不僅僅用在文件校驗上,對于常見的網站訪問,為了確保用戶安全訪問,現(xiàn)在很多采用SSL加密的“https://”安全網站(購物、在線支付網站)也是使用SHA-1算法來防止自己的身份被冒充。比如我們常用的12306購票網站,在瀏覽器輸入https://kyfw.12306.cn/otn/后可以在地址欄后面看到一個小鎖加密標記(圖4)。
大家知道由于網絡釣魚網站層出不窮,那么網站是怎么確保用戶瀏覽器訪問的就是真正的官網?以上述12036網站為例,首先12036網站會設計一個證書,證書由SRCA頒發(fā)(SRCA即Sinorail CertificationAuthority,中文名叫中鐵數(shù)字證書認證中心,默認不被IE信任,所以要安全訪問12036就需要安裝其提供的證書,并放置在受信任根證書下)。這些證書通過哈希算法生成一個SHA-1值。網站證書的具體算法,可以在lE地址欄點擊小鎖標記后,在彈出的菜單選擇“查看證書”,切換到“詳細信息”,可以看到12036使用的簽名算法正是“sha1”哈希算法(圖5)。
這樣當證書安裝在我們的系統(tǒng)后,12036網站生成的證書SHA-1值就會保存在本地電腦上。以后當我們在瀏覽器地址欄輸入https://kyfw.12306.cn/otn/時,由于該網站存在證書,因此IE會計算12036網站服務器證書信息的SHA-1值,然后與被證書用作身份證明的原始SHA-1值(即安裝證書后在本地保存的原始SHA-1值)作比較。如果兩個值是相同的,瀏覽器就確認當前獲取證書的SHA-1值和本地保存的SHA-1值是一致的,從而在瀏覽器打開12306的網站(圖6)。
對于仿冒的釣魚網站,即使仿冒者也在網站服務器生成證書的SHA-1值,由于這個證書文件和用戶本地安裝的不同,因此它們的SHA-1值是不同的,IE瀏覽器校驗出不同后就無法打開12306的網站,從而可以保護用戶訪問網站的正確性。這個校驗過程其實和上述下載文件類似,下載文件是官網直接提供SHA-1值,用戶下載后自行比對,網站校驗則是瀏覽器自動完成比對,但是原理是一樣的。
并非萬無一失 SHA-1值校驗有漏洞
通過上面的介紹大家知道了SHA-1值校驗的原理,因為SHA-1值是通過哈希函數(shù)算法生成的,理論上我們可以通過特定的運算生成同樣的SHA-1值(專業(yè)術語叫做碰撞)。比如最近谷歌就構造出兩個SHA-1值完全相同的PDF文件(但是實際內容卻是不同的文件),這樣在進行SHA-1值校驗的時候,計算機就會認為這是相同的同一個文件,從而實現(xiàn)SHA-1值算法的“破解”。這樣對于使用SHA-1值校驗的網站(如上述的12306網站),偽造者如果為一個釣魚網站偽造出和12036網站證書一樣的SHA-1值,那么瀏覽器訪問時就會自動認為釣魚網站就是12306官網,從而造成訪問者的損失。
不過哈希算法仍然要涉及到大量的運算,如最新哈希碰撞仍要多達2^57.5步,100個GPU大約需要計算一年時間才能完成計算,并且花費要在幾十萬美元。因此對于個人用戶文件的校驗,目前SHA-1值算法仍然有很高的安全性,但是對于在線支付、銀行網站這些高安全性的網站,他們就需要使用強度更高的SHA256,甚至SHA512算法,只有這樣才能更好地保護訪問者的安全。