##
密碼技術(shù)在網(wǎng)絡(luò)傳輸安全上的應用
隨著互聯(lián)網(wǎng)電子商務和網(wǎng)絡(luò)支付的飛速發(fā)展格二,互聯(lián)網(wǎng)安全已經(jīng)是當前最重要的因素之一。作為一名合格的軟件開發(fā)工程師河绽,有必要了解整個互聯(lián)網(wǎng)是如何來保證數(shù)據(jù)的安全傳輸?shù)牟砝蓿酒恼聦W(wǎng)絡(luò)傳輸安全體系以及涉及到的算法知識做了一個簡要的介紹宽菜,希望大家能夠有一個初步的了解。
###密碼技術(shù)定義
簡單的理解净神,密碼技術(shù)就是編制密碼和破譯密碼的一門技術(shù)何吝,也即是我們常說的加密和解密。常見的結(jié)構(gòu)如圖:
其中涉及到的專業(yè)術(shù)語:
1.秘鑰:分為加密秘鑰和解密秘鑰鹃唯,兩者相同的加密算法稱為對稱加密爱榕,不同的稱為非對稱加密;
2.明文:未加密過的原文信息坡慌,不可以被泄露黔酥;
3.密文:經(jīng)過加密處理后的信息,無法從中獲取有效的明文信息;
4.加密:明文轉(zhuǎn)成密文的過程跪者,密文的長度根據(jù)不同的加密算法也會有不同的增量棵帽;
5.解密:密文轉(zhuǎn)成明文的過程;
6.加密/解密算法:密碼系統(tǒng)使用的加密方法和解密方法渣玲;
7.攻擊:通過截獲數(shù)據(jù)流逗概、釣魚、木馬忘衍、窮舉等方式最終獲取秘鑰和明文的手段逾苫。
###密碼技術(shù)和我們的工作生活息息相關(guān)
在我們的日常生活和工作中,密碼技術(shù)的應用隨處可見枚钓,尤其是在互聯(lián)網(wǎng)系統(tǒng)上铅搓。下面列舉幾張比較有代表性的圖片,所涉及到的知識點后面都會一一講解到搀捷。
1.12306舊版網(wǎng)站每次訪問時星掰,瀏覽器一般會提示一個警告,是什么原因?qū)е碌模?這樣有什么風險呢嫩舟?
2.360瀏覽器瀏覽HTTPS網(wǎng)站時氢烘,點開地址欄的小鎖圖標會顯示加密的詳細信息,比如百度的話會顯示```AES_128_GCM至壤、ECDHE_RSA```威始,這些是什么意思?
3.在Mac系統(tǒng)的鑰匙串里有很多的系統(tǒng)根證書像街,展開后有非常多的信息黎棠,這些是做什么用的?
4.去銀行開通網(wǎng)上支付都會附贈一個U盾镰绎,那U盾有什么用呢脓斩?
##如何確保網(wǎng)絡(luò)數(shù)據(jù)的傳輸安全
接下來我們從實際場景出發(fā),以最常見的客戶端Client和服務端Server傳輸文件為例來一步步了解整個安全體系畴栖。
####1. 保密性
首先客戶端要把文件送到服務端随静,不能以明文形式發(fā)送,否則被黑客截獲了數(shù)據(jù)流很容易就獲取到了整個文件吗讶。也就是文件必須要確保保密性燎猛,這就需要用到對稱加密算法。?
**對稱加密:**加密和解密所使用的秘鑰相同稱為對稱加密照皆。其特點是速度快重绷、效率高,適用于對較大量的數(shù)據(jù)進行加密膜毁。常見的對稱加密算法有DES昭卓、3DES愤钾、AES、TDEA候醒、RC5等能颁,讓我們了解下最常見的3DES和AES算法:
**DES(Data Encryption Standard):**1972年由美國IBM研制,數(shù)學原理是將明文以8字節(jié)分組(不足8位可以有不同模式的填充補位)倒淫,通過數(shù)學置換和逆置換得到加密結(jié)果伙菊,密文和明文長度基本相同。秘鑰長度為8個字節(jié)昌简,后有了更安全的一個變形占业,使用3條秘鑰進行三次加密绒怨,也就是3DES加密纯赎。
**3DES:**可以理解為對明文進行了三次DES加密,增強了安全程度南蹂。
**AES(Advanced Encryption Standard):**2001年由美國發(fā)布犬金,2002年成為有效標準,2006年成為最流行的對稱加密算法之一六剥。由于安全程度更高晚顷,正在逐步替代3DES算法。其明文分組長度為16字節(jié)疗疟,秘鑰長度可以為16该默、24、32(128策彤、192栓袖、256位)字節(jié),根據(jù)秘鑰長度店诗,算法被稱為AES-128裹刮、AES-192和AES-256。
對稱加密算法的入?yún)⒒绢愃婆尤常际敲魑呐跗⒚罔€和模式三個參數(shù)〔聊遥可以通過網(wǎng)站進行模擬測試:[http://tool.chacuo.net/crypt3des]()违霞。其中的模式我們主要了解下ECB和CBC兩種簡單模式,其它有興趣可自行查閱瞬场。
**ECB模式(Electronic Codebook Book):**這種模式是將明文分成若干小段买鸽,然后對每一段進行單獨的加密,每一段之間不受影響泌类,可以單獨的對某幾段密文進行解密癞谒。
**CBC模式(Cipher Block Chaining):**這種模式是將明文分成若干小段底燎,然后每一段都會和初始向量(上圖的iv偏移量)或者上一段的密文進行異或運算后再進行加密,不可以單獨解密某一斷密文弹砚。
?**填充補位:**常用為PKCS5Padding双仍,規(guī)則為缺幾位就在后面補幾位的所缺位數(shù)。桌吃,比如明文數(shù)據(jù)為```/x01/x01/x01/x01/x01/x01```6個字節(jié)朱沃,缺2位補```/x02```,補完位```/x01/x01/x01/x01/x01/x01/x02/x02```茅诱。解密后也會按照這個規(guī)則進行逆處理逗物。需要注意的是:明文為8位時也需要在后面補充8個```/x08```。
####2. 真實性
客戶端有了對稱秘鑰瑟俭,就需要考慮如何將秘鑰送到服務端翎卓,問題跟上面一樣:不能以明文形式直接傳輸,否則還是會被黑客截獲到摆寄。這里就需要用到非對稱加密算法失暴。
**非對稱加密:**加密和解密秘鑰不同,分別稱為公開秘鑰(publicKey)和私有秘鑰(privateKey)微饥。兩者成對出現(xiàn)逗扒,公鑰加密只能用私鑰解密,而私鑰加密也只能用公鑰加密欠橘。兩者不同的是:公鑰是公開的矩肩,可以隨意提供給任何人,而私鑰必須保密肃续。特點是保密性好黍檩,但是加密速度慢。常見的非對稱加密算法有RSA痹升、ECC等建炫;我們了解下常見的RSA算法:
**RSA(Ron Rivest、Adi Shamir疼蛾、Leonard Adleman):**1977年由麻省理工學院三人提出肛跌,RSA就是他們?nèi)齻€人的姓氏開頭字母拼在一起組成的。數(shù)學原理是基于大數(shù)分解察郁。類似于```100=20x5```衍慎,如果只知道100的話,需要多次計算才可以試出20和5兩個因子皮钠。如果100改為極大的一個數(shù)稳捆,就非常難去試出真正的結(jié)果了。下面是隨機生成的一對公私鑰:
這是使用公鑰加密后結(jié)果:
RSA的這種特性就可以保證私鑰持有者的真實性麦轰,客戶端使用公鑰加密文件后乔夯,黑客就算截獲到數(shù)據(jù)因為沒有私鑰也是無法解密的砖织。
**Tips:**
+**不使用對稱加密,直接用RSA公私鑰進行加密和解密可以嗎末荐?**
答案:不可以习柠,第一是因為RSA加密速度比對稱加密要慢幾十倍甚至幾百倍以上邦蜜,第二是因為RSA加密后的數(shù)據(jù)量會變大很多捐祠。
+**由服務端生成對稱秘鑰蒙秒,然后用私鑰加密,客戶端用公鑰解密這樣來保證對稱秘鑰安全可行嗎块请?**
答案:不可行娜氏,因為公鑰是公開的,任何一個人都可以拿到公鑰解密獲取對稱秘鑰墩新。
####3. 完整性
當客戶端向服務端發(fā)送對稱秘鑰加密后的文件時贸弥,如果被黑客截獲,雖然無法解密得到對稱秘鑰抖棘。但是黑客可以用服務端公鑰加密一個假的對稱秘鑰茂腥,并用假的對稱秘鑰加密一份假文件發(fā)給服務端,這樣服務端會仍然認為是真的客戶端發(fā)送來的切省,而并不知道閱讀的文件都已經(jīng)是掉包的了。
這個問題就需要用到散列算法帕胆,也可以譯為Hash朝捆。常見的比如MD4、MD5懒豹、SHA-1芙盘、SHA-2等。
**散列算法(哈希算法):**簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)脸秽。而且該過程是不可逆的儒老,無法通過摘要獲得原文。
**SHA-1(Secure Hash Algorithm 1):**由美國提出记餐,可以生成一個20字節(jié)長度的消息摘要驮樊。05年被發(fā)現(xiàn)了針對SHA-1的有效攻擊方法,已經(jīng)不再安全片酝。2010年以后建議使用SHA-2和SHA-3替代SHA-1囚衔。
**SHA-2(Secure Hash Algorithm 2):**其下又分為六個不同算法標準:SHA-224、SHA-256雕沿、SHA-384练湿、SHA-512、SHA-512/224审轮、SHA512/256肥哎。其后面數(shù)字為摘要結(jié)果的長度辽俗,越長的話碰撞幾率越小。SHA-224的使用如下圖:
客戶端通過上面的散列算法可以獲取文件的摘要消息篡诽,然后用客戶端私鑰加密后連同加密的文件發(fā)給服務端榆苞。黑客截獲到數(shù)據(jù)后,他沒有服務端私鑰無法獲取到對稱秘鑰霞捡,也沒有客戶端私鑰無法偽造摘要消息坐漏。如果再像上面一樣去掉包文件,服務端收到解密得到摘要消息一對比就可以知道文件已經(jīng)被掉包篡改過了碧信。
這種用私鑰對摘要消息進行加密的過程稱之為數(shù)字簽名赊琳,它就解決了文件是否被篡改問題,也同時可以確定發(fā)送者身份砰碴。通常這么定義:
**加密:**用公鑰加密數(shù)據(jù)時稱為加密躏筏。
**簽名:**用私鑰加密數(shù)據(jù)時稱為簽名。
####4. 信任性
我們通過對稱加密算法加密文件呈枉,通過非對稱加密傳輸對稱秘鑰趁尼,再通過散列算法保證文件沒被篡改過和發(fā)送者身份。這樣就安全了嗎猖辫?
答案是否定的酥泞,因為公鑰是要通過網(wǎng)絡(luò)送到對方的。在這期間如果出現(xiàn)問題會導致客戶端收到的公鑰并不一定是服務端的真實公鑰啃憎。常見的**中間人攻擊**就是例子:
**中間人攻擊MITM(Man-in-the-MiddleAttack):**攻擊者偽裝成代理服務器芝囤,在服務端發(fā)送公鑰證書時,篡改成攻擊者的辛萍。然后收到客戶端數(shù)據(jù)后使用攻擊者私鑰解密悯姊,再篡改后使用攻擊者私鑰簽名并且將攻擊者的公鑰證書發(fā)送給服務器。這樣攻擊者就可以同時欺騙雙方獲取到明文贩毕。
這個風險就需要通過CA機構(gòu)對公鑰證書進行數(shù)字簽名綁定公鑰和公鑰所屬人悯许,也就是PKI體系。
**PKI(Privilege Management Infrastructure):**支持公鑰管理并能支持認證辉阶、加密先壕、完整性和可追究性的基礎(chǔ)設(shè)施【υ澹可以說整個互聯(lián)網(wǎng)數(shù)據(jù)傳輸都是通過PKI體系進行安全保證的启上。
**CA(Certificate Authority):**CA機構(gòu)就是負責頒發(fā)證書的,是一個比較公認的權(quán)威的證書發(fā)布機構(gòu)店印。CA有一個管理標準:WebTrust冈在。只有通過WebTrust國際安全審計認證,根證書才能預裝到主流的瀏覽器而成為一個全球可信的認證機構(gòu)按摘。比如美國的GlobalSign包券、VeriSign纫谅、DigiCert,加拿大的Entrust溅固。我國的CA金融方面由中國人民銀行管理CFCA付秕,非金融CA方面最初由中國電信負責建設(shè)。
CA證書申請流程:公司提交相應材料后侍郭,CA機構(gòu)會提供給公司一張證書和其私鑰询吴。會把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式寫到證書里面,然后用一個指紋算法計算出這些數(shù)字證書內(nèi)容的一個指紋亮元,并把指紋和指紋算法用自己的私鑰進行加密猛计。由于瀏覽器基本都內(nèi)置了CA機構(gòu)的根證書,所以可以正確的驗證公司證書指紋(驗簽)爆捞,就不會有安全警告了奉瘤。
但是:所有的公司其實都可以發(fā)布證書,甚至我們個人都可以隨意的去發(fā)布證書煮甥。但是由于瀏覽器沒有內(nèi)置我們的根證書盗温,當客戶端瀏覽器收到我們個人發(fā)布的證書后,找不到根證書進行驗簽成肘,瀏覽器就會直接警告提示卖局,這就是之前12306打開會有警告的原因。這種個人發(fā)布的證書艇劫,其實可以通過系統(tǒng)設(shè)置為受信任的證書去消除這個警告吼驶。但是由于這種證書機構(gòu)的權(quán)威性和安全性難以信任,大家最好不要這么做店煞。
我們看一下百度HTTPS的證書信息:
其中比較重要的信息:
簽發(fā)機構(gòu):GlobalSign Root CA;
有效日期:2018-04-03到2019-05-26之間可用风钻;
公鑰信息:RSA加密顷蟀,2048位;
數(shù)字簽名:帶 RSA 加密的 SHA-256 ( 1.2.840.113549.1.1.11 )
綁定域名:再進行HTTPS驗證時骡技,如果當前域名和證書綁定域名不一致鸣个,也會出現(xiàn)警告;
URI:在線管理地址布朦。如果當前私鑰出現(xiàn)了風險囤萤,CA機構(gòu)可以在線吊銷該證書。
####5. 不可抵賴性
看起來整個過程都很安全了是趴,但是仍存在一種風險:服務端簽名后拒不承認涛舍,歸咎于故障不履行合同怎么辦。
解決方法是采用數(shù)字時間戳服務:DTS唆途。
**DTS(digital time-stamp):**作用就是對于成功的電子商務應用富雅,要求參與交易各方不能否認其行為掸驱。一般來說,數(shù)字時間戳產(chǎn)生的過程為:用戶首先將需要加時間戳的文件用Hash算法運算形成摘要没佑,然后將該摘要發(fā)送到DTS毕贼。DTS在加入了收到文件摘要的日期和事件信息后再對該文件進行數(shù)字簽名,然后送達用戶蛤奢。
####6. 再次認證
我們有了數(shù)字證書保證了身份的真實性鬼癣,又有了DTS提供的不可抵賴性。但是還是不能百分百確定使用私鑰的就是合法持有者啤贩。有可能出現(xiàn)被別人盜用私鑰進行交易的風險待秃。
解決這個就需要用到強口令、認證令牌OTP瓜晤、智能卡锥余、U盾或生物特征等技術(shù)對使用私鑰的當前用戶進行認證,已確定其合法性痢掠。我們簡單了解下很常見的U盾驱犹。
**USB Key(U盾):**剛出現(xiàn)時外形比較像U盤,安全性能像一面盾牌足画,取名U盾雄驹。其內(nèi)部有一個只可寫不可讀的區(qū)域存儲著用戶的私鑰(也有公鑰證書),銀行同樣也擁有一份淹辞。當進行交易時医舆,所有涉及到私鑰的運算都在U盾內(nèi)部進行,私鑰不會泄露象缀。當交易確認時蔬将,交易的詳細數(shù)據(jù)會顯示到U盾屏幕上,確認無誤后通過物理按鍵確認就可以成功交易了央星。就算出現(xiàn)問題黑客也是無法控制U盾的物理按鍵的霞怀,用戶可以及時取消避免損失。有的U盾里面還有多份證書莉给,來支持國密算法毙石。
**國密算法:**國家密碼局針對各種算法制定了一些列國產(chǎn)密碼算法。具體包括:SM1對稱加密算法颓遏、SM2公鑰算法徐矩、SM3摘要算法、SM4對稱加密算法叁幢、ZUC祖沖之算法等滤灯。這樣可以對國產(chǎn)固件安全和數(shù)據(jù)安全進行進一步的安全控制。
## HTTPS分析
有了上面的知識,我們可以嘗試去分析下HTTPS的整個過程力喷,用Wireshark截取一次HTTPS報文:
Client Hello: 客戶端發(fā)送Hello到服務端443端口刽漂,里面包含了隨機數(shù)、客戶端支持的加密算法弟孟、客戶端的TLS版本號等贝咙;
Server Hello: 服務端回應Hello到客戶端,里面包含了服務端選擇的加密套件拂募、隨機數(shù)等庭猩;
Certificate: 服務端向客戶端發(fā)送證書
服務端計算對稱秘鑰:通過ECDH算法得到對稱秘鑰
客戶端計算對稱秘鑰:通過ECDH算法得到對稱秘鑰
開始用對稱秘鑰進行加密傳輸數(shù)據(jù)
其中我們又遇到了新的算法:DH算法
**DH(Diffie-Hellman):**1976年由Whitefield與Martin Hellman提出的一個奇妙的秘鑰交換協(xié)議。這個機制的巧妙在于可以通過安全的方式使雙方獲得一個相同的秘鑰陈症。數(shù)學原理是基于原根的性質(zhì)蔼水,如圖:
***DH算法的用處不是為了加密或解密消息,而是用于通信雙方安全的交換一個相同的秘鑰录肯。***
**ECDH:**基于ECC(橢圓曲線密碼體制)的DH秘鑰交換算法趴腋,數(shù)學原理是基于橢圓曲線上的離散對數(shù)問題。
**ECDHE:**字面少了一個E论咏,E代表了臨時优炬。在握手流程中,作為服務器端厅贪,ECDH使用證書公鑰代替Pb蠢护,使用自身私鑰代替Xb。這個算法時服務器不發(fā)送server key exchange報文养涮,因為發(fā)送certificate報文時葵硕,證書本身就包含了Pb信息。
##總結(jié)
| 算法名稱? | 特點 | 用處 | 常用算法名 |
| --- | :--- | :---: | ---: |
| 對稱加密? | 速度快贯吓,效率高| 用于直接加密文件 | 3DES懈凹、AES、RC4 |
| 非對稱加密? | 速度相對慢悄谐,但是確保安全 | 構(gòu)建CA體系 | RSA蘸劈、ECC |
| 散列算法 | 算出的摘要長度固定,不可逆 | 防止文件篡改 | SHA-1尊沸、SHA-2 |
| DH算法 | 安全的推導出對稱秘鑰 | 交換對稱秘鑰 | ECDH |
----