数字签名和验证流程
签名的主要目的是验证身份,而不是加密,因此用私钥进行签名,公钥验证签名,传输过程中消息不需要加密
签名生成流程图
数字签名技术的本质不是为了加密,而是身份验证,所以同签名值一同传递的消息是不需要加密的
签名生成和签名验证流程很简单,思考一个问题,为什么不直接对消息进行签名,而是对消息的摘要值进行签名?
签名值除了比较之外并没有其他用途,那么基于消息生成签名和基于消息摘要值生成签名并无区别,考虑到非对称加密算法运行是相对缓慢的,数字签名算法建议对消息摘要值进行签名,因为摘要值的长度是固定的,运算的时候速度会比较快。
在验证签名的过程中,关键的一步就是要保证发送方传递过来的公钥是可信赖的,这时候就得用到数字证书了。
数字证书
数字签名校验的前提是能拿到发送方的公钥,并且保证这个公钥是可信赖的,所以就需要数字证书。
它简单来说其实是由一些权威的数字认证机构颁发给服务器的一个文件。数字认证机构简称CA,它是客户端和服务端都信任的第三方机构。
数字证书颁发流程如下图:
注意区分数字签名和数字证书的概念
数字签名:可以理解成一种验证身份的技术,一种规范,类似于promiseA+规范、CommonJS规范
数字证书:对于规范的实现,类似于es6实现了promiseA+规范,node实现了commonjs规范
区分签名与加密的概念
签名:目的是为了验证身份,防止中间人假装自己对外发送假信息,不需要对数据进行加密处理,因此用私钥进行签名,用公钥进行解密验证
加密:目的是将明文变成密文进行传输,防止消息在传输中被别人破解,因此使用公钥加密,使用私钥解密