我正在尝试仅使用 (n) 和 (d) 来执行私钥操作,例如 RSA 签名。 我的系统公开了一个仅 (n) 和 (d) 输入的 API,遗憾的是我无法更改 API 本身。
由于我使用的是最新的 OpenSSL 版本,因此我必须使用 setter:RSA_set0_key
,它要求提供 (n) 和 (e),无论使用给定的操作如何进行RSA(在我的例子中是私钥操作)
所以我的问题是:
我可以仅使用 (n) 和 (d) 执行 RSA 签名操作吗? 我不想猜测公共(public)指数,并且在此过程中我无法收到它。
如果答案是否定的。
我可以使用任意素数作为 RSA_set0_key
的 (e) 吗? EVP/rsa_sign 函数是否会验证公共(public)指数与私有(private)指数兼容?
谢谢
最佳答案
严格来说,如果您只知道一个指数(d 或 e)和模数(n),那么在不知道模数因子的情况下,您无法轻松找到反指数(e 或 d)——这就是 RSA 的原因是安全的。
但是,大多数 RSA 实现都使用 e 的固定指数——通常为 65537 (0x10001),因此您实际上只需要知道 n。
现在你的问题有点奇怪,因为 RSA 签名只使用 N 和 D ——你需要 E 来验证签名。 RSA_get0_key
为您提供来自 RSA key 对象的 N、D 和 E。也许您的意思是 RSA_set0_key
,它用于将值放入 RSA key 对象中?这只需要您提供 N,但如果您未设置 E,您将无法验证签名或加密数据。只要你设置了D(和N),你应该就可以生成签名了。
关于c - 如何仅使用模数和私钥指数 (d) 进行 RSA 签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392129/