数字签名和数字证书
本文介绍了RSA加密和数字签名的基本原理,以及数字证书的由来。
密钥加密
- A有一对成对的钥匙,一把为公钥,一把为私钥
- 公钥可以发送给别人,私钥只能自己保存
- 公钥私钥加密原理基于大质数分解
- 加密流程
- A将自己的公钥发送给B
- 这时,B要发送信息给A,B利用A的公钥加密要发送的内容然后发给A
- A收到加密信息后利用自己的私钥解密
- 只要A的私钥不泄露,信息就是安全的,即使落在别人手里,也无法解密。
数字签名
步骤1:生成摘要(MD5)
- A对信息使用hash函数(常用的MD5等)生成一个摘要(Digest)
步骤2:非对称加密(RSA1/2)
- A对这个摘要用私钥加密,生成数字签名(signature)
- A将数字签名附在要发送的信息后发送给B
- B对数字签名用公钥解密,得到信息的摘要
- B对信息本身使用hash函数,将得到的结果和上一步的摘要进行比对,如果两者一致,则说明信息未被改动
- 如果这时,C用自己的公钥替换了A的公钥,那么C就可以冒充A,让B用C的公钥解密C发送的信息
- 因此,这里需要一个具有公信力的机构(证书中心 certificate authority,简称CA)为公钥进行认证,这时就引出数字证书
RSA加密算法区别
开放平台签名算法名称 | 标准签名算法名称 | 备注 |
---|---|---|
RSA2 | SHA256WithRSA | 强制要求RSA密钥的长度至少为2048 |
RSA | SHA1WithRSA | 对RSA密钥的长度不限制,推荐使用2048位以上 |
数字证书
- 证书中心用自己的私钥,对A的公钥和一些相关信息一起加密,生成”数字证书”(Digital Certificate)
- 简而言之,数字证书就是对公钥进行加密的
- A今后发送加密信息时,除了附上数字签名外,再附上一个数字证书就可以保证自己的公钥不被冒充替换
- 实例:https协议
- 请求: 客户端向服务端发送加密请求
- 响应:服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
- 客户端(浏览器)的”证书管理器”,有”受信任的根证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
参考
- 阮一峰的数字签名是什么