crypto/rsa
库具有以下函数来生成新的 RSA 私钥。
func GenerateKey(random io.Reader, bits int) (*PrivateKey, error)
这似乎默认使用 65537
作为公共(public)指数值。是否有一个 API 可以用来生成带有我选择的公共(public)指数的 RSA 私钥,并且不依赖于 OpenSSL 或其他 C 库?
最佳答案
你在 Go 中找不到这样的 API。
这是因为,出于多种原因,3 和 65537 匹配 RSA 工作和 RSA 实现速度所需的要求。
以下是这两个属性的解释:
首先,要使 RSA 工作,公共(public)指数必须与 1 和模数之间的整数集的基数互质,并且与模数互质(请参阅 RSA 算法以了解原因)。因此,选择一个素数是一个好方法,让这个数字有机会与上述集合的基数互质,这就是为什么人们大多数时候选择素数作为公共(public)指数(如果是的话)事实并非如此,他们计算新的模数而不是更改公共(public)指数)。由于上述集合的基数是偶数,所以不能选择2(如果模数是素数p和q的乘积,则这个集合有(p-1)(q-1)个元素,那显然是一个偶数数)。
此外,为了快速计算,公共(public)指数的二进制表示中设置为 1 的位数必须尽可能少。 2 是唯一一个在其二进制表示中一位设置为 1 的素数。由于无法选择,您将选择一个在其二进制表示中只有 2 位设置为 1 的质数。因此,这样一个素数与任何其他数的算术乘积只需要一次加法和逻辑左移。
(到目前为止)唯一符合这些要求的已知整数是 3、5、17、257 和 65537。
关于go - 生成具有特定公共(public)指数的 RSA key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44665958/