公钥、私钥和非对称加密
在本文中,我们介绍了公钥、私钥的概念和非对称加密的原理。我们比较了它们与对称加密的优缺点,以及在使用场景中的差异。
你可能在很多情况下听说过私钥和公钥,但你真的知道它们是什么吗?
非对称加密 vs 对称加密
私钥和公钥是非对称加密(也称为公钥加密,PKC)中的概念。
非对称加密指的是使用两种不同的密钥(私钥 + 公钥)来加密或签名数据的方法,这符合解密或签名验证的需求。公钥对任何人都是可见的,而私钥只对密钥拥有者可用。你可以从密钥的名字中轻松看出来。
同样,你可能会猜测,对称加密指的是使用同一密钥加密和解密数据的方法。
因此,我们使用简单的注释来展示对称和非对称加密的加密/解密过程。
需要注意的是,对称和非对称加密算法中的加密/解密功能是不同的,通常使用不同的算法。常见的对称加密算法包括 DES、AES、RC2、RC4 等,而常见的非对称加密算法包括 RSA 和 EC。
Logto 使用 EC 算法进行数据传输加密与解密,因为它比 RSA 更高效和安全,你可以阅读这篇文章了解更多详细信息。Logto 将在下个版本中支持 RSA,以便更好地兼容一些遗留系统。
为什么使用非对称加密?
非对称加密解决了对称加密中密钥分发的问题。
由于对称加密使用相同的密钥,通过不安全的网络连接分发密钥可能会有暴露给恶意第三方的风险。恶意第三方可以使用被窃取的密钥访问使用该密钥加密的任何信息,带来显著的安全风险。
非对称加密的两个常见使用场景
发送加密数据
发送方可以使用接收方的公钥来加密信息,而接收方则使用其私钥来解密信息。
由于公钥理论上对很多人都是可用的,在理想的情况下,接收方可以从许多发送方接收加密信息。此外,多个发送方无法知道其他发送方向接收方发送了什么信息,因为只有接收方(私钥的持有者)可以解密并恢复信息。
公钥和私钥通常同时生成。我们上面提到了在一方生成私钥和公钥,然后将公钥分发给其用户。如果需要确保双方间的安全通信,那么双方需要生成各自的私钥和公钥,然后交换各自的公钥。这样,双方都有彼此的公钥,可以使用各自的私钥和对方的公钥进行加密和解密。
使用签名确保数据完整性
在非对称加密中,持有私钥的一方可以对他们发送的数据进行签名。随后,持有公钥的接收方可以在接收到数据后验证数据和签名的一致性,确保数据在传输过程中未被篡改。
使用我们在前面部分定义的注解,签名和签名验证可以表示如下:
数字签名的验证证明生成签名的一方知道对应的私钥。
你可能发现上述这两个使用场景非常熟悉。在我们的日常生活中,几乎所有具有服务器-客户端架构的服务都使用非对称加密来确保数据安全。
作为一个快速增长的用户身份框架,Logto 也广泛地使用 PKC 来确保用户数据的安全。在用户完成登录流程后,Logto 向用户签发一个访问令牌,以授予他们访问所需资源的特定权限。Logto 发布的公钥用于验证访问令牌确实是由 Logto 签发的,并且未被恶意攻击者篡改。
非对称加密的缺陷
一般来说,对称加密的密钥长度为 128 或 256 位,而非对称加密的密钥长度可以达到 4096 位。这是因为私钥和公钥在数学上是相关的并且是唯一的 密钥对。理论上,知道公钥可以计算出私钥的值,但由于涉及的算法复杂性,这通常需要相当长的时间。为了使破解私钥的任务变得 "不可能",使用更长的密钥长度是一种简单的方法。
要点总结
与上一节讨论的相比,非对称加密在计算过程中比对称加密消耗更多的计算资源和时间。在通信频繁的应用程序中,广泛使用非对称加密可能会影响性能和用户体验。
在商业场景中,对称加密和非对称加密通常结合使用,以平衡性能和数据安全性。在构建自己的服务时,你可以考虑每个阶段的数据安全需求,并据此选择合适的加密算法。