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