从组件构建 OpenSSL RSA

Build OpenSSL RSA from components

我到处寻找这个问题的答案,但我认为我真正需要的是有 OpenSSL 相关经验的人为我指明正确的方向。

在 Python 中有一个库 PyCryptodome,它具有几种加密算法(包括 RSA)的纯 Python 实现。它们有一个功能作为 RSA 模块的一部分,称为 construct,它从各种组件(nedp,以及 q)。不过,我没能在 OpenSSL 中找到类似的功能,可能只是因为我不知道去哪里查看他们的文档。

如有任何帮助,我们将不胜感激。

OpenSSL 允许您通过创建自己的 RSA 结构(通过 RSA_new())提供这些值,然后通过 RSA_set0_keyRSA_set0_factorsRSA_set0_crt_params 填充它。

请注意,您可以仅使用 n, e, d 完全定义 RSA public/private 密钥,但传统上还提供了几个附加值(例如 pq 是形成模数的质数,而 iqmpdmp1dmq1 是 CRT 系数)。

OpenSSL 要求您将这些作为 BN * 实例提供,并且您 不得在通过 set0 函数分配 BN 实例后释放它们 。当您在 OpenSSL 中看到具有该命名方案的函数时,这意味着您正在设置一个值,但它不会增加引用计数,因此如果您自己释放 BN * 它将成为结构中的无效指针。

您可以在 pyca/cryptography source 中确切地看到它是如何工作的,但我强烈建议您不要自己这样做,除非您对 OpenSSL 及其弱点非常满意。