数字签名介绍
2017-01-16 10:58
141 查看
转载:http://www.blogjava.net/yxhxj2006/archive/2012/10/15/389547.html
原文网址:http://www.youdzone.com/signature.html
1.
![](http://image.beekka.com/blog/201108/bg2011080901.png)
鲍勃有两把钥匙,一把是公钥,另一把是私钥。
2.
![](http://image.beekka.com/blog/201108/bg2011080902.png)
鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
3.
![](http://image.beekka.com/blog/201108/bg2011080903.png)
苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
4.
![](http://image.beekka.com/blog/201108/bg2011080904.png)
鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
5.
![](http://image.beekka.com/blog/201108/bg2011080905.png)
鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
6.
![](http://image.beekka.com/blog/201108/bg2011080906.png)
然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。
7.
![](http://image.beekka.com/blog/201108/bg2011080907.png)
鲍勃将这个签名,附在信件下面,一起发给苏珊。
8.
![](http://image.beekka.com/blog/201108/bg2011080908.png)
苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
9.
![](http://image.beekka.com/blog/201108/bg2011080909.png)
苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
10.
![](http://image.beekka.com/blog/201108/bg2011080910.png)
复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
11.
![](http://image.beekka.com/blog/201108/bg2011080911.png)
后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
12.
![](http://image.beekka.com/blog/201108/bg2011080912.png)
鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
13.
![](http://image.beekka.com/blog/201108/bg2011080913.png)
苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。
14.
![](http://image.beekka.com/blog/201108/bg2011080914.jpg)
下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。
15.
![](http://image.beekka.com/blog/201108/bg2011080915.png)
首先,客户端向服务器发出加密请求。
16.
![](http://image.beekka.com/blog/201108/bg2011080916.png)
服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
17.
![](http://image.beekka.com/blog/201108/bg2011080917.png)
客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
18.
![](http://image.beekka.com/blog/201108/bg2011080918.png)
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
19.
![](http://image.beekka.com/blog/201108/bg2011080919.jpg)
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
20.
![](http://image.beekka.com/blog/201108/bg2011080920.png)
posted on 2012-10-15 02:37 奋斗成就男人 阅读(25613) 评论(31) 编辑 收藏
![](http://www.blogjava.net/yxhxj2006/aggbug/389547.html?webview=1)
# re:
useful for me 回复 更多评论
# re:
特别棒! 谢谢!@worker
回复 更多评论
# re:
很好,谢谢 回复 更多评论
# re:
太有用了,谢谢 回复 更多评论
# re:
那谁来保证ca的公钥是真的来自ca呢? 回复 更多评论
# re:
@Wu
有道理. 回复 更多评论
# re:
@Wu
苏珊可以每次都到CA的网站上(或者什么别的官方途径)获得CA的公钥。除非道格把CA 和鲍勃全都冒充掉。。。 回复 更多评论
# re:
11 回复 更多评论
# re:
写的非常的OK,非常的哇塞。。。 回复 更多评论
# re:
@文哥
111 回复 更多评论
# re:
2213 回复 更多评论
# re:
翻译人的原网址也要贴吧。。这样不好吧,少年 回复 更多评论
# re:
非常感谢 哈哈哈 终于弄懂了!! i get it !! 回复 更多评论
# re:
太好了 回复 更多评论
# re:
每个人都有bob公钥,那岂不是,bob用私钥加密的信息,他们之间都可以互相看到了吗? 回复 更多评论
# re:
@小崔
个人理解,bob用私钥加密信息,并发送给其他人这个动作,其关注点不在是否每个人都能看到。真实目的是为了验签:1.确认该信息确实是bob所发;2.确认bob发出的信息是完整的。 回复 更多评论
# re:
信任 回复 更多评论
# re:
可以用吗 回复 更多评论
# re:
真实目的是为了验签 回复 更多评论
# re:
@小wu
用公钥加密是防篡改,
用私钥加密是防泄漏 回复 更多评论
# re:
@ray
我说反了,sorry! 回复 更多评论
# re:
如果道格用自己的公钥和伪造的鲍勃的个人信息去证书中心认证,然后伪装成鲍勃给苏珊发信息怎么办?还是说证书中心有义务验证个人信息的正确性,确保加密的个人信息是正确的?希望大家能给解释一下 回复 更多评论
# re:
弱弱的问下,用公钥解密,用正确的可以解开,用错的公钥解不开,到底什么叫解得开,什么叫解不开,解不开有什么提示吗?是会报错,还是得到一串没有意义的字符?新手求指导!! 回复 更多评论
# re:
@小崔
其实是这样的,在发出一个信息的时候,不是用自己的私钥加密的,而是用对方的公钥加密,这样只有对方用自己的私钥才能解开别人发来的由自己的公钥加密的信息,确保了信息的安全性 回复 更多评论
# re:
苏珊长得真丑 回复 更多评论
# re:
@Six
你的关注点蛮屌的 回复 更多评论
# re:
帕帝表示你们竟然忽略了我,统统咔咔咔 回复 更多评论
# re:
所以,Bob给Susan的是明文,大家都可以看到的!而Susan给Bob的是密文!Bob如果想给Susan密文,那么Bob要用Susan的公钥加密对吧! 回复 更多评论
# re:
真的写的非常好,通俗易懂,但是不知道有demo没有,要是有求一份。 回复 更多评论
# re:
343434 回复 更多评论
# re:
@小崔
私钥在这个过程中只用于签名,也就是对摘要进行加密。作用是1确认信息来源2确认信息未被篡改。不会对原始数据进行加密,因此不承担数据不被窃取的职责。实际场景运用中,最终双方真正数据交互使用的是客户端(这里是Susan)随机生成的一把秘钥进行对称加密来完成。至于为什么使用对称加密?主要原因是加解密过程成本低。而客户端私钥如何安全指定地送达给服务端(Bob),这个过程就是靠前面的CA+非对称加密来完成。说简单点,就是Susan先验证并获取Bob的公钥,而后用公钥加密自己的随机秘钥,Bob用私钥获取到这把随机秘钥,而后双发就使用这把随机密钥进行加密通信了。
原文网址:http://www.youdzone.com/signature.html
1.
![](http://image.beekka.com/blog/201108/bg2011080901.png)
鲍勃有两把钥匙,一把是公钥,另一把是私钥。
2.
![](http://image.beekka.com/blog/201108/bg2011080902.png)
鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
3.
![](http://image.beekka.com/blog/201108/bg2011080903.png)
苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
4.
![](http://image.beekka.com/blog/201108/bg2011080904.png)
鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
5.
![](http://image.beekka.com/blog/201108/bg2011080905.png)
鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
6.
![](http://image.beekka.com/blog/201108/bg2011080906.png)
然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。
7.
![](http://image.beekka.com/blog/201108/bg2011080907.png)
鲍勃将这个签名,附在信件下面,一起发给苏珊。
8.
![](http://image.beekka.com/blog/201108/bg2011080908.png)
苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
9.
![](http://image.beekka.com/blog/201108/bg2011080909.png)
苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
10.
![](http://image.beekka.com/blog/201108/bg2011080910.png)
复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
11.
![](http://image.beekka.com/blog/201108/bg2011080911.png)
后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
12.
![](http://image.beekka.com/blog/201108/bg2011080912.png)
鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
13.
![](http://image.beekka.com/blog/201108/bg2011080913.png)
苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。
14.
![](http://image.beekka.com/blog/201108/bg2011080914.jpg)
下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。
15.
![](http://image.beekka.com/blog/201108/bg2011080915.png)
首先,客户端向服务器发出加密请求。
16.
![](http://image.beekka.com/blog/201108/bg2011080916.png)
服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
17.
![](http://image.beekka.com/blog/201108/bg2011080917.png)
客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
18.
![](http://image.beekka.com/blog/201108/bg2011080918.png)
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
19.
![](http://image.beekka.com/blog/201108/bg2011080919.jpg)
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
20.
![](http://image.beekka.com/blog/201108/bg2011080920.png)
posted on 2012-10-15 02:37 奋斗成就男人 阅读(25613) 评论(31) 编辑 收藏
评论
# re:
公钥与私钥 [未登录] 2014-01-08 17:43 worker
useful for me 回复 更多评论 # re:
公钥与私钥 2014-04-18 11:05 Eva
特别棒! 谢谢!@worker回复 更多评论
# re:
公钥与私钥 [未登录] 2014-06-11 17:10 mike
很好,谢谢 回复 更多评论 # re:
公钥与私钥 2014-11-10 17:05 游客
太有用了,谢谢 回复 更多评论 # re:
公钥与私钥 [未登录] 2014-11-26 10:13 Wu
那谁来保证ca的公钥是真的来自ca呢? 回复 更多评论 # re:
公钥与私钥 2014-12-10 08:59 vistor
@Wu有道理. 回复 更多评论
# re:
公钥与私钥 [未登录] 2014-12-16 19:52 owen
@Wu苏珊可以每次都到CA的网站上(或者什么别的官方途径)获得CA的公钥。除非道格把CA 和鲍勃全都冒充掉。。。 回复 更多评论
# re:
公钥与私钥 [未登录] 2015-02-04 10:49 1
11 回复 更多评论 # re:
公钥与私钥 2015-05-27 15:30 文哥
写的非常的OK,非常的哇塞。。。 回复 更多评论 # re:
公钥与私钥 2015-05-27 15:30 文哥
@文哥111 回复 更多评论
# re:
公钥与私钥 2015-05-27 15:30 文哥
2213 回复 更多评论 # re:
公钥与私钥 2015-06-23 17:04 路人
翻译人的原网址也要贴吧。。这样不好吧,少年 回复 更多评论 # re:
公钥与私钥 2015-07-24 02:21 Chrisheng
非常感谢 哈哈哈 终于弄懂了!! i get it !! 回复 更多评论 # re:
公钥与私钥 2015-08-15 15:20 jobsjia
太好了 回复 更多评论 # re:
公钥与私钥 2015-10-12 15:05 小崔
每个人都有bob公钥,那岂不是,bob用私钥加密的信息,他们之间都可以互相看到了吗? 回复 更多评论 # re:
公钥与私钥 2015-10-17 16:52 小wu
@小崔个人理解,bob用私钥加密信息,并发送给其他人这个动作,其关注点不在是否每个人都能看到。真实目的是为了验签:1.确认该信息确实是bob所发;2.确认bob发出的信息是完整的。 回复 更多评论
# re:
公钥与私钥 2015-11-12 01:09 陆克信
信任 回复 更多评论 # re:
公钥与私钥 2015-11-12 01:16 陆克信
可以用吗 回复 更多评论 # re:
公钥与私钥 2015-11-12 01:18 陆克信
真实目的是为了验签 回复 更多评论 # re:
公钥与私钥 [未登录] 2016-02-26 15:11 ray
@小wu用公钥加密是防篡改,
用私钥加密是防泄漏 回复 更多评论
# re:
公钥与私钥 [未登录] 2016-02-26 15:12 ray
@ray我说反了,sorry! 回复 更多评论
# re:
公钥与私钥 2016-02-27 11:53 小法
如果道格用自己的公钥和伪造的鲍勃的个人信息去证书中心认证,然后伪装成鲍勃给苏珊发信息怎么办?还是说证书中心有义务验证个人信息的正确性,确保加密的个人信息是正确的?希望大家能给解释一下 回复 更多评论 # re:
公钥与私钥 2016-02-27 13:38 小法
弱弱的问下,用公钥解密,用正确的可以解开,用错的公钥解不开,到底什么叫解得开,什么叫解不开,解不开有什么提示吗?是会报错,还是得到一串没有意义的字符?新手求指导!! 回复 更多评论 # re:
公钥与私钥 2016-03-11 15:01 万涛
@小崔其实是这样的,在发出一个信息的时候,不是用自己的私钥加密的,而是用对方的公钥加密,这样只有对方用自己的私钥才能解开别人发来的由自己的公钥加密的信息,确保了信息的安全性 回复 更多评论
# re:
公钥与私钥 2016-03-11 18:18 Six
苏珊长得真丑 回复 更多评论 # re:
公钥与私钥 [未登录] 2016-03-28 13:39 zy
@Six你的关注点蛮屌的 回复 更多评论
# re:
公钥与私钥 2016-03-31 15:06 ss
帕帝表示你们竟然忽略了我,统统咔咔咔 回复 更多评论 # re:
公钥与私钥 2016-04-04 00:27 SilentGene
所以,Bob给Susan的是明文,大家都可以看到的!而Susan给Bob的是密文!Bob如果想给Susan密文,那么Bob要用Susan的公钥加密对吧! 回复 更多评论 # re:
公钥与私钥 2016-04-29 10:23 Divella
真的写的非常好,通俗易懂,但是不知道有demo没有,要是有求一份。 回复 更多评论 # re:
公钥与私钥 2016-04-30 11:44 zhangsa
343434 回复 更多评论 # re:
公钥与私钥 2016-06-02 19:37 chinaltang
@小崔私钥在这个过程中只用于签名,也就是对摘要进行加密。作用是1确认信息来源2确认信息未被篡改。不会对原始数据进行加密,因此不承担数据不被窃取的职责。实际场景运用中,最终双方真正数据交互使用的是客户端(这里是Susan)随机生成的一把秘钥进行对称加密来完成。至于为什么使用对称加密?主要原因是加解密过程成本低。而客户端私钥如何安全指定地送达给服务端(Bob),这个过程就是靠前面的CA+非对称加密来完成。说简单点,就是Susan先验证并获取Bob的公钥,而后用公钥加密自己的随机秘钥,Bob用私钥获取到这把随机秘钥,而后双发就使用这把随机密钥进行加密通信了。
相关文章推荐
- 详谈Android apk打包:关于APK数字签名详解介绍
- 介绍DSA数字签名,非对称加密的另一种实现
- 为ActiveX制作数字签名 -- 介绍 (引)
- Microsoft.Net中数字签名技术介绍
- 数字签名相关概念介绍
- Windows驱动 HCK测试方法及数字签名使用方法介绍
- 详谈Android apk打包:关于APK数字签名详解介绍
- 数字证书介绍
- Java2下Applet数字签名
- 给控件做数字签名之三:进行数字签名
- 经典QQ自我介绍、个性签名
- 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被
- 使用 MSXML 5.0 或 .NET Framework 托管代码在 InfoPath 2003 中验证数字签名
- 可再发行平台 SDK:CAPICOM ,对数据进行数字签名、对代码签名、验证数字签名、包封保密数据、对数据进行散列处理、加密及解密数据的SDK
- Java加密和数字签名编程快速入门
- 从数字签名原理看电子商务安全
- Java加密和数字签名编程快速入门
- Java2下Applet数字签名具体实现方法
- 数字签名原理