【发布时间】:2022-01-20 15:36:09
【问题描述】:
我很想知道是否有一种简单的方法/算法,通过它我可以获得一个生成器 g 用于 20 位素数整数,以在 Elgamal 密码系统中实现。
【问题讨论】:
标签: cryptography diffie-hellman elgamal
我很想知道是否有一种简单的方法/算法,通过它我可以获得一个生成器 g 用于 20 位素数整数,以在 Elgamal 密码系统中实现。
【问题讨论】:
标签: cryptography diffie-hellman elgamal
做到这一点的最佳方法是选择您的素数,以便轻松找到发电机。通常最好的方法是找到一个素数 p 使得 q=2p+1 也是素数。那么在q阶的乘法群中,元素的阶数为2p、p、2或1。大多数的阶数为2p,所以只需选择一个数字g并检查g^2和g^p是否不是1,那么它会有订单 2p,因此是该组的生成器。
如果给定素数(例如 q),那么组的顺序将是 q-1,您需要将 q-1 分解为素数(这并不总是容易的)。然后在选择候选 g 时,您需要检查 g^x(对于 x 范围内小于 q-1 的所有素因数组合)不是 1,那么您将知道 g 具有顺序 q-1 和是一个发电机。这就是为什么,如果你可以选择你的素数 q,就更容易确保 q-1 很好地分解为两个素数。
【讨论】:
p 和q 是素数,则q = 2p+1 中的q 称为安全素数,p 称为Sophie Germain primes。我们使用它们的原因可以保证我们可以生成订单p,以便安全性准确。不推荐使用q。 See also here 并阅读更多 here
g 是整个组的生成器,Legendre 符号会泄漏 g^a 的低位。