c语言 - 如何仅使用模数和私钥指数 (d) 对 RSA 进行签名?



我正在尝试使用 (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),你应该能够很好地生成签名。

最新更新