数字签名是什么?
数字签名是什么?
今天,我读到一篇好文章。
它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。
我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚。读完这篇文章后,发现思路一下子就理清了。为了加深记忆,我把文字和图片都翻译出来了。
文中涉及的密码学基本知识,可以参见我以前的笔记。
====================================================
数字签名是什么?
作者:David Youd
翻译:阮一峰
原文网址: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.
如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
(完)
towry 说:
太棒了,真的,非常有帮助,谢谢!!!
2011年8月 9日 20:51 | # | 引用
落水狗 说:
加上图片以后确实清晰了很多,这个真的很好。
2011年8月 9日 22:14 | # | 引用
33ad3 说:
说实话,还是有点迷糊
2011年8月 9日 22:16 | # | 引用
fenghanzhao 说:
还是有点模糊!没太明白!
2011年8月 9日 22:29 | # | 引用
Xtrats 说:
道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。
-----------
有鲍勃的公钥就可以冒充鲍勃?
道格自己不也有鲍勃的公钥么?“每人一把”。
2011年8月 9日 23:01 | # | 引用
阮一峰 说:
只有有了鲍勃的私钥,才能冒充鲍勃。
道格没有鲍勃的私钥,只好伪造鲍勃的公钥。
2011年8月 9日 23:22 | # | 引用
Michael.Z 说:
还是有些模糊,需要慢慢理解。
有一个问题,公钥和私钥的算法是一样的吗?为什么私钥加密可以用公钥解密?
2011年8月10日 01:36 | # | 引用
febird 说:
11.
"证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。"
13.
"苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。"
有个疑问,鲍勃的证书中鲍勃的公钥有没有被加密?
1. 如果加密了,则苏珊必须能从某个地方获取CA的公钥方能和鲍勃通信,这CA公钥要么随证书附送,要么预先存放在苏珊的电脑中。
2. 如果鲍勃的公钥被加密,同时CA的公钥也在证书中附送,那加密鲍勃公钥有什么意义?
3. 如果鲍勃的公钥被加密,且CA的公钥只是预先存放在苏珊的电脑中,那么经过其他未授权CA颁发的无效证书不能被解开,从而无法得到鲍勃的公钥,但这似乎不合理,举个例子,浏览器能够在HTTPS证书不在证书列表的情况下继续通信。
2011年8月10日 02:37 | # | 引用
史诗在线 说:
CNNIC也有根证书了,不过我把它屏蔽了。
2011年8月10日 02:40 | # | 引用
blue gene 说:
道格用自己的私钥加密发给苏珊的信件,苏珊收到信件后用道格的公钥自然能正常解密该信件,但是苏珊以为她收到的是鲍勃的信件,并且认为是用鲍勃的公钥来解密的,自然认为发信的就是鲍勃,所以道格就达到了伪造鲍勃与苏珊通讯的目的。
2011年8月10日 08:36 | # | 引用
ncsglz 说:
其实我觉得把三个人名换成中文名,会更容易理解一点,不然容易记不住,哈哈
大学的时候学过这玩意,当时也是一知半解,现在全明白了,太有用了
2011年8月10日 08:43 | # | 引用
ls zhao 说:
绝对的好文章,通俗易懂。分享了...谢谢
2011年8月10日 09:33 | # | 引用
xiongbo027 说:
既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?
2011年8月10日 09:50 | # | 引用
newuser 说:
1(前提是有权威的CA认证苏珊,保证确实是苏珊为鲍勃创造了数字证书)得先用苏珊自己的公钥检查鲍勃的数字证书,目的是为了证明苏珊创造了鲍勃的数字证书。
2在解密这个数字证书后,再检查是否鲍勃的数字证书由创造它的CA认证以及在创造鲍勃的数字证书时提供的关于鲍勃的相关信息是否发生了改变。
3帕特用通过解密数字证书得到的公匙(这个公匙苏珊为鲍勃创造数字证书所用的鲍勃的公匙)来检查鲍勃的签名,如果这个公匙确实能成功解密签名,证明确实这个签名是由鲍勃的私匙所创造,当然也证明了道格没有修改文档,因为MD没有变化。
道格确实有鲍勃的公匙,不过他用的是鲍勃的电脑和邮件,而且发给苏珊的是自己用鲍勃的姓名生成的key pair。
2011年8月10日 10:01 | # | 引用
CK 说:
xiongbo027 说:
既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?
==============================
其实我也有同上的问题,既然CA的公钥是公开的,那么有什么办法能保证别人无法替换掉CA的公钥呢
2011年8月10日 10:10 | # | 引用
Ciger 说:
公钥不需加密。
CA公钥无法伪造,因为CA公钥是可查的,比如在MSDN里可以查到微软用于签名driver的公钥(Base64码)。
2011年8月10日 10:17 | # | 引用