module OpenSSL::PKey

非对称公钥算法

非对称公钥算法解决了用于加密/解密消息的秘密密钥的建立和共享问题。这种算法中的密钥由两部分组成:一部分是公钥,可以分发给他人;另一部分是私钥,需要保密。

用公钥加密的消息只能由拥有相应私钥的接收者解密。由于非对称公钥算法比对称密钥算法(参见 OpenSSL::Cipher)慢得多,因此它们经常被用来建立在双方都拥有对方公钥的情况下共享的对称密钥。

非对称算法提供了许多不错的特性,这些特性在许多不同的领域都有应用。一个非常常见的应用是创建和验证数字签名。要签署文档,签名者通常使用消息摘要算法(参见 OpenSSL::Digest)来计算文档的摘要,然后使用私钥对其进行加密(即签名)。任何拥有公钥的人都可以通过自己计算原始文档的消息摘要,使用签名者的公钥解密签名,并将其结果与之前计算的消息摘要进行比较来验证签名。签名仅在解密后的签名等于该消息摘要时才有效。

PKey 模块支持三种流行的公钥/私钥算法:

实际上,这些实现中的每一个都是抽象的 PKey 类的子类,它提供了以 PKey#signPKey#verify 形式支持数字签名的接口。

Diffie-Hellman 密钥交换

最后,PKey 还提供了 OpenSSL::PKey::DH,这是基于有限域离散对数的 Diffie-Hellman 密钥交换协议的实现,这与 DSA 的基础相同。DH 协议可用于在不安全的通道上交换(对称)密钥,而无需参与方之间有任何先前的联合知识。由于 DH 的安全性要求相对较长的“公钥”(即在参与者之间公开传输的部分),因此 DH 通常速度较慢。如果安全或速度是您的主要考虑因素,OpenSSL::PKey::EC 提供了 Diffie-Hellman 协议的另一种实现。