我正在尝试使用仅(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函数是否会验证公共指数是否与私有兼容?
由于
答案 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),你应该能够很好地生成签名。