这几天在学习HTTP协议,在了解到HTTPS的时候对其中几个概念不是很熟,特地整理一系列的文章来梳理下相关的概念。
关于文中所涉及的密码学知识,可以查考上一篇笔记。
这篇笔记主要解释了“数字签名”(digital signature)和“数字证书”(digital certificate)的概念。
原文网址:http://www.youdzone.com/signature.html
数字签名是什么?
1.
鲍勃有两把钥匙,一把是公钥,另一把是私钥。
2、
鲍勃把公钥送给他们的朋友们:帕蒂、道格、苏珊,每人一把。
3.
苏珊要写一份迷信给鲍勃,她写完信用鲍勃的公钥加密,可以保证信的保密性。
4.
鲍勃收到信后,用私钥解密,就看到了信件的内容。前提是只要鲍勃的私钥不泄露,这封信就是安全的,即使落到别人手里,也无法解密。
5.
鲍勃给苏珊回信,决定采用“数字签名”。他写完信后先用Hash函数,生成信件的摘要(digest)。
6.
、然后,鲍勃使用私钥,对这个摘要加密,生成“数字签名”(signature)。
7.
鲍勃将这个签名,附在信件下面,一起发给苏珊。
8.
苏珊收到信后,取下数字签名,用鲍勃的公钥解密,得到信件的的摘要。由此证明,这封信确实是鲍勃发出的。
9.
苏珊再对信件本身使用Hash摘要,将得到的结果和上一步得到的摘要进行对比。如果两者一致,说明信未被修改过。
10.
复杂的情况出现了。道格想欺骗苏珊,他偷偷的使用了苏珊的电脑,用自己的公钥(道格没有鲍勃的私钥,伪造的鲍勃的公钥)换走了鲍勃的公钥。此时,苏珊实际拥有的的是道格的公钥,但苏珊还以为是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成“数字签名”,写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
11.
后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。他想了一个办法,要求鲍勃去找“证书中心(certificate authority,简称CA)”,为公钥做认证。证书中心的用自己的私钥对鲍勃的公钥和一些相关信息一起加密,生成“数字证书(Digital Certificate)”。
12.
鲍勃难道证书后,就放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
13.
苏珊收到信后,用CA的公钥解开数字证书,就可以拿到公钥了,然后就能证明“数字签名”是否真是鲍勃签的。
14.
下面我们看下应用数字证书的实例:https协议。这个协议主要用于网页加密。
15.
首先,客户端向服务器发出加密请求。
16.
服务端用自己的私钥加密网页后,连同本身的数字证书,一起发送给客户端。
17.
客户端(浏览器)的“证书管理器”,有“受信任的根证书颁发机构”列表。客户端会根据这张列表查看解开数字证书的公钥是否在列表内。
18.
如果数字证书记载的网址与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器就会发出警告。
19.
如果这张数字证书不是受信任的机构颁发的,浏览器会发出另外一种警告。
20.
如果证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
其他:
加密:公钥加密、私钥解密
认证:私钥加密、公钥解密
谈谈我的理解,其实上面的例子从3个方面保证了信息的安全,信息内容,发信人,收信人。
还是以信件为例,上面的信件来往案例把事情复杂化了,就以Susan给Bob单向发信为例,可以采取这样的方式,分别解决了如下3个问题:
(1)信息内容安全:保证Susan发的信只有Bob能看(发信:Bob公钥加密=》收信:Bob私钥解密,除了Bob其他人看不了)
(2)发信人安全:保证Bob收到的信确实是Susan发的(发信:信件本身使用Bob公钥加密=》收信:Bob私钥解密=》HASH函数得到摘要;数字签名:使用Susan私钥加密=》收到后使用Susan公钥解密=》得到摘要=》两个摘要对比)。核对一致后,Bob保证信一定是Susan发的,因为只有Susan的公钥才能解密数字签名。但Susan发信的时候不一定保证发给了Bob,她不知道用的Bob的公钥是不是正确的。
(3)收信人安全:保证Susan发信一定是给Bob发的,所以通过引入权威的证书机构来发布数字证书,相当于一个公证机构,把大家的公钥搜集到一起进行公证和公示,然后大家去获取这样的数字证书,他们说这个是Bob,那大家都信任这个就是Bob。
总结来说,数字签名就是保证发信人安全的(我签的我认账),数字证书是保证收信人安全的(权威机构说的,他是谁,大家都信)。
[参考]
阮一峰 - 什么是数字证书
网友评论