V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
awesomePower
V2EX  ›  程序员

关于 RSA 私钥签名的说法

  •  
  •   awesomePower · 329 天前 · 1471 次点击
    这是一个创建于 329 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    8 条回复    2023-06-16 19:01:15 +08:00
    NessajCN
        1
    NessajCN  
       329 天前   ❤️ 5
    「私钥签名」这个名词用于描述「用私钥加密内容并允许公钥解密」这个行为的目的,
    显然,由于公钥是公开的,你用私钥加密的内容本身并不会成为真正的密文,
    而是通过这么个行为告诉别人:这段「用私钥加密的文本」是由我这个唯一拥有私钥的人发出的,别人都模仿不来。
    于是就起到了类似「签名」的作用,防止其他人伪造「我发出」的文本。
    cheng6563
        2
    cheng6563  
       329 天前
    签名和加密是 RSA 的两套用法

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

    用作加密时,获取对方的密钥也就是公钥,用这个公钥进行加密,这时只有对方能解密出内容了。
    awesomePower
        3
    awesomePower  
    OP
       329 天前
    @NessajCN 谢谢解答,解答很明确
    @cheng6563 谢谢解答
    hxysnail
        4
    hxysnail  
       329 天前
    加密和前面是非对称加密算法得两大应用场景:

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

    我还写过一点笔记,关于数字证书的也有,有需要可以参考一下:
    https://fasionchan.com/network/cryptography/asymmetric-encryption/
    zdking08135
        5
    zdking08135  
       329 天前
    数字证书是签名的一个应用,具体来讲:

    我公司持有一个域名 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
        6
    amlee  
       329 天前
    @NessajCN 这种解释真清爽,读起来就舒服。问题也是好问题,我从没这么考虑过。
    awesomePower
        7
    awesomePower  
    OP
       329 天前
    @hxysnail 谢谢分享

    @zdking08135 谢谢解答
    lt0136
        8
    lt0136  
       329 天前
    @hxysnail 通俗易懂的好文👍关注了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1122 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:41 · PVG 02:41 · LAX 11:41 · JFK 14:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.