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

时间:2017-06-06 14:01:04

标签: c openssl cryptography rsa

我正在尝试使用(n)和(d)执行RSA符号等私钥操作。 我的系统公开了一个只有(n)和(d)输入的API,遗憾的是我无法改变API本身。

由于我使用的是最新的OpenSSL版本,我必须使用setter:RSA_set0_key,它要求提供(n)和(e),而不管使用给定RSA进行的操作(私有)在我的情况下的关键操作)

所以我的问题是:

我是否可以仅使用(n)和(d)执行RSA签名操作? 我不想猜测公众指数,我不能在此过程中收到它。

如果答案是否定的。 我可以使用RSA_set0_key作为(e)的任意素数吗? EVP / rsa_sign函数是否会验证公共指数是否与私有兼容?

由于

1 个答案:

答案 0 :(得分:1)

严格地说,如果你只知道一个指数(d或e)和模数(n),你就不能在不知道模数因子的情况下轻易找到反指数(e或d) - #39;为什么RSA是安全的。

但是,大多数RSA实现使用e的固定指数 - 通常为65537(0x10001),因此您实际上只需要知道n。

现在您的问题有点奇怪,因为RSA签名仅使用N和D - 您需要E来验证签名。 RSA_get0_key 从RSA密钥对象中提取 N和D和E.也许你的意思是RSA_set0_key用于将值放入RSA密钥对象?这只需要您提供N,但如果您离开E unset,您将无法验证签名或加密数据。只要你设置D(和N),你应该能够很好地生成签名。