gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:42 27 4
gpt4 key购买 nike

更具体地说,gmpy2.next_prime 函数是否足以找到所需的大素数?或者我应该使用其他许多 gmpy2.*_prp 函数之一吗?

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

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,
}
}

更新:根据建议更新了代码。

最佳答案

免责声明:我维护gmpy2

我建议使用 gmpy2.is_bpsw_prp 而不是 gmpy2.next_prime。 BPSW 测试会更快,并且没有已知的反例。 is_primenext_prime 检查过去使用,并且可能仍然使用一组固定的基,并且有可能复合通过一系列已知测试。 IIRC,有人找到了通过前 17 次检查的复合 Material 。默认情况下会进行 25 次检查,但这是一个弱点。

我计划在 gmpy2 的下一个版本中包含一个 APR-CL 可证明的素数测试。

在选择 RSA 素数时应遵循特定准则,以防止意外选择创建可轻松因式分解的 n 的素数。

关于python - gmpy2 是否适合在 python 中实现 RSA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com