如何找到 elgamal 签名方案的生成器?大多数程序使用的值是否是好的生成器?或者有没有办法找到一个生成素值的生成器?如果是这样,如何?说素数至少有 1 个生成器是真的吗?
3 回答
使用 DSA 而不是 ElGamal 签名方案。
实施 ElGamal 可能会犯太多错误。GregS 提出的错误之一是:使用 IKE 参数。这些参数是为 ElGamal 加密而不是为签名方案生成的。这两个方案有不同的要求。特别是使用 g=2 作为生成器对于加密来说是一个不错的选择,但对于签名方案来说却是一个非常糟糕的选择。(参见例如“应用密码学手册” http://www.cacr.math.uwaterloo.ca/hac/第 11 章中的注 11.67 以了解一些细节)。正确的是随机选择生成器。但是再一次,如果您只是使用 DSA,那么您可以通过遵循标准来避免这些陷阱。
再补充一点:OpenPGP https://www.rfc-editor.org/rfc/rfc4880曾经允许 ElGamal 签名,但前段时间已弃用它们。这种弃用是相当合理的,因为 DSA 只有优点:它更高效、更安全和更标准化。当然,您可以查看旧的 PGP 实现,但如果不先阅读文献,它不会告诉您这些实现是否给您合理的选择。
如何找到 elgamal 签名方案的生成器?大多数程序使用的值是否是好的生成器?或者有没有办法找到一个生成素值的生成器?如果是这样,如何?
您可以使用Handbook of Applied Cryptography中的通用概率算法 4.86 。不过,您仍然需要从此类算法的输出中清除已知对 Elgamal 签名不安全的值。至少任何除以p-1的值(例如 2)和任何逆除以p-1的值。请注意,这些是我今天所知道的情况。可能需要对已发表的有关该主题的论文进行一些深入研究。
就个人而言,我不会相信现有程序中已经使用的域参数。作者可能没有考虑上述所有条件,而且研究可能已经突出了自选择以来的新条件。
说素数至少有 1 个生成器是真的吗?
绝对正确:整数模p上的乘法群总是至少有一个生成器(p是素数)。它实际上还有更多:phi(phi(p)),其中phi是全部功能。不过,并非所有这些对于 Elgamal 签名方案都是安全的。