go - 生成具有特定公共(public)指数的 RSA key

标签 go cryptography rsa

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/

相关文章:

node.js - 如何在flutter(解密)和Node(加密)中实现RSA?

go - 检测模型值是否发生变化的最简单方法

node.js - 是否可以在 go 中编写 node.js 插件?

string - 寻址返回的函数 slice 时出错

go - 为什么这两个 float64 有不同的值?

java - 在 JVM 中注册多个 keystore

javascript - 使用 Cryptico.js 加密,使用 OpenSSL 解密

c# - 使用 Aes 解密失败

c - 椭圆曲线密码学中的点减法

encryption - 相同的 RSA key 、相同的消息、不同的加密