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