关于 RSA 私钥签名的说法

2023-06-16 13:26:09 +08:00
 awesomePower

正常来说,一般都是用公钥加密然后私钥解密。

然而也有私钥签名公钥验签的说法,这个过程:

  1. 明文 -> 单向散列函数(MD5 、SHA 等)-> 私钥加密
  2. 验证
    1. 公钥解密
    2. 明文 -> 单向散列函数(MD5 、SHA 等
    3. 1 和 2 值对比

这个过程为什么要叫私钥签名呢?不是很容易产生歧义么,这里面私钥的作用是加密,公钥的作用解密,为什么要叫私钥签名呢。

1613 次点击
所在节点    程序员
8 条回复
NessajCN
2023-06-16 13:38:28 +08:00
「私钥签名」这个名词用于描述「用私钥加密内容并允许公钥解密」这个行为的目的,
显然,由于公钥是公开的,你用私钥加密的内容本身并不会成为真正的密文,
而是通过这么个行为告诉别人:这段「用私钥加密的文本」是由我这个唯一拥有私钥的人发出的,别人都模仿不来。
于是就起到了类似「签名」的作用,防止其他人伪造「我发出」的文本。
cheng6563
2023-06-16 14:04:05 +08:00
签名和加密是 RSA 的两套用法

用做签名时,需要把用于解密的密钥公布出去,这便是公钥了。然后自己用私钥加密数据(的 HASH ),对方就能通过公钥判断数据是否被篡改。

用作加密时,获取对方的密钥也就是公钥,用这个公钥进行加密,这时只有对方能解密出内容了。
awesomePower
2023-06-16 14:07:39 +08:00
@NessajCN 谢谢解答,解答很明确
@cheng6563 谢谢解答
hxysnail
2023-06-16 14:54:00 +08:00
加密和前面是非对称加密算法得两大应用场景:

- 加密:公钥加密,私钥解密,这个很好理解
- 签名:私钥签名,公钥验证,因为这个场景签名是可以公开的,但有预防防伪,就只能用私钥来签名了

我还写过一点笔记,关于数字证书的也有,有需要可以参考一下:
https://fasionchan.com/network/cryptography/asymmetric-encryption/
zdking08135
2023-06-16 16:50:39 +08:00
数字证书是签名的一个应用,具体来讲:

我公司持有一个域名 A ,向 CA 申请证书,用于提供 https 访问。
CA 发给我一个关于 A 的 https 证书,证书内容包括 CA 的信息,我公司信息,A 域名,证书过期时间等等。
除了完整证书内容之外,为了保证证书真实性,CA 会对证书内容计算一个 hash (使用 sha256 等算法),然后对这个 hash 用 CA 的私钥做 RSA 加密(签名)。CA 会把证书和加密 hash 一起给我。
我针对 A 域名用 CA 给的证书部署了 https 服务。其他人访问 A 网站的时候,我的服务器会把 CA 给我的 https 证书(包括上面的证书信息和加密的 hash )给访问者。访问者可以拿 CA 的公钥对加密 hash 进行 RSA 解密,解密后,用和 CA 一样的方式计算证书内容的 hash 和解密出来的 hash 作对比,一致就认为安全性通过。

注意:RSA 加解密只作用于计算出来的 hash ,而不是证书内容。

上面的生成证书的加密 hash 的过程,是由 CA 来确认其内容真实的,类比合同中的签名。
而其他人拿到证书的过程,就是验证这个证书确实是由 CA 颁发的,所以是验证签名。
amlee
2023-06-16 16:54:16 +08:00
@NessajCN 这种解释真清爽,读起来就舒服。问题也是好问题,我从没这么考虑过。
awesomePower
2023-06-16 16:58:52 +08:00
@hxysnail 谢谢分享

@zdking08135 谢谢解答
lt0136
2023-06-16 19:01:15 +08:00
@hxysnail 通俗易懂的好文👍关注了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/949278

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX