顧宏久
在互聯(lián)網(wǎng)中,上網(wǎng)經(jīng)常用HTTPS協(xié)議的網(wǎng)站。
下面討論一下HTTPS的工作方式
信息防護(hù)主要涉及兩個(gè)方面:信息竊取和信息篡改。對(duì)稱/非對(duì)稱加密算法能夠避免信息竊取,而消息摘要算法能夠避免信息篡改。
目前常用的加密算法主要分成三類(lèi):
· 對(duì)稱加密算法
· 非對(duì)稱加密算法
· 消息摘要算法
一、對(duì)稱加密
基本概念
· 采用單鑰密碼系統(tǒng)的加密方法,同一個(gè)密鑰可以同時(shí)用作信息的加密和解密,這種加密方法稱為對(duì)稱加密,也稱為單密鑰加密。
· 速度快,對(duì)稱性加密通常在消息發(fā)送方需要加密大量數(shù)據(jù)時(shí)使用
· 所謂對(duì)稱,就是采用這種加密方法的雙方使用方式用同樣的密鑰進(jìn)行加密和解密
· 密鑰是控制加密及解密過(guò)程的指令
· 算法是一組規(guī)則,規(guī)定如何進(jìn)行加密和解密
在對(duì)稱加密中,數(shù)據(jù)發(fā)送方將明文(原始數(shù)據(jù))和加密密鑰一起經(jīng)過(guò)特殊加密算法處理后,使其變成復(fù)雜的加密密文發(fā)送出去。接收方收到密文后,若想解讀原文,則需要使用加密密鑰及相同算法的逆算法對(duì)密文進(jìn)行解密,才能使其恢復(fù)成可讀明文。在對(duì)稱加密算法中,使用的密鑰只有一個(gè),發(fā)收信雙方都使用這個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。
常用算法:
在對(duì)稱加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
不同算法的實(shí)現(xiàn)機(jī)制不同,可參考對(duì)應(yīng)算法的詳細(xì)資料。
優(yōu)缺點(diǎn):
· 對(duì)稱加密算法的優(yōu)點(diǎn)是算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高。
· 對(duì)稱加密算法的缺點(diǎn)是在數(shù)據(jù)傳送前,發(fā)送方和接收方必須商定好秘鑰,然后使雙方都能保存好秘鑰。
· 其次如果一方的秘鑰被泄露,那么加密信息也就不安全了。
· 另外,每對(duì)用戶每次使用對(duì)稱加密算法時(shí),都需要使用其他人不知道的唯一秘鑰,這會(huì)使得收、發(fā)雙方所擁有的鑰匙數(shù)量巨大,密鑰管理成為雙方的負(fù)擔(dān)。
二、非對(duì)稱加密
基本概念
· 對(duì)稱加密算法在加密和解密時(shí)使用的是同一個(gè)秘鑰;而非對(duì)稱加密算法需要兩個(gè)密鑰來(lái)進(jìn)行加密和解密,這兩個(gè)秘鑰是公開(kāi)密鑰(public key,簡(jiǎn)稱公鑰)和私有密鑰(private key,簡(jiǎn)稱私鑰)。
· 公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密
· 如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密
· 因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法。
加密解密過(guò)程:
1、乙方生成一對(duì)密鑰(公鑰和私鑰)并將公鑰向其它方公開(kāi)。
2、得到該公鑰的甲方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給乙方。
3、乙方再用自己保存的另一把專用密鑰(私鑰)對(duì)加密后的信息進(jìn)行解密。乙方只能用其專用密鑰(私鑰)解密由對(duì)應(yīng)的公鑰加密后的信息。
在傳輸過(guò)程中,即使攻擊者截獲了傳輸?shù)拿芪模⒌玫搅艘业墓€,也無(wú)法破解密文,因?yàn)橹挥幸业乃借€才能解密密文。
同樣,如果乙要回復(fù)加密信息給甲,那么需要甲先公布甲的公鑰給乙用于加密,甲自己保存甲的私鑰用于解密。
常用算法:
· 在非對(duì)稱加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)等。
三、消息摘要算法可以驗(yàn)證信息是否被篡改。
在數(shù)據(jù)發(fā)送前,首先使用消息摘要算法生成該數(shù)據(jù)的簽名,然后簽名和數(shù)據(jù)一同發(fā)送給接收者。接收者收到數(shù)據(jù)后,對(duì)收到的數(shù)據(jù)采用消息摘要算法獲得簽名,最后比較簽名是否一致,以此來(lái)判斷數(shù)據(jù)在傳輸過(guò)程中是否發(fā)生修改。
HTTPS其實(shí)是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過(guò)TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。具體是如何進(jìn)行加密,解密,驗(yàn)證的。
客戶端發(fā)起HTTPS請(qǐng)求
,就是用戶在瀏覽器里輸入一個(gè)https網(wǎng)址,然后連接到server的443端口。
服務(wù)端的配置
采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書(shū),可以自己制作,也可以向組織申請(qǐng)。區(qū)別就是自己頒發(fā)的證書(shū)需要客戶端驗(yàn)證通過(guò),才可以繼續(xù)訪問(wèn),而使用受信任的公司申請(qǐng)的證書(shū)則不會(huì)彈出提示頁(yè)面(startssl就是個(gè)不錯(cuò)的選擇,有1年的免費(fèi)服務(wù))。
傳送證書(shū)
這個(gè)證書(shū)其實(shí)就是公鑰,只是包含了很多信息,如證書(shū)的頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等。
客戶端解析證書(shū)
這部分工作是有客戶端的TLS來(lái)完成的,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警告框,提示證書(shū)存在問(wèn)題。如果證書(shū)沒(méi)有問(wèn)題,那么就生成一個(gè)隨即值。然后用證書(shū)對(duì)該隨機(jī)值進(jìn)行加密。
傳送加密信息
這部分傳送的是用證書(shū)加密后的隨機(jī)值,目的就是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了。
服務(wù)段解密信息
服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值(私鑰),然后把內(nèi)容通過(guò)該值進(jìn)行對(duì)稱加密。所謂對(duì)稱加密就是,將信息和私鑰通過(guò)某種算法混合在一起,這樣除非知道私鑰,不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全。
傳輸加密后的信息
這部分信息是服務(wù)段用私鑰加密后的信息,可以在客戶端被還原
客戶端解密信息
非對(duì)稱加密算法的性能是非常低的,原因在于尋找大素?cái)?shù)、大數(shù)計(jì)算、數(shù)據(jù)分割需要耗費(fèi)很多的CPU周期,所以一般的HTTPS連接只在第一次握手時(shí)使用非對(duì)稱加密,通過(guò)握手交換對(duì)稱加密密鑰,在之后的通信走對(duì)稱加密。