[学习笔记] 非对称加密和签名认证

现代密码学中,加密算法包括两部分。

  • 算法,一组规定如何进行加解密的规则,描述加解密的具体操作步骤。为了方便使用及保证算法可靠性,算法都是公开的
  • 密钥,用于算法的秘密参数

在对称加密中,无论加密还是解密,都使用同一个密钥。因此,

  • 对密钥的保护十分重要,泄露则意味着通信密文不再安全
  • 通信双方在交换密钥时,特别是在公开的、不可信的链路(互联网)上交换密钥时,要确保密钥从未泄露(Diffie-Hellman 密钥交换算法

受 Diffie-Hellman 密钥交换算法的启发,人们意识到加密和解密可以使用不同的密钥,只要这对密钥有某种对应关系即可。

这种新的加密模式被称为非对称加密

  • 有两把密钥,一把是公开的公钥,还有一把是不公开的私钥
  • 公钥和私钥一一对应,有一把公钥就必然有一把与之对应的、独一无二的私钥,反之亦成立
  • 同时生成公钥和私钥应该相对容易,但从公钥推算私钥应是极其困难或是不可能的
  • 所有的密钥对(公钥和私钥)都是不同的
  • 用私钥可以解开公钥加密的消息,反之亦成立

加密和解密

韩梅梅事先生成好了一对密钥,并只公开了自己的公钥。

李雷想加密发送给韩梅梅的消息,需要

  1. 用韩梅梅的公钥,加密要发给韩梅梅的信息,将密文发送给韩梅梅
  2. 韩梅梅收到密文后,用自己的私钥解密

这段密文只有用对应的私钥(韩梅梅的私钥)才可以解密。只要韩梅梅的私钥没有泄露,这段密文就只有韩梅梅能解开,即使其他人获得密文,也无法解密。

常用的非对称加密算法有 RSAElGamalECC 等。

摘要和签名

举个栗子。李雷写了一张纸条,让同桌传给韩梅梅,纸条内容为

韩梅梅,我是李雷,我喜欢你。

对通信的双方,

  • 要保证纸条在传递过程中未经改动。当内容被篡改时,接收方可以发现
  • 接收方能确定纸条来自发送方,而不是他人冒充

用更简单些的文字来描述整个过程,通信的双方都知道,

  • 发送方认可消息的内容(授权)
  • 接收方能确定消息来源(身份认证)
  • 消息在整个通信过程中未经改动(内容的完整性)

为了实现上述需求,李雷需要

  1. 将纸条内容哈希(Hash),得到摘要(Digest)
  2. 用自己的私钥“加密”摘要,得到签名(Signature)
  3. 让同桌传递纸条和签名

韩梅梅收到纸条和签名后,

  1. 用李雷的公钥,对签名“解密”,得到摘要 [1]
  2. 将纸条内容哈希,得到摘要 [2]
  3. 比较摘要 [1] 和 摘要 [2] 的内容是否一致

如果内容相同,则说明纸条确实由李雷所写,且内容未经改动。这是因为,

  • 李雷的私钥只有他自己拥有,用私钥(李雷的私钥)“加密”的内容(签名)只有用对应的公钥(李雷的公钥)才能解开(身份认证)
  • 哈希函数的特性保证,如果纸条内容在传递过程中改变,则得到的摘要 [2] 一定与摘要 [1] 不同(完整性)

总结

对于双钥系统,加密解密时,

  • 公钥用于加密,私钥用于解密

身份认证时,

  • 私钥用于签名,公钥用于验证

留一个思考题给你。对上文提到的例子,李雷应该怎么做,才能不让同桌知道纸条的具体内容,并兼顾身份认证和内容完整性的特性呢?评论区里留言吧。 😋

参考