非对称加密
在标准的非对称加密中,公钥不能用于解密,它只能用于加密(或验证签名)。只有对应的私钥才能解密(或生成签名)。这种单向性是非对称加密的核心特性。让我详细解释非对称加密如何交换密钥,并消除可能的困惑。
非对称加密的基本原理¶
非对称加密使用一对密钥:
- 公钥 (Public Key):公开给所有人,可以用来加密数据或验证签名。
- 私钥 (Private Key):由持有者秘密保存,用来解密数据或生成签名。
关键点:
- 用公钥加密的数据,只能用对应的私钥解密。
- 用私钥签名的数据,可以用对应的公钥验证。
因此,“每个人都知道公钥可以解密”这个说法是不准确的。公钥的公开性不会影响安全性,因为它无法解密,只有私钥才能做到。
非对称加密如何交换密钥¶
在实际应用中,非对称加密常用于安全地交换一个对称加密密钥(如AES密钥),因为非对称加密本身速度慢,不适合直接加密大量数据。以下是具体过程:
场景¶
Alice 想和 Bob 安全通信,但他们没有事先共享密钥。Bob 有一对非对称密钥:公钥 (Bob-Public) 和私钥 (Bob-Private)。
步骤¶
- Bob 公开公钥:
- Bob 将他的公钥 (Bob-Public) 发送给 Alice(通过任何渠道,甚至不安全的网络都可以,因为公钥是公开的)。
- 公钥泄露不会影响安全性,因为它不能解密。
- Alice 生成对称密钥并加密:
- Alice 随机生成一个对称密钥(比如一个AES密钥,称为 Session-Key)。
- Alice 用 Bob 的公钥 (Bob-Public) 加密这个 Session-Key,生成密文。
- Alice 发送加密后的密钥:
- Alice 将加密后的 Session-Key 发送给 Bob。
- 即使这个密文被拦截,攻击者没有 Bob 的私钥 (Bob-Private),无法解密。
- Bob 解密获取对称密钥:
- Bob 用自己的私钥 (Bob-Private) 解密密文,得到 Session-Key。
- 现在 Alice 和 Bob 都拥有相同的 Session-Key。
- 后续通信:
- Alice 和 Bob 用这个共享的 Session-Key 进行对称加密通信(如用AES加密数据),因为对称加密速度更快。
图示¶
GAS
Alice Bob
| |
| Bob-Public <------| (Bob 公开公钥)
| |
|-- Encrypt(Session-Key, Bob-Public) -->|
| |
|<-- Decrypt(密文, Bob-Private) -->|
| |
双方共享 Session-Key,开始对称加密通信
为什么公钥不能解密?¶
公钥和私钥基于数学难题(如RSA的大整数分解,或ECC的椭圆曲线离散对数问题)。它们的配对关系确保:
- 用公钥加密的数据,只有私钥能解密。
- 反过来,用私钥加密的数据(通常用于签名),可以用公钥解密验证。
这种单向性是设计使然。如果公钥能解密,那么非对称加密的安全性就崩溃了,因为公钥是公开的,任何人都能解密。