【问题标题】:Finding generator g for a 20-digit prime integer I'm Elgamal寻找 20 位素数的生成器 g 我是 Elgamal
【发布时间】:2022-01-20 15:36:09
【问题描述】:

我很想知道是否有一种简单的方法/算法,通过它我可以获得一个生成器 g 用于 20 位素数整数,以在 Elgamal 密码系统中实现。

【问题讨论】:

标签: cryptography diffie-hellman elgamal


【解决方案1】:

做到这一点的最佳方法是选择您的素数,以便轻松找到发电机。通常最好的方法是找到一个素数 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 很好地分解为两个素数。

【讨论】:

  • 感谢您的回答,但我忘了提及我是密码学的完全新手,了解密码系统的基本知识。所以像“q=2p+1”这样的方程和像“q 阶乘法群”这样的短语对我来说是希腊语和德语?。我可以知道要阅读哪些资源,以便我可以缩小差距以理解您在说什么。谢谢
  • 啊,我不知道最好的资源,但我可以尝试更简单地解释一下方法: 1. 选择一个 20 位数的质数,称之为 p。检查 2*p + 1 是否也是素数 - 如果是,太好了!我们称 2*p + 1 q。 q 将是我们用于 el-Gamal 的 20 位素数。 (如果不是,再试一次!) 2. 选择任何小于 q 的数,称它为 g。检查 g^2 (mod q) 是否不是 1。还要检查 g^p (mod q) 是否不是 1。如果它们都不是 1,我们可以确定通过将 g 与自身相乘 (mod q) 我们将“生成” 1 到 q 之间的每个数字。因此 g 是 1 和 q 之间数字的“生成器”
  • 如果pq 是素数,则q = 2p+1 中的q 称为安全素数,p 称为Sophie Germain primes。我们使用它们的原因可以保证我们可以生成订单p,以便安全性准确。不推荐使用qSee also here 并阅读更多 here
  • 如您所见,如果 g 是整个组的生成器,Legendre 符号会泄漏 g^a 的低位。
  • 感谢大家的回复,肯定给了进一步的澄清。只是想进一步澄清这些: 1. 我应该使用 q 还是 p 作为我的 20 位素数整数?根据 Charles Craven 的回答,我是否正确理解我需要 2 次检查,首先 p 是素数,然后 2p+1 是素数 2。为什么“g^2 (mod q) is not 1”&“g^p (mod q) is not 1”确保“通过将 g 与自身相乘 (mod q),我们将“生成”1 到 q 之间的每个数字。”
猜你喜欢
  • 2011-05-29
  • 2021-03-25
  • 2015-02-11
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
相关资源
最近更新 更多