【问题标题】:Generate big prime numbers for RSA encryption algorithm为 RSA 加密算法生成大素数
【发布时间】:2012-01-16 03:19:44
【问题描述】:

我应该怎么做才能为 RSA 生成大素数?

如您所知,我们需要大质数来为 RSA 加密算法生成私钥和公钥。

如果我想通过任何筛选算法来做到这一点,这需要很多时间。 最好的方法是什么?

【问题讨论】:

  • 检查 (2**n - 1) 是否是增加 n 值的素数。
  • 我真的希望这是一个家庭作业——获得安全的 RSA 实现有很多微妙之处。
  • @Per Blakh:|,真的不是在家工作,只是我在尝试开发免费的开源项目。
  • 看看OpenSSL的bn子系统是怎么做的:openssl.org/docs/crypto/BN_generate_prime.html
  • @Gilbert:这是个坏主意,这些数字的乘积可以在多项式时间内分解。

标签: algorithm math encryption rsa primes


【解决方案1】:

Miller Rabin 可能的素数测试(更准确地说是 compositeness 测试)通常用于工业强度素数。有一些方法可以生成可证明的素数,例如 Maurer 算法。

here 是关于素数生成理论和实现的优秀资源。

【讨论】:

    【解决方案2】:

    如果你想制作一些大素数,你可以使用 pycrypto 模块在 python 中编写一个程序。这个帖子会很有帮助Using RSA in Python

    from Crypto.PublicKey import RSA
    RSAkey = RSA.generate(1024)
    print getattr(RSAkey.key, 'n')
    print getattr(RSAkey.key, 'p')
    print getattr(RSAkey.key, 'q')
    

    【讨论】:

      【解决方案3】:

      您最好使用加密程序库。有几个,它们充满了微妙的问题,希望其中大部分在现有的实现中得到修复,而在新的实现中得到修复。

      不过,我尝试过使用 Python 和 GMP 生成素数:

      http://stromberg.dnsalias.org/svn/huge-prime/trunk/

      简而言之,试除法最适合小数,Miller-Rabin 可以很好地作为稍大一点的数字的快速过滤器/测试,但有时您最终仍会使用试除法来获得有保证的素数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        • 2015-01-15
        • 2021-05-25
        • 1970-01-01
        相关资源
        最近更新 更多