HTTPS 是如何進(jìn)行安全傳輸?shù)??
概述
現(xiàn)代密碼學(xué)對(duì)信息的處理主要離不開以下的三種形式:
- 摘要:主要用于數(shù)據(jù)校驗(yàn),例如存儲(chǔ)密碼等,摘要是對(duì)信息進(jìn)行單向的哈希,改變信息的原有形態(tài),因?yàn)楣:瘮?shù)的特點(diǎn)是易變性(即使微小的變化也會(huì)產(chǎn)生完全不同的哈希值),而且無(wú)法被反向推導(dǎo)出來(lái),例如上文提到常見(jiàn)的哈希加密方式有:MD2/4/5/6、SHA0/1/256/512 算法等方式。
- 加密:主要用于保證信息的安全傳輸,確保真實(shí)的信息只能被授權(quán)的人訪問(wèn)(擁有密鑰),通常使用密鑰對(duì)信息進(jìn)行加密,和摘要不同的是,加密是可以解密為明文信息的。密鑰的類型又分為:對(duì)稱型密鑰,非對(duì)稱型密鑰(公鑰、私鑰)等,常見(jiàn)的有 DES、AES、RC4、IDEA 等方式。
- 簽名:主要是用來(lái)保證明文信息的完整性、真實(shí)性和檢查是否被篡改的一種方式(使用哈希函數(shù)),例如 jwt 令牌 中就是有一段簽名,用于保證負(fù)載信息的真實(shí)性,簽名并不保證信息的私密性。
總體來(lái)說(shuō),它們的分工是:
- 摘要:用于確保數(shù)據(jù)的完整性和快速比較,無(wú)法被解密。
- 加密:用于保護(hù)數(shù)據(jù)的機(jī)密性,它和摘要的區(qū)別是加密可以逆向破解,也就是解密。
- 簽名:則提供了一種驗(yàn)證消息來(lái)源和完整性的方法。但信息是公開的。
這三者共同構(gòu)成了現(xiàn)代密碼學(xué)的基石,廣泛應(yīng)用于數(shù)據(jù)保護(hù)、身份驗(yàn)證和網(wǎng)絡(luò)安全等領(lǐng)域。
密鑰
對(duì)稱型密鑰
圖片
對(duì)稱型密鑰加密的基本原理是將明文數(shù)據(jù)通過(guò)一個(gè)加密算法和一個(gè)密鑰轉(zhuǎn)換成密文,然后接收方使用相同的密鑰和解密算法將密文還原成原始的明文。由于加密和解密都使用同一個(gè)密鑰,因此被稱為對(duì)稱加密。對(duì)稱型密鑰加密算法的特點(diǎn)是算法簡(jiǎn)單、速度快,適合于大量數(shù)據(jù)的加密。常見(jiàn)的對(duì)稱型密鑰加密算法包括:AES (Advanced Encryption Standard)、DES (Data Encryption Standard)、3DES (Triple DES)。
對(duì)稱型密鑰在密鑰的保管和分發(fā)上面存在困難,因?yàn)槊荑€必須安全地分發(fā)給所有需要它的用戶,并且每次通信都需要一個(gè)新的密鑰,這在大規(guī)模通信中可能會(huì)變得復(fù)雜。關(guān)于對(duì)稱型密鑰總結(jié)如下:
- 優(yōu)點(diǎn):加解密速度快,適合大量數(shù)據(jù)、算法簡(jiǎn)單,資源消耗低,適合大量數(shù)據(jù)的加解密的場(chǎng)景。
- 缺點(diǎn):密鑰的保存和分發(fā)困難:無(wú)法在不可信的網(wǎng)絡(luò)上進(jìn)行分發(fā),存在 “先有雞,還是先有蛋” 的問(wèn)題。
非對(duì)稱型密鑰
圖片
非對(duì)稱型密鑰加密,也稱為公鑰加密或雙密鑰加密,是一種使用兩個(gè)不同密鑰的加密方法:一個(gè)用于加密(稱為公鑰),另一個(gè)用于解密(稱為私鑰)。公鑰可以公開分享,而私鑰則必須保密。
非對(duì)稱加密的基本原理是:
- 密鑰生成:首先生成一對(duì)密鑰,包括一個(gè)公鑰和一個(gè)私鑰。這兩個(gè)密鑰是數(shù)學(xué)上相關(guān)的,但即使知道了公鑰,也無(wú)法輕易推導(dǎo)出私鑰。
- 加密:當(dāng) A 想要向 B 發(fā)送加密信息時(shí),A 會(huì)使用 B 的公鑰來(lái)加密信息。這樣,只有擁有相應(yīng)私鑰的 B 才能解密這條信息。
- 解密:B 收到加密信息后,使用自己的私鑰來(lái)解密,恢復(fù)原始信息。
非對(duì)稱加密的關(guān)鍵特性是公鑰可以公開,而私鑰必須保密。這使得非對(duì)稱加密在某些應(yīng)用場(chǎng)景中非常有用,但非對(duì)稱加密的主要缺點(diǎn)是計(jì)算復(fù)雜,消耗資源,速度慢等,因此它通常與對(duì)稱加密結(jié)合使用:非對(duì)稱加密用于安全地交換對(duì)稱密鑰,然后使用對(duì)稱密鑰進(jìn)行實(shí)際的數(shù)據(jù)加密,以提高效率。使用非對(duì)稱型密鑰主要解決兩個(gè)不信任個(gè)體在不安全通信環(huán)境下的信息傳輸問(wèn)題,解決信息在公開網(wǎng)絡(luò)中傳輸?shù)膯?wèn)題,既然被截獲也不會(huì)受到影響。關(guān)于非對(duì)稱型密鑰總結(jié)如下:
- 優(yōu)點(diǎn):使用密鑰對(duì)解決密鑰分發(fā)的問(wèn)題,可以在公開網(wǎng)絡(luò)中安全傳輸信息
- 缺點(diǎn):速度慢,不適合對(duì)大量數(shù)據(jù)進(jìn)行加密,計(jì)算資源消耗高,擁有長(zhǎng)度的限制多長(zhǎng)的密鑰只能加密多長(zhǎng)的明文。
因此,對(duì)稱密鑰和非對(duì)稱密鑰的區(qū)分是為了滿足不同的安全需求、提高效率、簡(jiǎn)化密鑰管理,并適應(yīng)不同的通信場(chǎng)景。單獨(dú)依靠某一種算法(對(duì)稱加密、非對(duì)稱加密)既做不了加密,也做不了簽名。在實(shí)際應(yīng)用中,對(duì)稱加密和非對(duì)稱加密往往是結(jié)合使用的。已混合加密方式來(lái)保護(hù)信道安全。
具體做法:
- 使用非對(duì)稱加密方式,協(xié)商一個(gè)密鑰(少量信息)給通信的另一方
- 雙方基于共同的密鑰進(jìn)行對(duì)稱加密傳輸大量的信息
混合使用對(duì)稱和非對(duì)稱加密方法來(lái)傳輸信息,這樣可以同時(shí)利用兩種加密方式的優(yōu)勢(shì),也稱為現(xiàn)代密碼學(xué)套件。信息傳輸?shù)慕K極解決方案 HTTPS 就是基于該方式實(shí)現(xiàn)的。
證書
在現(xiàn)實(shí)生活中,我們要和一個(gè)未曾謀面的人建立信任,通常有兩種方式:
- 基于共同的私密信息:對(duì)方打電話來(lái)說(shuō)是我的小學(xué)同學(xué),他能說(shuō)出我們小學(xué)還有同學(xué)的名字,做過(guò)的一些糗事,那么我就會(huì)信任他
- 基于權(quán)限的公證人:對(duì)方說(shuō)他是警察,需要我配合辦案,如果他能提供證件和警員編號(hào),那么我們也會(huì)信任他,并且進(jìn)行配合
在網(wǎng)絡(luò)世界里面,我們不能認(rèn)為兩臺(tái)計(jì)算機(jī)是相互認(rèn)識(shí)并且存在共同的私密信息的,所以解決信任問(wèn)題只有基于第二種 基于權(quán)限的公證人 的方式。
CA 認(rèn)證中心
CA 認(rèn)證中心是負(fù)責(zé)給計(jì)算機(jī)的服務(wù)端頒發(fā)數(shù)字證書(Certificate)的機(jī)構(gòu),類似于上面例子中給警察頒發(fā)證件的權(quán)威機(jī)構(gòu)類似。當(dāng)客戶端訪問(wèn)服務(wù)端時(shí),會(huì)檢查服務(wù)端的證書是有效,確認(rèn)無(wú)誤后才會(huì)建立安全鏈接。
圖片
服務(wù)端的 PKI 證書是遵循 X.509 標(biāo)準(zhǔn),證書包含了用于 SSL/TLS 通信的信息,具體如下:
圖片
- 版本:指出該證書使用了哪種版本的 X.509 標(biāo)準(zhǔn)(版本 1、版本 2 或是版本 3)
- 序列號(hào):由 CA 分配的證書唯一的標(biāo)識(shí)符。
- 證書簽名算法:說(shuō)明數(shù)字證書所使用的簽名算法。
- 發(fā)行者:證書頒發(fā)機(jī)構(gòu)可識(shí)別名稱
- 有效期:證書的有效期,包括開始和結(jié)束日期。
- 主題:證書持有者的名稱,通常是域名,全網(wǎng)唯一。
- 使用者公鑰信息:由 CA 中心頒發(fā)給證書持有人的公鑰和公鑰算法信息。
- 擴(kuò)展屬性:一些后期用于擴(kuò)展的其他屬性。
安全傳輸協(xié)議
前面介紹的繁瑣的密鑰和證書等機(jī)制,最終都是為了安全傳輸所準(zhǔn)備的。如何將復(fù)雜的技術(shù)無(wú)感知的應(yīng)用在所有人都使用的網(wǎng)絡(luò)通信中,成為工程師要面對(duì)的挑戰(zhàn)之一,SSL/TLS 技術(shù)也經(jīng)歷的漫長(zhǎng)時(shí)間和摸索,早在 1994 年就開始嘗試。以下是 SSL/TLS 技術(shù)的簡(jiǎn)要發(fā)展歷:
- 1994年:SSL 的引入 - 安全套接字層(SSL)是由網(wǎng)景公司(Netscape)開發(fā)的,目的是為了提供一種安全的網(wǎng)絡(luò)傳輸機(jī)制來(lái)保護(hù)網(wǎng)上交易的隱私和完整性。
- 1999年:TLS 的誕生 - 傳輸層安全協(xié)議(TLS)1.0 被作為 SSL 的后續(xù)標(biāo)準(zhǔn)正式發(fā)布,由互聯(lián)網(wǎng)工程任務(wù)組(IETF)進(jìn)行標(biāo)準(zhǔn)化。TLS 在設(shè)計(jì)上與SSL 3.0相似,但增強(qiáng)了安全性并修復(fù)了 SSL 的一些缺陷。
- 2006年:TLS 1.1發(fā)布 - 作為對(duì) TLS 1.0 的改進(jìn),TLS 1.1 在安全機(jī)制上做了進(jìn)一步的增強(qiáng),如引入了顯式 IV 以防止密碼本重放攻擊。
- 2008年:TLS 1.2 發(fā)布 - TLS 1.2 進(jìn)一步增強(qiáng)了協(xié)議的安全性,引入了更多的加密算法和安全特性,比如支持 SHA-256 散列函數(shù)。
- 2018年:TLS 1.3發(fā) 布 - TLS 1.3 簡(jiǎn)化了握手過(guò)程,提高了連接的速度和安全性。它移除了一些過(guò)時(shí)的算法和特性,使得協(xié)議更加健壯和難以被攻擊。
TLS 在傳輸之前的握手過(guò)程一共需要進(jìn)行上下兩輪、共計(jì)四次通信,通過(guò)混合使用非對(duì)稱加密交換密鑰,使用對(duì)稱加密傳輸信息的方式保障通信安全。如圖:
圖片
- 客戶端發(fā)送 ClientHello 消息:客戶端以明文的方式向服務(wù)器發(fā)送一個(gè) ClientHello 消息,該消息包括客戶端支持的 TLS 版本、加密算法列表(密碼套件)、會(huì)話ID(用于會(huì)話恢復(fù))和客戶端生成的隨機(jī)數(shù)。
- 服務(wù)器回應(yīng) ServerHello 消息:服務(wù)器選擇一個(gè)共同的 TLS 版本和密碼套件,并向客戶端發(fā)送 ServerHello 消息。此消息包括服務(wù)器生成的隨機(jī)數(shù)和會(huì)話ID,
- 客戶端確認(rèn) Client Handshake Finished:客戶端首先會(huì)驗(yàn)證證書的有效性,如果沒(méi)有問(wèn)題,客戶端會(huì)根據(jù)特定算法計(jì)算出 MasterSecret 作為后續(xù)對(duì)稱加密的私鑰,32 位隨機(jī)數(shù),編碼改變通知,此消息使用新的加密參數(shù)發(fā)送,驗(yàn)證握手的完整性等。
- 服務(wù)端確認(rèn) Server Handshake Finished:服務(wù)端向客戶端回應(yīng)最后的確認(rèn)通知,包括:編碼改變通知,服務(wù)器握手結(jié)束通知等
通過(guò)四次握手,一個(gè) TLS 安全連接建立。客戶端和服務(wù)端通過(guò)握手協(xié)商出許多信息,例如:只有雙方才知道的隨機(jī)密鑰,傳輸過(guò)程采用的對(duì)稱加密算法(例如 AES 128 等)、壓縮算法等。TLS 安全連接的建立,最終實(shí)現(xiàn)了以下的效果:
- 保障所有信息都是第三方無(wú)法竊聽(tīng)(加密傳輸)
- 無(wú)法篡改(一旦篡改通信算法會(huì)立刻發(fā)現(xiàn))
- 無(wú)法冒充(證書驗(yàn)證身份)的
這種處理方式對(duì)上層的用戶,雖然在傳輸性能上會(huì)有下降,但在功能上完全不會(huì)感知到有 TLS 的存在。建立在這層安全傳輸層之上的 HTTP 協(xié)議,就被稱為 “HTTP over SSL/TLS”,也即是大家所熟知的 HTTPS 了。