crypto/rsa
库具有以下功能来生成新的RSA私钥。
func GenerateKey(random io.Reader, bits int) (*PrivateKey, error)
这似乎默认使用65537
作为公共指数值。是否有一个API可以用来生成一个RSA私钥,其中包含我选择的公共指数,它不依赖于OpenSSL或其他C库?
答案 0 :(得分:1)
您不会在Go中找到这样的API。
这是因为,由于多种原因,RSA工作和RSA实现需要3和65537匹配要求。
以下是这两个属性的解释:
首先,要使RSA工作,公共指数必须与整数集的基数相互作用,在1和模数之间,与模数相互作用(参见RSA算法以了解原因)。因此,选择一个素数是一个很好的方法,有机会将这个数字与上述集合的基数相互作用,这就是为什么人们选择素数作为公共指数,大部分时间(如果是不是这样,他们计算新模数而不是改变公共指数)。由于上述集合的基数是偶数,你不能选择2(如果模数是素数p和q的乘积,这个集合有(p-1)(q-1)个元素,这显然是一个偶数数)。
此外,为了快速计算,公共指数的二进制表示中设置为1的位数必须尽可能低。 2是唯一的素数,其二进制表示中一位设置为1。由于无法选择,因此您将选择仅在其二进制表示中将2位设置为1的素数。因此,这种素数与任何其他数字的算术乘积只需要一次加法和一次逻辑移位。
符合这些要求的唯一已知整数(截至目前)为3,5,17,257和65537。