加密与签名的区别和联系

数字签名

签名:一般是指用自己的私钥对数据进行加密,只能用公钥解密,任何人都可以用公钥解密。因为私钥只有你自己有,所以保证了该数据肯定是从你这发送出去的,不可能是别人发的。

验证过程

A 使用自己的私钥对信息计算一个签名,将签名和信息一起发出去,接受者 B 使用 A 的公钥进行验签,如果不是 A 的私钥计算的签名,那么验签时就会出错。这样就能确定该消息是否是 A 发出来的。

一般而言,我们不会直接对数据本身直接计算数字签名。因为数字签名属于非对称加密,非对称加密依赖于复杂的数学运算,包括大数乘法、大数模等等,耗时比较久。如果数据量大的时候计算数字签名将会比较耗时,所以一般做法是先将原数据进行 Hash 运算,得到的 Hash 值就叫做摘要,然后对摘要计算签名。不同的内容计算出的摘要是不同的。

摘要最好是不可逆转的,这样即使第三方使用公钥解签出摘要,也无法根据摘要反推出原本的数据。一般使用 MD5 作为 Hash 函数,MD5 输出的结果固定位 128 位。

  • 发送者使用私钥对摘要计算数字签名。那么接收者如何验证呢?

接受者 A 收到后,取下数字签名,同时用 B 的公钥解密,得到摘要1,证明确实是 B 发的。再对邮件内容使用相同的散列函数计算摘要2,与之前得到的摘要1进行对比,两者一致就说明信息未被篡改。

签名与加密的区别与联系

加密:若用别人的公钥加密,则只有他的私钥才可以解密,其他人不可能能够解密,看到你的内容,保证了数据的保密性,也就是保证整个过程的端到端的唯一确定性。

总结:私钥用来签名的,公钥用来验签的。公钥加密私钥解密是秘送,私钥加密公钥解密是签名。

两者结合举例:
A 向 B 发送信息的整个签名和加密的过程如下:

  1. A 先用自己的私钥(PRI_A)对信息(一般是信息的摘要)进行签名。
  2. A 接着使用 B 的公钥(PUB_B)对信息内容和签名信息进行加密。

这样当B接收到A的信息后,获取信息内容的步骤如下:

  1. 用自己的私钥(PRI_B)解密 A 用 B 的公钥(PUB_B)加密的内容;
  2. 得到解密后的明文后用 A 的公钥(PUB_A)解签 A 用 A 自己的私钥(PRI_A)的签名。

从而整个过程就保证了开始说的端到端的唯一确认。A 的签名只有 A 的公钥才能解签,这样 B 就能确认这个信息是 A 发来的;A 的加密只有 B 的私钥才能解密,这样 A 就能确认这份信息只能被 B 读取。

posted @ 2022-04-02 21:31  のNice  阅读(1248)  评论(0编辑  收藏  举报