公钥私钥加密解密数字证书数字签名详解
决心花一些时间,将这些概念和使用的过程彻底弄清楚。最先找到的文章是:数字签名是什么?(阮一峰博客),读了一遍,又找了一些资料,终于把这些概念弄清楚了,这里整理记录一下。
首先明确几个基本概念:
1、密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。
2、公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。
3、私钥,如上,用来解密公钥加密的数据。
4、摘要,对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。
5、签名,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。
6、签名验证,数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。
上面实际上介绍了加密解密和数字签名两个概念和实现过程,二者的过程正好是相反的。
在签名的过程中,有一点很关键,收到数据的一方,需要自己保管好公钥,但是要知道每一个发送方都有一个公钥,那么接收数据的人需要保存非常多的公钥,这根本就管理不过来。并且本地保存的公钥有可能被篡改替换,无从发现。怎么解决这一问题了?由一个统一的证书管理机构来管理所有需要发送数据方的公钥,对公钥进行认证和加密。这个机构也就是我们常说的CA。认证加密后的公钥,即是证书,又称为CA证书,证书中包含了很多信息,最重要的是申请者的公钥。
CA机构在给公钥加密时,用的是一个统一的密钥对,在加密公钥时,用的是其中的私钥。这样,申请者拿到证书后,在发送数据时,用自己的私钥生成签名,将签名、证书和发送内容一起发给对方,对方拿到了证书后,需要对证书解密以获取到证书中的公钥,解密需要用到CA机构的”统一密钥对“中的公钥,这个公钥也就是我们常说的CA根证书,通常需要我们到证书颁发机构去下载并安装到相应的收取数据的客户端,如浏览器上面。这个公钥只需要安装一次。有了这个公钥之后,就可以解密证书,拿到发送方的公钥,然后解密发送方发过来的签名,获取摘要,重新计算摘要,作对比,以验证数据内容的完整性。
这里纯粹的文字,未免枯燥,可以结合前面提到的文章链接中的图片一起理解,这些文字对图片的理解应该有一些帮助。HTTPS是综合用了加密解密和数字签名的实例,理解了上述概念和过程,结合密钥对交换的过程就不难理解HTTPS。
建议继续学习:
- 网址加密(URL加密)(RC4、PHP、密钥长度可变) (阅读:6933)
- RSA 公钥格式转换之PHP实现 (阅读:5004)
- 为什么要用公钥/私钥而不是密码去做SSH身份验证 (阅读:4700)
- HTTPS、SSL与数字证书介绍 (阅读:4555)
- 在浏览器中加密Cookie (阅读:4573)
- 代理的加密部分 (阅读:4526)
- 使用bcompiler对PHP文件进行加密 (阅读:4346)
- 使用系统命令实现文件的压缩与加密 (阅读:4031)
- 可逆的加密方法(Mcrypt Encryption Functions) (阅读:3710)
- 加密你的shell (阅读:3616)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:童燕群 来源: 忘我的追寻
- 标签: 公钥 加密 数字证书 私钥 签名 解密
- 发布时间:2014-04-21 12:44:29
- [42] IOS安全–浅谈关于IOS加固的几种方法
- [41] 图书馆的世界纪录
- [41] 界面设计速成
- [40] Oracle MTS模式下 进程地址与会话信
- [40] 如何拿下简短的域名
- [38] android 开发入门
- [37] 【社会化设计】自我(self)部分――欢迎区
- [35] 读书笔记-壹百度:百度十年千倍的29条法则
- [35] 视觉调整-设计师 vs. 逻辑
- [34] 程序员技术练级攻略