從頭開始HTTPS-兩類密碼體制
名詞解釋
明文
:經(jīng)過加密之前的信息薄货,一般是人類可直接閱讀的文字。本文公式中使用X表示明文秉馏。
密文
:經(jīng)過加密之后的信息,密文對原始信息進行了加密處理后變成了不可讀的信息朋蔫。不可讀指無法還原出原來的信息。本文公式中却汉,使用Y表示密文驯妄。
密鑰
:用來對明文進行加密。本文公式中合砂,使用K表示青扔。
E運算
: 加密(encrypt)運算
D運算
:解密(decrypt)運算
場景:
漕河涇程序員A對張江程序員B說: Hello,World!
本文將圍繞該場景展開,介紹兩類密碼體制的概念以及主要過程翩伪。
1. 對稱密鑰密碼體制
所謂對稱密鑰密碼體制微猖,即加密密鑰與解密密鑰是相同的密碼體制。即明文經(jīng)過密碼加密后形成的密文缘屹,可使用相同的密碼解密為加密之前的明文凛剥。使用公式表示如下
Y=EK(X)
X=DK(Y)
DK(Y)=DK(EK(X)) = X
假設(shè)A向B使用對稱密鑰密碼體制發(fā)送消息,主要過程如下:
- A,B協(xié)商出使用英文這個密碼Kab來對消息加密
- A使用英文對消息進行加密E轻姿,形成密文Y,即
Y=EKab(X)
- B收到密文后犁珠,對密文進行解密計算D,形成明文X踢代,即
X=DKab(Y)
使用對稱密鑰密碼體制進行加密的前提是通信雙方均知道該密鑰盲憎。在該場景中嗅骄,由于A,B均知道英文這個密鑰胳挎,因此,對于不知道該密鑰的人來說溺森,即便獲得了該密文,也無從知曉A跟B說了什么。
2.公鑰密碼體制
公鑰密碼體制使用不同的加密密鑰與解密密鑰获黔。即密文解密所需要的密鑰宾舅,與加密所使用的密鑰不同。
在公鑰密碼體制中炊林,加密密鑰PK(public key姥卢,即公鑰)是公開的,而解密密鑰SK(secret key,即私鑰)是需要保密的渣聚。
假設(shè)A向B使用公鑰密碼體制發(fā)送消息独榴,主要過程如下:
- 密鑰對產(chǎn)生器產(chǎn)生接受者B的一對密鑰,加密密鑰PKb和解密密鑰SKb奕枝。B將PKb公開棺榔,是A可以獲得。
- 消息發(fā)送者A使用B的加密密鑰PKb對消息進行加密得到要傳輸?shù)拿芪腨隘道,即
Y=EPKb(X)
- 消息接收者B使用解密密鑰SKb對密文Y進行解密運算D症歇,得到A發(fā)送過來的明文郎笆。即
X=DSKb(Y)
- DPKb(Y)≠X。即使用B的加密密鑰不能解密使用B的加密密鑰加密的信息忘晤。
- 雖然使用計算機可以很容易的產(chǎn)生密鑰對SKb和PKb宛蚓,但從已知的PKb推導(dǎo)出SKb是在計算上不可能的
應(yīng)用案例
iMessage的端到端加密
過程說明:
user1與user2在啟用iMessage時,生成一對解密密鑰和加密密鑰设塔,解密密鑰在本地保存苍息,加密密鑰上傳至蘋果服務(wù)器。
user1向user2發(fā)送消息時壹置,先向蘋果服務(wù)器請求user2的加密密鑰竞思。獲得后,將消息使用user2的加密密鑰加密后钞护,將密文發(fā)送給蘋果服務(wù)器盖喷。
蘋果服務(wù)器將消息發(fā)送給user2。user2收到蘋果服務(wù)器發(fā)送過來的密文后难咕,使用本地保存的自己的解密密鑰解密消息课梳,即可獲取明文。
在程序員對話的場景中余佃,A的音色即是公鑰暮刃,只是,在此處并沒有進行對消息本身的加密爆土,而是椭懊,對消息進行簽名,即讓B確認(rèn),這句話確實是A說的步势。而B因為有對A音色的記憶氧猬,此處,對A的消息進行了鑒別坏瘩。
數(shù)字簽名
為了證明書信或文件的真實性盅抚,需要發(fā)送者進行親筆簽名或蓋章。同理倔矾,為了證明計算機網(wǎng)絡(luò)中消息的發(fā)送者的真實性妄均,需要使用數(shù)字簽名。數(shù)字簽名應(yīng)至少具備以下三個特性:
- 報文鑒別哪自,即接收者能夠核實消息發(fā)送者丰包,也就是說接受者能確認(rèn)該消息確實是消息中聲稱的發(fā)送者發(fā)送的。
- 報文完整提陶,即接收者能夠核實接收到的消息是完整且未經(jīng)過篡改的烫沙。
- 不可否認(rèn),即發(fā)送者時候不能抵賴對消息的簽名隙笆。
數(shù)字簽名的實現(xiàn)
A使用自己的解密密鑰SKa對報文X進行D運算锌蓄。將密文傳送給B升筏。B使用A的加密密鑰PKa對收到的密文進行E運算。還原出明文瘸爽。
- 由于加密密鑰與解密密鑰是成對出現(xiàn)的您访。根據(jù)其中一個并不能計算出另外一個。因此剪决,當(dāng)B使用PKa對密文進行解密后灵汪,該報文必然是A使用自己的SKa進行D運算而得出來的。實現(xiàn)了報文鑒別柑潦。
- 如果密文Y在傳送過程中被第三方篡改享言,因為第三方?jīng)]有SKa。當(dāng)B使用PKa對密文進行解密后渗鬼,所獲得的報文可以認(rèn)為是不可讀的览露。或者在傳輸過程中譬胎,丟是了報文的部分差牛。當(dāng)B使用PKa對密文進行解密后,所獲得的報文可以認(rèn)為是不可讀的堰乔。這樣就實現(xiàn)了報文完整性的驗證偏化。
- 因為只要A掌握SKa。若A對曾發(fā)出的密文Y抵賴镐侯。則公正方很容易使用A掌握的SKa進行驗證侦讨。這樣就實現(xiàn)了不可否認(rèn)。
上述過程雖然傳輸?shù)氖敲芪腨析孽。但由于A的PKa是公開的搭伤,所以,并沒有對傳送報文內(nèi)容保密袜瞬。若要在簽名的基礎(chǔ)上進行加密。則可以使用在原來的過程中身堡,增加在發(fā)送前使用接收者的加密密鑰PKb進行D運算的步驟邓尤,來確保內(nèi)容只有接收者B使用自己只有自己掌握的SKb來解密。
鑒別
報文鑒別
由于使用公鑰密碼體制進行加解密計算量較大贴谎,因此汞扎,對于很多不需要加密但需要簽名的情況。使用消息摘要配合數(shù)字簽名來實現(xiàn)報文鑒別擅这。
報文鑒別的公式如下:
Y=(X,D(H(X)))
其中澈魄,
H(X)表示對原文進行H(報文摘要算法)運算。
D(H(X))表示使用發(fā)送者SK對報文摘要進行D運算仲翎。
報文發(fā)送時痹扇,將明文附加上明文摘要的數(shù)字簽名一同發(fā)送铛漓。接受者收到報文后,對明文部分進行報文摘要運算鲫构,然后使用發(fā)送者的PK對數(shù)字簽名部分進行解密浓恶,若得出的結(jié)果與自行計算的報文摘要相同,則表明對該報文鑒別成功结笨。即報文可信包晰。
報文摘要:
報文摘要算法是一種精心選擇的單向散列函數(shù)。對一串長度不固定的內(nèi)容炕吸,使用報文摘要算法計算后伐憾,能得出一串長度固定的值。而從摘要算法的結(jié)果赫模,是不可能推算出摘要的內(nèi)容的塞耕。常見的報文摘要算法有MD5,SHA,SHA-1.
實體鑒別
使用對稱密鑰傳送鑒別實體身份的報文嘴瓤。過程如下:
消息發(fā)送者使用對稱密鑰算法將要發(fā)送的消息進行D運算扫外,消息接受者使用相同的密鑰將內(nèi)容解密后進行實體驗證。
使用該種方式容易引起重放攻擊廓脆,重放攻擊為第三方C截獲消息發(fā)送者A發(fā)送給消息接收者B的消息筛谚。雖然C并不知道AB之間約定的密鑰。但C可以簡單的保存A發(fā)送給B的密文停忿,然后發(fā)送給B驾讲。使B認(rèn)為C就是A,從而將要發(fā)送給A的消息錯誤的傳送給了C席赂。
為了解決重放攻擊吮铭,可以使用不重數(shù)。不重數(shù)是一個不重復(fù)使用的大隨機數(shù)颅停,即“一次一數(shù)”谓晌。在鑒別的過程中,不重數(shù)可以使B把重復(fù)的鑒別請求區(qū)分開癞揉。有不重數(shù)參與的實體鑒別過程如下:
- A將其身份以及一個不重數(shù)Ra使用明文發(fā)送給B.
- B將一個不重數(shù)Rb以及使用密鑰加密后的Kab(Ra)發(fā)送給A.
- A將Rb使用Kab加密后返回給B.
中間人攻擊
題外話
關(guān)于密鑰是讀作(mi4 yue4)還是(mi4 yao4)纸肉。在搜狗輸入法中,讀作yue4喊熟,但經(jīng)查柏肪,大多認(rèn)為,在密碼學(xué)中芥牌,該讀作(mi4 yao4)烦味。