跳转至

非对称加密

在标准的非对称加密中,公钥不能用于解密,它只能用于加密(或验证签名)。只有对应的私钥才能解密(或生成签名)。这种单向性是非对称加密的核心特性。让我详细解释非对称加密如何交换密钥,并消除可能的困惑。


非对称加密的基本原理

非对称加密使用一对密钥:

  • 公钥 (Public Key):公开给所有人,可以用来加密数据或验证签名。
  • 私钥 (Private Key):由持有者秘密保存,用来解密数据或生成签名。

关键点

  • 用公钥加密的数据,只能用对应的私钥解密。
  • 用私钥签名的数据,可以用对应的公钥验证。

因此,“每个人都知道公钥可以解密”这个说法是不准确的。公钥的公开性不会影响安全性,因为它无法解密,只有私钥才能做到。


非对称加密如何交换密钥

在实际应用中,非对称加密常用于安全地交换一个对称加密密钥(如AES密钥),因为非对称加密本身速度慢,不适合直接加密大量数据。以下是具体过程:

场景

Alice 想和 Bob 安全通信,但他们没有事先共享密钥。Bob 有一对非对称密钥:公钥 (Bob-Public) 和私钥 (Bob-Private)。

步骤

  1. Bob 公开公钥:
  2. Bob 将他的公钥 (Bob-Public) 发送给 Alice(通过任何渠道,甚至不安全的网络都可以,因为公钥是公开的)。
  3. 公钥泄露不会影响安全性,因为它不能解密。
  4. Alice 生成对称密钥并加密:
  5. Alice 随机生成一个对称密钥(比如一个AES密钥,称为 Session-Key)。
  6. Alice 用 Bob 的公钥 (Bob-Public) 加密这个 Session-Key,生成密文。
  7. Alice 发送加密后的密钥:
  8. Alice 将加密后的 Session-Key 发送给 Bob。
  9. 即使这个密文被拦截,攻击者没有 Bob 的私钥 (Bob-Private),无法解密。
  10. Bob 解密获取对称密钥:
  11. Bob 用自己的私钥 (Bob-Private) 解密密文,得到 Session-Key。
  12. 现在 Alice 和 Bob 都拥有相同的 Session-Key。
  13. 后续通信:
  14. Alice 和 Bob 用这个共享的 Session-Key 进行对称加密通信(如用AES加密数据),因为对称加密速度更快。

图示

GAS
Alice                   Bob
  |                      |
  |   Bob-Public  <------|  (Bob 公开公钥)
  |                      |
  |-- Encrypt(Session-Key, Bob-Public) -->|
  |                      |
  |<-- Decrypt(密文, Bob-Private) -->|
  |                      |
  双方共享 Session-Key,开始对称加密通信

为什么公钥不能解密?

公钥和私钥基于数学难题(如RSA的大整数分解,或ECC的椭圆曲线离散对数问题)。它们的配对关系确保:

  • 用公钥加密的数据,只有私钥能解密。
  • 反过来,用私钥加密的数据(通常用于签名),可以用公钥解密验证。

这种单向性是设计使然。如果公钥能解密,那么非对称加密的安全性就崩溃了,因为公钥是公开的,任何人都能解密。