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