密碼技術在網絡傳輸安全中的應用
隨著互聯網電子商務和網上支付的快速發展,互聯網安全已成為當前最重要的因素之壹。作為壹名合格的軟件開發工程師,需要了解整個互聯網如何保證數據的安全傳輸。本文對網絡傳輸安全體系及相關算法知識做了簡單介紹,希望大家能有壹個初步的了解。
# # #加密技術的定義
簡單理解,密碼學就是編譯和解密密碼的技術,也就是我們常說的加密和解密。常見結構如圖所示:
涉及的技術術語:
1.密鑰:可分為加密密鑰和解密密鑰。相同的加密算法稱為對稱加密,不同的稱為非對稱加密。
2.明文:未加密的原始信息不能泄露;
3.密文:加密信息,從中無法獲得有效的明文信息;
4.加密:在將明文轉換為密文的過程中,根據不同的加密算法,密文的長度會有不同的增加;
5.解密:將密文轉換成明文的過程;
6.加密/解密算法:加密系統使用的加密方法和解密方法;
7.攻擊:指通過攔截數據流、釣魚、特洛伊馬、窮舉等方法最終獲得密鑰和明文。
# # #密碼學技術與我們的工作生活息息相關。
在我們的日常生活和工作中,密碼技術的應用隨處可見,尤其是在互聯網系統上。下面是幾張有代表性的圖片,涉及的知識點會壹壹講解。
1.12306每次訪問舊網站,瀏覽器壹般都會提示警告。原因是什麽?有什麽風險?
2.360瀏覽器瀏覽HTTPS網站時,點擊地址欄中的小鎖圖標會顯示加密詳情,如`` ` AES_128_GCM,ECDHE_RSA ``` ` ` ',這些是什麽意思?
3.Mac系統的鑰匙扣裏有很多系統根證書,擴展後信息量很大。這些是幹什麽用的?
4.去銀行開通網上支付,會得到壹個u盾。u盾有什麽用?
# #如何保證網絡數據傳輸的安全性
接下來,我們從實際場景出發,以最常見的客戶端與服務器端的文件傳輸為例,壹步步了解整個安全體系。
# # # 1.機密
首先,客戶端要把文件發送到服務器,不能是明文,否則黑客會攔截數據流,輕松獲取整個文件。也就是說,文件必須保密,這就需要使用對稱加密算法。?
* *對稱加密:* *加密和解密使用相同的密鑰,稱為對稱加密。其特點是速度快、效率高,適合加密大量數據。常見的對稱加密算法有DES、3DES、AES、TDEA、RC5等。讓我們了解壹下最常見的3DES和AES算法:
* * DES(數據加密標準):* * 1972由美國IBM公司開發。數學原理是將明文分組為8個字節(不足8位可以有不同模式的填充),通過數學置換和逆置換得到加密結果。密文和明文的長度基本相同。密鑰長度為8字節,然後還有壹個更安全的變種,用3個密鑰進行三次加密,即3DES加密。
* * 3des: * *可以理解為明文經過三次des加密,增強了安全性。
* * AES(高級加密標準):* * 2006 54 38+0由美國發布,2002年成為有效標準,2006年成為最流行的對稱加密算法之壹。由於安全性更高,它正逐漸取代3DES算法。其明文包長度為16字節,密鑰長度可以是16,24,32(128,192,256位)字節。根據密鑰長度,算法被稱為AES-128和AES-65438+。
對稱加密算法的參數基本相似,都是明文、密鑰、模式。可以通過網站進行模擬測試:[/crypt3des]()。其中主要了解兩種簡單的模式,ECB和CBC,其他有興趣的可以自行咨詢。
** ECB模式(電子碼本):**在這種模式下,明文被分成若幹小段,然後每段單獨加密,每段不受影響,所以可以單獨解密壹些秘密消息。
** CBC模式(密碼塊鏈接):**在這種模式下,明文被分成若幹小段,然後每段與初始向量(上圖中的iv偏移量)或加密前壹段的密文進行異或運算。不可能單獨解密被破解的密文。
?* *補位:* *常用作PKCS5Padding,規則是缺幾個就補幾個。例如,明文數據為` `/ x 01/x 01/x 01/x 01/x 01 ` ` ` 6字節,缺少兩位` `` `/x02`。解密後,也會按照這個規律反過來。需要註意的是,當明文為8位時,需要在後面加上8 `` `/ x08 ` `` ``。
# # # 2.真實性
當客戶端擁有對稱密鑰時,它需要考慮如何將密鑰發送到服務器。問題同上:不能直接明文傳輸,否則還是會被黑客攔截。這裏需要非對稱加密算法。
* *非對稱加密:* *加密和解密密鑰不同,分別稱為publicKey和privateKey。兩者成對出現,公鑰加密只能用私鑰解密,私鑰加密只能用公鑰加密。兩者的區別在於,公鑰是公開的,可以隨意提供給任何人,而私鑰必須保密。它的特點是保密性好,但加密速度慢。常見的非對稱加密算法有RSA、ECC等。讓我們來看看常見的RSA算法:
** RSA(Ron Rivest,阿迪·薩莫爾,Leonard Adleman): * * 1977是麻省理工三個人提出的,RSA是由他們姓氏的首字母組成的。數學原理是基於大數的分解。類似於``` ` 100 = 20x5 ```` `如果只知道100,那就要多次計算才能試出20和5這兩個因子。如果把100改成壹個非常大的數,試出真實的結果會非常困難。下面是壹對隨機生成的公鑰和私鑰:
這是用公鑰加密結果:
RSA的這壹特性可以確保私鑰持有者的真實性。客戶端用公鑰加密文件後,即使黑客截獲了數據,也因為沒有私鑰而無法解密。
**提示:**
+* *可以不用對稱加密直接用RSA公私鑰加密解密嗎?**
回答:不會,壹是因為RSA加密的速度比對稱加密慢幾十倍甚至上百倍,二是因為RSA加密的數據量會變得大很多。
+* *服務器生成對稱密鑰,然後用私鑰加密,用公鑰解密是否可行?**
回答:不會,因為公鑰是公開的,任何人都可以得到公鑰解密,獲得對稱密鑰。
####3.完整
當客戶端向服務器發送用對稱密鑰加密的文件時,如果被黑客截獲,就無法解密得到對稱密鑰。但是黑客可以用服務器的公鑰加密壹個假的對稱密鑰,用假的對稱密鑰加密壹個假的文件發送給服務器,這樣服務器仍然會認為是真實的客戶端發送的,而不知道讀取的文件已經被替換了。
這個問題需要壹個哈希算法,也可以翻譯成Hash。常見的有MD4、MD5、SHA-1、SHA-2等。
* *哈希算法(hash algorithm): * *簡單來說就是將任意長度的消息壓縮成固定長度的消息摘要的功能。而且過程是不可逆的,無法通過抽象獲得原文。
* * SHA-1(安全哈希算法1): * *由美國提出,可以生成20字節的報文摘要。2005年發現了針對SHA-1的有效攻擊方法,已經不安全。2010之後,建議用SHA-2和SHA-3代替SHA-1。
* * sha-2(安全哈希算法2): * *分為六種不同的算法標準:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224和sha 512/。它後面的數字就是匯總結果的長度,越長碰撞概率越小。SHA-224的用途如下:
客戶端可以通過上述哈希算法獲得文件的摘要消息,然後用客戶端的私鑰加密,和加密後的文件壹起發送給服務器。黑客截獲數據後,沒有服務器私鑰就不能得到對稱密鑰,沒有客戶端私鑰就不能偽造摘要消息。如果包文件如上所述被移除,則服務器可以通過在接收到解密的摘要消息之後替換包來知道文件已經被篡改。
這種用私鑰加密抽象消息的過程稱為數字簽名,解決了文件是否被篡改的問題,也可以確定發送者的身份。通常是這樣定義的:
* *加密:* *當數據用公鑰加密時,稱為加密。
* *簽名:* *當數據用私鑰加密時,稱為簽名。
####4.信任
我們通過對稱加密算法對文件進行加密,通過非對稱加密傳輸對稱密鑰,然後通過哈希算法來保證文件沒有被篡改以及發送者的身份。這安全嗎?
答案是否定的,因為公鑰是通過網絡發給對方的。在此期間,如果出現問題,客戶端收到的公鑰可能不是服務器的真實公鑰。常見的中間人攻擊* *就是壹個例子:
* *中間人攻擊(MITM): * *攻擊者偽裝成代理服務器,當服務器發送公鑰證書時,它被篡改為攻擊者。然後在收到客戶端數據後,用攻擊者的私鑰解密,然後篡改,用攻擊者的私鑰簽名,將攻擊者的公鑰證書發送到服務器。這樣,攻擊者可以欺騙雙方同時獲得明文。
這種風險要求CA對公鑰證書進行數字簽名,並將公鑰與其所有者即PKI系統綁定。
* * PKI(權限管理基礎設施):* *支持公鑰管理的基礎設施,可以支持身份驗證、加密、完整性和責任。可以說整個互聯網的數據傳輸都是由PKI體系來保障的。
* * CA(Certificate Authority):* * CA負責頒發證書,是壹個相對公認的權威的證書頒發機構。CA有壹個管理標準:WebTrust。只有通過WebTrust國際安全審計認證,才能在主流瀏覽器中預裝根證書,成為全球可信的認證機構。比如美國的GlobalSign,VeriSign,DigiCert,加拿大的Entrust。在中國,CFCA由中國人民銀行管理,中國電信初步負責非金融CA的建設。
CA證書申請流程:公司提交相應材料後,CA機構會向公司提供證書及其私鑰。頒發者、公鑰、主體、有效從、有效到等信息都會明文寫入證書,然後這些數字證書的壹個指紋會被壹個指紋算法計算出來,指紋和指紋算法會用自己的私鑰加密。因為瀏覽器基本都內置了CA組織的根證書,所以可以正確驗證公司證書的指紋,不會有安全警告。
但實際上所有公司都可以發證,甚至個人也可以隨意發證。但是由於瀏覽器沒有內置我們的根證書,客戶端瀏覽器收到我們頒發的證書時,找不到根證書進行驗證,瀏覽器會直接警告妳,這也是為什麽打開12306時會出現警告的原因。這種由個人頒發的證書實際上可以通過將系統設置為可信證書來消除這種警告。但是,因為這個證書頒發機構的權威性和安全性很難讓人信任,所以最好不要這樣做。
我們來看看百度HTTPS的證書信息:
其中,比較重要的信息:
發布機構:Globalsign rootca
生效日期:2018-04-03至2019-05-26有效;
公鑰信息:RSA加密,2048位;
數字簽名:帶RSA加密的Sha-256(1 . 2 . 840 . 113549.1.11)。
綁定域名:如果再次進行HTTPS驗證時,當前域名與證書綁定域名不壹致,也會出現警告;
URI:在線管理地址。如果當前私鑰有風險,CA可以在線吊銷證書。
# # # 5.不可否認性
看似整個過程都很安全,但還是存在風險:如果服務器簽收後拒不承認,因過錯導致合同無法履行怎麽辦?
解決方案是使用數字時間戳服務:DTS。
* * * DTS(digital time-stamp):* *):* *的作用是要求參與交易的各方不能為了成功的電子商務應用而否認自己的行為。壹般來說,數字時間戳的生成過程是這樣的:用戶首先使用哈希算法形成需要加時間戳的文件的摘要,然後將摘要發送給DTS。DTS在添加接收文件摘要的日期和事件信息後,對文件進行數字簽名,然後將其傳遞給用戶。
####6.再次認證
我們有數字證書來保證身份的真實性,還有DTS提供的不可否認性。但是仍然不能100%確定使用私鑰的人就是合法持有人。可能存在其他人竊取用於交易的私鑰的風險。
要解決這個問題,需要使用強密碼、認證令牌OTP、智能卡、u盾或生物識別技術對使用私鑰的當前用戶進行認證,其合法性已經得到確認。我們先簡單看壹下常見的u盾。
** USB Key(U盾):**剛出現的時候看起來像u盤,安全性能像盾牌,所以命名為u盾。裏面有壹個可寫不可讀的區域用來存儲用戶的私鑰(也有公鑰證書),銀行也有壹份。交易時,所有涉及私鑰的操作都在u盾內部進行,不會泄露私鑰。交易確認後,u盾屏幕上會顯示交易的詳細數據。確認後,通過物理鍵確認即可成功完成交易。即使出現問題,黑客也無法控制u盾的物理按鍵,用戶可以及時取消,避免損失。有的u盾還有多個證書支持國密算法。
* *國家秘密算法:* *國家密碼局針對各種算法制定了壹些國產密碼算法。具體包括:SM1對稱加密算法、SM2公鑰算法、SM3摘要算法、SM4對稱加密算法、ZUC祖沖之算法等。這樣可以進壹步控制國產固件的安全性和數據安全性。
## HTTPS分析
有了以上知識,我們可以嘗試分析HTTPS的整個過程,並用Wireshark攔截壹條HTTPS消息:
客戶端Hello:客戶端向服務器端口443發送Hello,包含隨機數、客戶端支持的加密算法、客戶端的TLS版本號等。
服務器Hello:服務器向客戶端回復Hello,包含服務器選擇的加密套件和隨機數;
證書:服務器向客戶端發送壹個證書。
服務器計算對稱密鑰:對稱密鑰通過ECDH算法獲得。
客戶端計算對稱密鑰:對稱密鑰通過ECDH算法獲得。
開始用對稱密鑰加密和傳輸數據。
其中,我們遇到了壹種新的算法:DH算法。
* * DH(Diffie-Hellman):* * 1976由Whitefield和Martin Hellman提出的壹個精彩的密鑰交換協議。這種機制的巧妙之處在於,雙方能夠以安全的方式獲得相同的密鑰。數學原理是基於原根的性質,如圖所示:
* * * The算法的目的不是加密或解密消息,而是在通信雙方之間安全地交換相同的密鑰。***
* * ECDH: * *基於ECC(橢圓曲線密碼體制)的DH密鑰交換算法,數學原理是基於橢圓曲線上的離散對數問題。
* * ecdhe: * *字面上少了壹個e,e代表臨時。在握手過程中,作為服務器,ECDH使用證書公鑰而不是Pb,使用自己的私鑰而不是Xb。在這種算法中,服務器不發送服務器密鑰交換消息,因為在發送證書消息時,證書本身包含Pb信息。
# #摘要
|算法名?|功能|用途|常用算法名稱|
| - | : - | : - : | - : |
|對稱加密?|快速高效|用於直接加密文件| 3DES、AES、RC4 |
|不對稱加密?|相對較慢,但安全|構建CA系統| RSA、ECC |
|哈希算法|計算出的摘要長度是固定且不可逆的|防止文件篡改| SHA-1,SHA-2 |
| DH算法|對稱密鑰的安全派生|交換對稱密鑰| ECDH |
-