什么是数字签名
数字签名采用非对称密码体制(公钥密码体制),即发送者 使用 私钥加密数据 ,接收者 使用 对应的公钥 解密数据,它具有以下功能:
① 报文鉴别 : 用于 证明来源 , 接收者 可以 通过签名 确定 是哪个发送者 进行的签名 ;
② 防止抵赖 : 防止 发送者 否认签名 , 发送者 一旦签名 , 标记就打上了 , 无法抵赖 ;
③ 防止伪造 : 防止 接收者 伪造 发送者 的签名 。
数字签名验证过程:
![](https://pic4.zhimg.com/80/v2-45bef59f22d16bac16e41ce888f53667_1440w.webp)
图中用户A使用数字签名向用户B传输文件的过程:
1、首先,文件经过单向散列函数的处理得到一份占128位的摘要。其中,文件和文件的摘要具有很强的对应关系,只要文件发生改动,经过单向散列函数处理后得到地摘要都会不一样。
2、用户A使用自己的私钥对摘要进行加密,得到加密的摘要。
3、用户A把文件、加密的摘要和公钥一起发给用户B。
4、用户B收到A传过来的信息后,首先将其中的文件也采用单向散列函数处理得出一份128位摘要,然后使用A的公钥对收到的加密的摘要进行解密得到另一份128位摘要。
5、把上一步得到的两份摘要进行比较,如果两份摘要相等,说明文件经过用户A签名之后,在传输的过程中没有被更改;若不相等,说明文件在传输过程中被更改了,或者说已经不是原来的文件了,此时用户A的签名失效。
上面过程中,用户A使用私钥对由文件生成的128位摘要进行加密的过程称为数字签名的过程,得到的"加密的摘要",称为该文件的数据签名。
上面例子传输过程中,用户A使用数字签名时给用户B发送了一个数据包,数据包中包含了A的公钥、文件和加密的摘要。那么问题来了:用户B如何确定收到的公钥是用户A发送的,而不是他人冒充用户A发送的呢?这时就需要有一个双方都信任的第三方证书颁发机构来协调。
证书颁发机构,即认证中心CA (Certification Authority),将公钥与其对应的实体(人或机器)进行绑定(binding);即给公司或个人颁发证书。
认证中心一般由政府出资建立。每个实体都有CA 发来的证书(certificate),里面有公钥及其拥有者的标识信息。此证书被 CA 进行了数字签名。任何用户都可从可信的地方获得认证中心 CA 的公钥,此公钥用来验证某个公钥是否为某个实体所拥有。
![](https://pic2.zhimg.com/80/v2-f9dcea96e7bac1c453e8e8247514aa4d_1440w.webp)
- 用户A向证书颁发机构提交个人信息,申请证书。通过CA审核后,CA生成用户A的证书,证书中包括了A的公钥和私钥还有CA的数字签名。证书颁发机构CA本身拥有一对密钥,这是对CA所颁发的证书进行数字签名和保密的基础,绝不能泄露。
- 用户A收到的证书中包括了带有CA数字签名的,专属A的公钥和私钥,CA的数字签名确保了别人不能伪造用户A的公钥和私钥。
- 同时,用户B也必须信任给用户A颁发证书的第三方认证机构CA,即用户B拥有CA颁发的"CA公钥"。
- 通信时,用户A向用户B发送的数据包中的"加密的摘要"上有用户A的数字签名,“A公钥” 上有认证机构CA的数字签名。用户B收到数据包之后,先要验证收到的 “A公钥” 是否来源合法:是认证机构颁发的带有CA签名的公钥吗?用户B并不信任用户A,但是用户B信任第三方认证机构CA。所以,用户B先使用证书颁发机构颁发的 "CA公钥" 验证收到的 "A公钥" 是否由同一认证机构颁发,是否在颁发之后更改过。
- 上一步验证通过后,用户B便相信收到的 "A公钥" 确实来自真实的用户A。随后再使用 "A公钥" 对 "加密的摘要" 进行解密得到另一份128位摘要,再将收到信息中的文件也采用单向散列函数处理得出一份128位摘要,然后将得到的两份摘要进行对比操作,以判断文件是否更改。