公钥密码和数字签名
在目前网络通信的过程中,有两种加密方法被广泛使用:公钥加密 和 数字签名;本文将对这两种方法进行分析和对比;
定义
公钥密码:也就是和我们常说的非对称加密,分为加密和解密,消息发送者使用公钥加密,消息传输过程中以密文传输,接受者收到消息之后,用私钥进行解密,就可以拿到消息内容;
数字签名:分为签名和验签;消息发送者使用私钥进行签名,消息传输过程中同样以密文传输,但是出来密文之外,还会发送一份消息的明文给接收方,以便接收方进行验签,接收方收到明文和密文之后,会用公钥进行解密,得到明文,然后对比解密后的结果和接收到的明文,一致则验签成功,不一致则证明消息被中途篡改过;
在公钥加密和数字签名过程中,都涉及到一个共同的东西---秘钥对(公钥和私钥);但是在使用过程中却又有一些区别:具体如下:
公钥密码 | 数字签名 | |
---|---|---|
公钥 | 发送者加密使用 | 接受者验签使用 |
私钥 | 接受者解密使用 | 发送者签名使用 |
公钥持有者 | 加密个人持有 | 需要验证签名的任何人都可以持有 |
私钥持有者 | 解密个人持有 | 签名人持有 |
传送内容 | 密文 | 密文 + 明文 |
过程和特点
过程
公钥密码使用过程如下:
![](https://img.haomeiwen.com/i1325436/7292e326be3f0d58.jpg)
数字签名使用过程如下:
![](https://img.haomeiwen.com/i1325436/f9c3b23daa03b7a4.jpg)
特点
公钥密码:公钥发送消息的人持有,私钥接收消息的人持有,均为私人持有;只要保证秘钥安全,就可以保证通信安全;
数字签名:公钥接受消息的人持有,所有人均可持有,私钥发送消息的人持有,私人持有;保证私钥安全就可保证签名的准确性;
应用场景
公钥密码
适用于:消息需要秘密传输;
案例:SSL层中,对称秘钥的传输就是应用了非对称加密进行传输;
数字签名
适用于:消息本身可以对外公开,但是需要验证发送方身份的消息;
案例:苹果手机验证APP是否为指定开发者开发;
一些问题:
1.公钥密码和数字签名看似是相反的流程,可不可以公私秘钥互换,在公钥密码过程中用私钥加密、公钥解密;在数字签名过程中用公钥签名、私钥验签;
答案是不一定的,应为在日常过程中,大多采用的非对称加密算法为RSA,而在RSA算法中,两个过程是可逆的,但是并不是所有非对称加密算法都是可逆的。所以,严格来说,这个过程是不可以的;
2.在公钥密码和数字签名的过程中,都会有一步发送秘钥的过程,那么在这一步有中间人将秘钥替换也是存在风险的;
这个是肯定的,对于这种中间人攻击,就不在数字签名和公钥密码的解决范围之内了,这个请参照数字证书及证书链的验证
3.公钥密码比较好理解,但是为什么私钥加密就可以作为签名?
在数字签名特点中,有一个是私钥只有发送者持有,正是因为这一特点,再加上公私秘钥的一个特点:“没有该私钥的人是不能生成对应公钥可以解开的密文的”,就有一个结论:持有公钥的人能解开的密文,就是该可信机构或人发出的消息;而私钥和私钥加密的信息就相当于该机构或人的签名;
4.数字签名中,单项散列的作用?
消息体有可能为比较大的数据,而非对称加密的过程又是比较消耗性能,故在为防止对数据比较大的消息签名是消耗时间相对比较长,对消息进行了单向散列的操作,散列过后为固定长度字符串,签名速度相对来说要快很多;
网友评论