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