從古代戰(zhàn)爭中密碼系統(tǒng)到互聯(lián)網(wǎng)時代的OpenSSL,這篇文章為我們講述信息加密技術(shù)的進(jìn)化之路。文章最后,作者還分析了為什么 SSL 在中國難普及,以及怎么用信息加密技術(shù)保護(hù)個人信息。
導(dǎo)語
互聯(lián)網(wǎng)黃金時代的到來,讓人們享受到了各種各樣的便利,最大的功臣當(dāng)然是計(jì)算機(jī)軟硬件以及互聯(lián)網(wǎng)通信技術(shù)的飛速發(fā)展,當(dāng)然背后也有一些默默奉獻(xiàn)的無名者,今天的文章的便是關(guān)于其中一位,我把它比喻為互聯(lián)網(wǎng)大陸的守夜人 (The Night Watch)——信息加密技術(shù)。它就像美劇 Game of Thrones 里面的守夜人一樣,默默無聞地保衛(wèi)著互聯(lián)網(wǎng)這片大陸不受 “異鬼” 的侵襲。
一、數(shù)據(jù)加密淺談
為了使文章不那么枯燥,先從幾個故事講起。
古代運(yùn)用加密技術(shù)進(jìn)行通信的著名案例是凱撒密碼。凱撒是古代一位軍事將領(lǐng),他率先將加密技術(shù)應(yīng)用于軍事通信,他的基本思想是:通過把字母移動一定的位數(shù)來實(shí)現(xiàn)加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一個固定數(shù)目進(jìn)行偏移后被替換成密文。例如,當(dāng)偏移量是 3 的時候,所有的字母 A 將被替換成 D,B 變成 E,以此類推 X 將變成 A,Y 變成 B,Z 變成 C。由此可見,位數(shù)就是凱撒密碼加密和解密的密鑰。
顯然,這太簡單了,拉丁字母只有 26 個,人腦即可輕松破譯。另外,通過統(tǒng)計(jì)學(xué)知識,只要文章夠長,每個字母在一篇文章中出現(xiàn)的概率是特定的,例如字母 e 在英文中出現(xiàn)的幾率最大,那么只要對密文略加統(tǒng)計(jì),即可得出,密文中出現(xiàn)最多的字母對應(yīng)的就是 e,其他以此類推。
后來人們經(jīng)過一番改進(jìn),增加了密鑰的長度或者復(fù)雜度,只要保證密鑰夠復(fù)雜,并且密鑰只被通信雙方知道,便沒那么容易被破解。這種使用單個密鑰的加密技術(shù)叫做對稱加密,特點(diǎn)是雙方使用預(yù)共享密鑰 (Pre-Shared Key)。
后來,這種加密技術(shù)廣泛應(yīng)用到后來的戰(zhàn)爭中,二戰(zhàn)時有一個著名的關(guān)于密碼的故事:考文垂大轟炸。由阿蘭圖靈領(lǐng)導(dǎo)的團(tuán)隊(duì)破解了德國的密碼系統(tǒng),得知德國將實(shí)行月光奏鳴曲計(jì)劃對考文垂進(jìn)行毀滅式轟炸。英國為了不讓自己的破解系統(tǒng)暴露于德國之前,故而沒有對城內(nèi)居民做出警告,也沒有采取非常規(guī)防御措施,最終被夷為平地。這個故事暴露了預(yù)共享密鑰的缺陷:算法再復(fù)雜、密鑰再長,也有被破譯的可能;并且密鑰必須是預(yù)共享的 (Pre-Shared),如何安全地傳送密鑰也是一個難題。
而太平洋戰(zhàn)場的美國就比較聰明一些了。有一部 Nicolas Cage 主演的講述太平洋戰(zhàn)爭的電影叫做《風(fēng)語者》(Windtalkers)。故事里面,美軍征了大量納瓦霍族人并訓(xùn)練成通訊兵,使用一種基于納瓦霍語的密碼傳遞軍事情報(bào),日軍要是想破譯密碼,就必須抓到通訊兵。Cage 的任務(wù)就是在戰(zhàn)場上保護(hù)其中一個通訊兵不被日軍抓到,萬一不幸被抓,Cage 必須親手殺死通訊兵以保護(hù)密碼。
這里通訊員就相當(dāng)于一個"物理"形式的密鑰,它的好處是,物理密鑰被別人竊取才有可能進(jìn)行破譯,這就極大增加了安全性。現(xiàn)實(shí)生活中最常用的場景就是銀行申請網(wǎng)銀的時候都要配一個 USB KEY,網(wǎng)上大額支付的時候需要在電腦上插入 USB KEY,相對于純密碼更安全一些。
后來人類發(fā)明了一樣偉大的東西——計(jì)算機(jī),并且經(jīng)過不斷改進(jìn),計(jì)算能力越來越強(qiáng),人們開始使用計(jì)算機(jī)進(jìn)行信息的加密解密,當(dāng)然劍是雙刃的,好處是我們可以使用更長更復(fù)雜的密鑰或者算法來快速進(jìn)行加密,壞處是,壞人也會用利用它更快地進(jìn)行破解,將來可能還會出現(xiàn)更強(qiáng)大的計(jì)算機(jī)技術(shù)如量子計(jì)算機(jī)技術(shù),也許當(dāng)前理論上幾百年才能破解的密文,未來只需幾秒即可解密;而且預(yù)共享密鑰的加密方法,密鑰的安全傳遞始終是一個漏洞。于是一種更完美的加密技術(shù)應(yīng)運(yùn)而生——非對稱加密技術(shù)。
非對稱加密技術(shù)的基本原理是:生成一對密鑰,一個叫公鑰,是可以公開被所有人知道的;另外一個叫私鑰,只有密鑰的主人持有,其他任何人都不能得到;公鑰加密的密文只有私鑰才能解密,私鑰加密的密文只有公鑰才能解密。舉個例子:
如圖所示,Alice 要想給 Bob 發(fā)送私密數(shù)據(jù),那么 Bob 先把公鑰公開,Alice 用 Bob 的公鑰加密自己的數(shù)據(jù),然后發(fā)送給 Bob,Bob 用自己的私鑰進(jìn)行解密;反過來,如果 Bob 要給 Alice 發(fā)送非私密但是必須真實(shí)的數(shù)據(jù),Alice 為了確定收到的數(shù)據(jù)確實(shí)是 Bob 發(fā)的而沒有中間人篡改,她可以用 Bob 的公鑰進(jìn)行解密,如果能正常解密則證明消息確實(shí)是 Bob 發(fā)送,因?yàn)槌?Bob 以外其他人無法生成可以用該公鑰解密的數(shù)據(jù)。
因此非對稱加密技術(shù)廣泛應(yīng)用于通信加密、數(shù)字證書、數(shù)字簽名、身份認(rèn)證等等。
二、OpenSSL
去年,發(fā)生了一個震驚整個互聯(lián)網(wǎng)的漏洞—心臟滴血 (Heartbleed),讓 OpenSSL 這個默默無聞的卻承擔(dān)保護(hù)全世界網(wǎng)民信息安全的隱形 “衛(wèi)士” 現(xiàn)身到大眾面前。OpenSSL 是一個強(qiáng)大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應(yīng)用程序和類庫。全世界的網(wǎng)站大都在使用 OpenSSL 這個開源工具保護(hù)他們的信息安全,這么偉大的項(xiàng)目卻窮的才幾個程序員,而且分布在世界各地,通過網(wǎng)絡(luò)彼此溝通協(xié)作,一直靠捐贈維持生計(jì),捐贈者包括諾基亞、華為、甲骨文等知名企業(yè)。
那么問題來了,OpenSSL 是如何保護(hù)我們的?
我們的互聯(lián)網(wǎng)是通過千千萬萬通信設(shè)備 (路由設(shè)備、交換設(shè)備) 以及線纜 (電纜、光纜) 連接到一起的,當(dāng)我們的數(shù)據(jù)在這些設(shè)備、線纜中傳輸?shù)臅r候,很容易被人通過各種手段例如軟件抓包、信號竊聽等設(shè)備截取到,并根據(jù)傳輸協(xié)議進(jìn)行解碼獲取敏感信息,如下圖。
好在我們有加密技術(shù)保護(hù)。拿 WEB 服務(wù)來說,我們可以通過部署 SSL 證書來啟用 HTTPS 協(xié)議,這樣在客戶端瀏覽器與服務(wù)端 webserver 之間傳輸?shù)娜魏涡畔⒍际敲芪模覀兲峤坏谋韱沃械馁~號和密碼,以及服務(wù)端返回的包含個人信息的網(wǎng)頁都被安全加密。下面簡要解析一下其中原理。
由于篇幅有限,關(guān)于 SSL 如何加密解密原理這里不贅述,可以參考前面的非對稱加密原理。當(dāng)然實(shí)際過程會更復(fù)雜一些:非對稱加密傳遞密鑰,對稱加密算法數(shù)據(jù)加密,消息摘要做完整性校驗(yàn),并且每種加密方式還有多種算法供選擇,具體使用哪種算法哪些參數(shù)是瀏覽器端跟服務(wù)端協(xié)商決定的。這里重點(diǎn)介紹一下證書的信任問題。
以我大點(diǎn)融網(wǎng)站為例:
點(diǎn)融網(wǎng)主站的證書是向特定的證書機(jī)構(gòu) (Certificate Authority,以下簡稱 CA) 付費(fèi)申請的,申請時需要提交自己的域名以及企業(yè)信息,證書機(jī)構(gòu)審核通過給予頒發(fā),證明我大點(diǎn)融是受信任的企業(yè),所以瀏覽器訪問點(diǎn)融網(wǎng)時,地址欄會顯示一個綠色小鎖標(biāo)志,如下圖所示:
點(diǎn)融網(wǎng)使用了安全度更高的增強(qiáng)型的 EV SSL 證書 (Extended Validation SSL Certificate),不僅顯示綠色小鎖,還能顯示包含完整公司名稱的綠色條狀標(biāo)識:
證書也可以自己制作,叫做自簽名證書,不過首先也得自建一個 CA。既然可以自己做,為何還要花錢求別人頒發(fā)?原因是,自建 CA 并不被其他用戶的瀏覽器所信任,其他用戶訪問你部署自簽名證書的網(wǎng)站時,瀏覽器會紅色警告提示這不是一個合法 CA 頒發(fā)的證書。反面教材:12306.cn
為何買的證書瀏覽器就認(rèn)為合法,而自簽名的證書瀏覽器就認(rèn)為不合法呢?原因是,瀏覽器內(nèi)置了一部分合法 CA 的根證書,如果你的證書是這些 CA 之一簽發(fā)的,那瀏覽器就認(rèn)為是合法的,否則就不合法,除非把自建 CA 的根證書也安裝到瀏覽器,讓瀏覽器信任。
具體的證書信任驗(yàn)證過程如下:
證書以證書鏈的形式組織,在頒發(fā)證書的時候首先要有根 CA 機(jī)構(gòu)頒發(fā)的根證書,再由根 CA 機(jī)構(gòu)頒發(fā)一個中級 CA 機(jī)構(gòu)的證書,最后由中級 CA 機(jī)構(gòu)頒發(fā)具體的 SSL 證書。在驗(yàn)證證書的時候,瀏覽器會對證書路徑中的所有證書一級一級往上進(jìn)行驗(yàn)證,只有路徑中所有的證書都是受信任的,最后結(jié)果才是受信任的。如下圖所示:
三、SSL 發(fā)展趨勢
早在 2011年Google 就已經(jīng)開始啟用全站 SSL 加密,百度也在 2014年 底開始測試全站加密,SSL 的時代已經(jīng)到來,媽媽再也不用擔(dān)心我賬號被盜、頁面被運(yùn)營商強(qiáng)插廣告、中間人攻擊等困擾了。
在中國,SSL 的普及之路還很遙遠(yuǎn),個人認(rèn)為主要障礙有如下幾個:
1. 安全意識薄弱,很多網(wǎng)站負(fù)責(zé)人只關(guān)注內(nèi)容、流量,不出安全事故,意識不到信息安全的重要性;
2. 加密帶來大量額外計(jì)算資源開銷,訪問性能會降低,手持設(shè)備會更耗電,影響用戶體驗(yàn),因此很多網(wǎng)站默認(rèn)不加密;
3. 增加成本,SSL 證書通常需要向特定機(jī)構(gòu)申請購買;
4. 額外技術(shù)成本,例如網(wǎng)站功能兼容性,瀏覽器兼容性,手機(jī) APP 兼容性等等。
隨著金融互聯(lián)網(wǎng)和電子商務(wù)的蓬勃發(fā)展,使得信息安全顯得越來越重要,加密早已成了必備技術(shù),相信終有一天,互聯(lián)網(wǎng)會徹底拋棄 HTTP,進(jìn)入全面 HTTPS 時代。
那么,最后一個問題,作為群眾的我如何科學(xué)地使用加密技術(shù)來保護(hù)個人信息?
在這里舉幾個我能想到的例子吧:
1. 本文主要講 SSL 加密,當(dāng)然是在訪問任何網(wǎng)站尤其是 P2P、支付、交易等相關(guān)網(wǎng)站的時候,如果默認(rèn)沒有使用 https,可以嘗試手動在 http 后面冒號前面加一個 s 來訪問加密的服務(wù);
2. 除了 Web 服務(wù),還有例如郵件客戶端配置加密的 pop3、imap、smtp 協(xié)議和端口 (具體方法參考郵件服務(wù)商的幫助頁面) ;
3. 網(wǎng)站眾多,賬號眾多,記密碼很頭疼,但是千萬不要用 txt 文件保存明文密碼,推薦使用密碼管理軟件,如蘋果系統(tǒng)的 keychain,Win 系統(tǒng)的 Keepass 等工具;
4. 千萬千萬千萬 (重要事情說三遍) 盡量避免連接公共場合的開放的 WiFi (尤其是不加密的);如果非連不可,請不要訪問跟錢相關(guān)的網(wǎng)站; 如果非要訪問,請記得使用加密方式訪問。WiFi 無線信號是空間內(nèi)廣播的,只要筆記本電腦裝個軟件即可監(jiān)聽所有連到該熱點(diǎn)的設(shè)備之間的通信。