模块 OpenSSL::PKey

非对称公钥算法

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

用公钥加密的消息只能由持有相关私钥的接收者解密。由于公钥算法比对称密钥算法(参见 OpenSSL::Cipher)慢得多,因此它们通常用于在持有彼此公钥的两方之间建立共享的对称密钥。

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

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

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

迪菲-赫尔曼密钥交换

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