什么是會(huì)話(huà)密鑰?
會(huì)話(huà)密鑰的實(shí)質(zhì)仍然是加密密鑰,但它特指那些僅對(duì)單個(gè)通信會(huì)話(huà)進(jìn)行對(duì)稱(chēng)加密的密鑰。換句話(huà)說(shuō),它是一個(gè)臨時(shí)密鑰,僅在一個(gè)時(shí)間段內(nèi)用于加密和解密數(shù)據(jù);會(huì)話(huà)兩方之間的未來(lái)對(duì)話(huà)將使用不同的會(huì)話(huà)密鑰進(jìn)行加密。會(huì)話(huà)密鑰就像每次登錄都會(huì)重置的密碼一樣
在SSL/TLS中,兩個(gè)通信方(客戶(hù)端和服務(wù)器)在任何通信最開(kāi)始的TLS握手期間生成4個(gè)會(huì)話(huà)密鑰。盡管TLS的官方RFC 實(shí)際上并未將這些密鑰稱(chēng)為"會(huì)話(huà)密鑰" ,但是從功能上講,這就是它們的本質(zhì)。
什么是會(huì)話(huà)?
會(huì)話(huà)本質(zhì)上是一個(gè)對(duì)話(huà)。會(huì)話(huà)通過(guò)網(wǎng)絡(luò)進(jìn)行,并且當(dāng)兩個(gè)設(shè)備相互確認(rèn)并打開(kāi)虛擬連接時(shí)開(kāi)始,并隨著兩個(gè)設(shè)備在彼此獲得了所需信息并發(fā)送"完成"消息時(shí)而結(jié)束,就像兩個(gè)人正在互相發(fā)短信一樣,他們會(huì)通過(guò)說(shuō)"之后再聊”來(lái)結(jié)束對(duì)話(huà)。連接也可能由于不活動(dòng)而超時(shí)結(jié)束,就像如果兩個(gè)人正在發(fā)短信但停止了互相回復(fù)。
會(huì)話(huà)時(shí)間可以設(shè)定為固定的長(zhǎng)短,也可以隨兩個(gè)通信方的持續(xù)對(duì)話(huà)而繼續(xù)進(jìn)行。如果是前者,則會(huì)話(huà)將在一定時(shí)間后到期;在TLS加密的情況下,這兩個(gè)設(shè)備將必須交換信息并生成新的會(huì)話(huà)密鑰以重新打開(kāi)連接。
什么是加密密鑰?
在加密中,密鑰是一串?dāng)?shù)據(jù),用于更改消息以使消息變得加密(換句話(huà)說(shuō),以便使數(shù)據(jù)顯得隨機(jī)或混亂)。密鑰還用于解密數(shù)據(jù),或?qū)⑵鋸募訑_的形式轉(zhuǎn)換為原始形式。(請(qǐng)參閱什么是加密密鑰? 了解更多。)
什么是對(duì)稱(chēng)加密?什么是非對(duì)稱(chēng)加密?
在對(duì)稱(chēng)加密中,對(duì)話(huà)的雙方使用完全相同的密鑰進(jìn)行加密和解密。在使用對(duì)稱(chēng)加密的會(huì)話(huà)中,可以使用多個(gè)密鑰,但是使用一個(gè)密鑰加密的消息將使用同一密鑰才能解密。
與對(duì)稱(chēng)加密中同一個(gè)密鑰可進(jìn)行加密和解密有所不同,非對(duì)稱(chēng)加密中有兩個(gè)密鑰,用其中一個(gè)密鑰加密的數(shù)據(jù)只能用另一個(gè)密鑰解密。這也稱(chēng)為公共密鑰加密 ,因?yàn)槠渲幸粋€(gè)密鑰是公共共享的。
HTTPS使用對(duì)稱(chēng)還是非對(duì)稱(chēng)加密?
HTTPS是具有 TLS 加密協(xié)議的HTTP,同時(shí)使用這兩種類(lèi)型的加密。TLS 上的所有通信都從 TLS 握手開(kāi)始。非對(duì)稱(chēng)加密對(duì)于 TLS 握手的正常運(yùn)轉(zhuǎn)至關(guān)重要。
在TLS握手過(guò)程中,兩個(gè)通信設(shè)備將建立四個(gè)會(huì)話(huà)密鑰,這些密鑰將用于其余會(huì)話(huà)的對(duì)稱(chēng)加密。通常,這兩個(gè)通信設(shè)備之一是客戶(hù)端或者是諸如筆記本電腦或智能手機(jī)之類(lèi)的用戶(hù)設(shè)備,另一個(gè)是任何能托管網(wǎng)站的網(wǎng)頁(yè)服務(wù)器。
TLS握手如何運(yùn)作?
在TLS握手 期間,客戶(hù)端和服務(wù)器彼此發(fā)送隨機(jī)數(shù)據(jù),用于分別進(jìn)行計(jì)算,然后得出相同的會(huì)話(huà)密鑰。三種隨機(jī)生成的數(shù)據(jù)會(huì)從一側(cè)發(fā)送到另一側(cè):
"客戶(hù)端隨機(jī)數(shù)" :這是客戶(hù)端發(fā)送到服務(wù)器的隨機(jī)字符串。
"服務(wù)器隨機(jī)數(shù)" :與客戶(hù)端服務(wù)器隨機(jī)數(shù)相似,不同之處在于它是由服務(wù)器將其發(fā)送給客戶(hù)端。
" Premaster機(jī)密" :這是另一串?dāng)?shù)據(jù)。在某些版本的TLS握手中,客戶(hù)端會(huì)生成此機(jī)密,使用公鑰加密并將其發(fā)送到服務(wù)器;在其他版本中,客戶(hù)端和服務(wù)器使用商定的算法參數(shù)自行生成Premaster機(jī)密,以達(dá)到相同的結(jié)果。
TLS握手使用非對(duì)稱(chēng)加密,以使服務(wù)器通過(guò)隨機(jī)性向攻擊者隱藏(通過(guò)使用私鑰加密),或者允許服務(wù)器對(duì)其中一個(gè)消息進(jìn)行數(shù)字"簽名" ,以便客戶(hù)端知道服務(wù)器的真實(shí)來(lái)源(就像簽名有助于在現(xiàn)實(shí)生活中驗(yàn)證某人的身份一樣)。服務(wù)器使用私鑰對(duì)某些數(shù)據(jù)進(jìn)行加密,而客戶(hù)端使用公鑰對(duì)其進(jìn)行解密,從而證明服務(wù)器具有正確的密鑰并且是合法的。
TLS握手中的“master機(jī)密”是什么?
Master機(jī)密是通過(guò)算法將客戶(hù)端隨機(jī)數(shù)、服務(wù)器隨機(jī)數(shù)和Premaster密碼組合在一起的最終結(jié)果??蛻?hù)端和服務(wù)器分別有這三個(gè)信息,因此他們應(yīng)該能夠得出相同的Master機(jī)密結(jié)果。
客戶(hù)端和服務(wù)器然后使用master機(jī)密計(jì)算得出僅在該會(huì)話(huà)中使用的幾個(gè)會(huì)話(huà)密鑰,確切地說(shuō)是4個(gè)會(huì)話(huà)密鑰。
在TLS握手中,從master機(jī)密生成哪4個(gè)會(huì)話(huà)密鑰?
在每個(gè)TLS握手中創(chuàng)建的4個(gè)會(huì)話(huà)密鑰是:
"客戶(hù)端寫(xiě)入密鑰(client write key)”
"服務(wù)器寫(xiě)入密鑰(server write key)“
"客戶(hù)端寫(xiě)入MAC密鑰(client write MAC key)"
"服務(wù)器寫(xiě)入MAC密鑰(client write MAC key)"
客戶(hù)端寫(xiě)入密鑰是客戶(hù)端用來(lái)加密其消息的密鑰??蛻?hù)端寫(xiě)入密鑰是對(duì)稱(chēng)密鑰,客戶(hù)端和服務(wù)器都有。這使服務(wù)器可以使用相同的密鑰解密來(lái)自客戶(hù)端的消息。
服務(wù)器寫(xiě)入密鑰與客戶(hù)端寫(xiě)入密鑰相同,只是它處在服務(wù)器端。概括來(lái)講:從客戶(hù)端到服務(wù)器的消息使用客戶(hù)端寫(xiě)入密鑰加密,服務(wù)器使用客戶(hù)端寫(xiě)入密鑰解密它們。服務(wù)器到客戶(hù)端的消息使用服務(wù)器寫(xiě)入密鑰加密,客戶(hù)端使用服務(wù)器寫(xiě)入密鑰來(lái)解密它們。(整個(gè)過(guò)程由客戶(hù)端設(shè)備或?yàn)g覽器處理;用戶(hù)本身不必執(zhí)行任何加密或解密操作。)
MAC(消息身份驗(yàn)證代碼)密鑰用于對(duì)消息進(jìn)行數(shù)字簽名。服務(wù)器使用服務(wù)器寫(xiě)入MAC密鑰對(duì)消息進(jìn)行簽名,并且當(dāng)客戶(hù)端收到消息時(shí),它可以對(duì)照自己的服務(wù)器MAC密鑰記錄檢查使用的MAC密鑰,以確保其合法性??蛻?hù)端則使用客戶(hù)端寫(xiě)入MAC密鑰簽署消息。
每個(gè)新的通信會(huì)話(huà)和新的TLS握手都會(huì)創(chuàng)建一組4個(gè)全新的會(huì)話(huà)密鑰。會(huì)有一個(gè)不同的客戶(hù)端寫(xiě)入密鑰、服務(wù)器寫(xiě)入密鑰等等,但是每次都會(huì)創(chuàng)建這4種類(lèi)型的密鑰。