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