這幾天在學(xué)習(xí)HTTP協(xié)議,在了解到HTTPS的時(shí)候?qū)ζ渲袔讉€(gè)概念不是很熟,特地整理一系列的文章來梳理下相關(guān)的概念。
關(guān)于文中所涉及的密碼學(xué)知識(shí),可以查考上一篇筆記。
這篇筆記主要解釋了“數(shù)字簽名”(digital signature)和“數(shù)字證書”(digital certificate)的概念。
原文網(wǎng)址:http://www.youdzone.com/signature.html
數(shù)字簽名是什么?
1.

鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。
2、

鮑勃把公鑰送給他們的朋友們:帕蒂、道格、蘇珊,每人一把。
3.

蘇珊要寫一份迷信給鮑勃,她寫完信用鮑勃的公鑰加密,可以保證信的保密性。
4.

鮑勃收到信后,用私鑰解密,就看到了信件的內(nèi)容。前提是只要鮑勃的私鑰不泄露,這封信就是安全的,即使落到別人手里,也無法解密。
5.

鮑勃給蘇珊回信,決定采用“數(shù)字簽名”。他寫完信后先用Hash函數(shù),生成信件的摘要(digest)。
6.

然后,鮑勃使用私鑰,對(duì)這個(gè)摘要加密,生成“數(shù)字簽名”(signature)。
7.

鮑勃將這個(gè)簽名,附在信件下面,一起發(fā)給蘇珊。
8.

蘇珊收到信后,取下數(shù)字簽名,用鮑勃的公鑰解密,得到信件的的摘要。由此證明,這封信確實(shí)是鮑勃發(fā)出的。
9.

蘇珊再對(duì)信件本身使用Hash摘要,將得到的結(jié)果和上一步得到的摘要進(jìn)行對(duì)比。如果兩者一致,說明信未被修改過。
10.

復(fù)雜的情況出現(xiàn)了。道格想欺騙蘇珊,他偷偷的使用了蘇珊的電腦,用自己的公鑰(道格沒有鮑勃的私鑰,偽造的鮑勃的公鑰)換走了鮑勃的公鑰。此時(shí),蘇珊實(shí)際擁有的的是道格的公鑰,但蘇珊還以為是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成“數(shù)字簽名”,寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進(jìn)行解密。
11.

后來,蘇珊感覺不對(duì)勁,發(fā)現(xiàn)自己無法確定公鑰是否真的屬于鮑勃。他想了一個(gè)辦法,要求鮑勃去找“證書中心(certificate authority,簡稱CA)”,為公鑰做認(rèn)證。證書中心的用自己的私鑰對(duì)鮑勃的公鑰和一些相關(guān)信息一起加密,生成“數(shù)字證書(Digital Certificate)”。
12.

鮑勃難道證書后,就放心了。以后再給蘇珊寫信,只要在簽名的同時(shí),再附上數(shù)字證書就行了。
13.

蘇珊收到信后,用CA的公鑰解開數(shù)字證書,就可以拿到公鑰了,然后就能證明“數(shù)字簽名”是否真是鮑勃簽的。
14.

下面我們看下應(yīng)用數(shù)字證書的實(shí)例:https協(xié)議。這個(gè)協(xié)議主要用于網(wǎng)頁加密。
15.

首先,客戶端向服務(wù)器發(fā)出加密請(qǐng)求。
16.

服務(wù)端用自己的私鑰加密網(wǎng)頁后,連同本身的數(shù)字證書,一起發(fā)送給客戶端。
17.

客戶端(瀏覽器)的“證書管理器”,有“受信任的根證書頒發(fā)機(jī)構(gòu)”列表。客戶端會(huì)根據(jù)這張列表查看解開數(shù)字證書的公鑰是否在列表內(nèi)。
18.

如果數(shù)字證書記載的網(wǎng)址與你正在瀏覽的網(wǎng)址不一致,就說明這張證書可能被冒用,瀏覽器就會(huì)發(fā)出警告。
19.

如果這張數(shù)字證書不是受信任的機(jī)構(gòu)頒發(fā)的,瀏覽器會(huì)發(fā)出另外一種警告。
20.

如果證書是可靠的,客戶端就可以使用證書中的服務(wù)器公鑰,對(duì)信息進(jìn)行加密,然后與服務(wù)器交換加密信息。
其他:
加密:公鑰加密、私鑰解密
認(rèn)證:私鑰加密、公鑰解密
談?wù)勎业睦斫猓鋵?shí)上面的例子從3個(gè)方面保證了信息的安全,信息內(nèi)容,發(fā)信人,收信人。
還是以信件為例,上面的信件來往案例把事情復(fù)雜化了,就以Susan給Bob單向發(fā)信為例,可以采取這樣的方式,分別解決了如下3個(gè)問題:
(1)信息內(nèi)容安全:保證Susan發(fā)的信只有Bob能看(發(fā)信:Bob公鑰加密=》收信:Bob私鑰解密,除了Bob其他人看不了)
(2)發(fā)信人安全:保證Bob收到的信確實(shí)是Susan發(fā)的(發(fā)信:信件本身使用Bob公鑰加密=》收信:Bob私鑰解密=》HASH函數(shù)得到摘要;數(shù)字簽名:使用Susan私鑰加密=》收到后使用Susan公鑰解密=》得到摘要=》兩個(gè)摘要對(duì)比)。核對(duì)一致后,Bob保證信一定是Susan發(fā)的,因?yàn)橹挥蠸usan的公鑰才能解密數(shù)字簽名。但Susan發(fā)信的時(shí)候不一定保證發(fā)給了Bob,她不知道用的Bob的公鑰是不是正確的。
(3)收信人安全:保證Susan發(fā)信一定是給Bob發(fā)的,所以通過引入權(quán)威的證書機(jī)構(gòu)來發(fā)布數(shù)字證書,相當(dāng)于一個(gè)公證機(jī)構(gòu),把大家的公鑰搜集到一起進(jìn)行公證和公示,然后大家去獲取這樣的數(shù)字證書,他們說這個(gè)是Bob,那大家都信任這個(gè)就是Bob。
總結(jié)來說,數(shù)字簽名就是保證發(fā)信人安全的(我簽的我認(rèn)賬),數(shù)字證書是保證收信人安全的(權(quán)威機(jī)構(gòu)說的,他是誰,大家都信)。
[參考]
阮一峰 - 什么是數(shù)字證書