首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gmpy2是否适合在python中实现RSA?

gmpy2是否适合在python中实现RSA?
EN

Stack Overflow用户
提问于 2015-03-11 21:06:03
回答 1查看 1.4K关注 0票数 2

更具体地说,gmpy2.next_prime函数是否足够好以找到所需的大素数?还是应该使用其他多个gmpy2.*_prp函数之一?

例如,下面的代码是否足以为加密找到合适的素数?

代码语言:javascript
复制
import os
import gmpy2

def random(bytez):
    seed = reduce(lambda a, b: (a << 8)|ord(b), os.urandom(bytez), 0)
    return gmpy2.mpz_urandomb(gmpy2.random_state(seed), bytez*8)

def find_prime(bytez=128):
    p = random(bytez)|1
    while not gmpy2.is_bpsw_prp(p):
        p = random(bytez)|1
    return p

def good_pair(p, q):
    n = p*q
    k = gmpy2.ceil(gmpy2.log2(n))
    if abs(p - q) > 2**(k/2 - 100):
        return n
    return 0

def make_rsa_keypair():
    p, q = find_prime(), find_prime()
    n = good_pair(p, q)
    while not n:
        p, q = find_prime(), find_prime()
        n = good_pair(p, q)
    tot = n - (p + q - 1)
    e = (1 << 16) + 1
    d = gmpy2.invert(e, tot)
    return {
        'public':{
            'n':n,
            'e':e,
            },
        'private':{
            'n':n,
            'd':d,
            }
        }

UPDATE:使用建议更新代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-11 22:03:16

免责声明:我维护gmpy2

我建议使用gmpy2.is_bpsw_prp而不是gmpy2.next_prime。BPSW测试将更快,也没有已知的反例.is_primenext_prime检查过去和现在仍然使用一组固定的基座,并且可以组合通过一系列已知的测试。有人发现一个合成物通过了前17次检查。默认情况下,完成了25次检查,但这是一个弱点。

我计划在下一个版本的gmpy2中包括一个APR可证明的原始性测试。

对于选择RSA素数有一些具体的指导方针,应该遵循这些准则,以防止意外地选择创建一个可以很容易被考虑的n的素数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28997364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档