RSA在python、pythonrsa库中验证p和q密钥

2024-05-20 23:07:36 发布

您现在位置:Python中文网/ 问答频道 /正文

更新

我有一个程序来获取两个公钥和私钥以验证这些密钥

这些密钥是否有效

我们假设我们的密钥是有效的

(pub , privateKey) = rsa.newkeys(1024)

然而,对于p,q和nlen,我有一个关系

这是我们关于p和q的数学方程:

  1. The primes p and q shall be selected with the following constraints:

(a) (p–1) and (q–1) shall be relatively prime to the public exponent e.

(b) The private prime factor p shall be selected and shall satisfy

(a)条件成功通过

但我不能理解(b)项

另一方面,我们说len(p)=len(q)=nlen/2

nlen等于模块的大小(以位为单位)

让我们谈谈这种情况:

这些代码是p、q、d、e和nlen的定义

p = privkey.p
q = privkey.q
d = privkey.d
e = privkey.e
nlen = privkey.n.bit_length()

我们使用以下代码实现了我们的条件:

if not sqrt(2) * (2 ** ((nlen/2) - 1)) <= p <= (2 ** (nlen/2)) - 1:
     return "Invalid P prime number size"

以及使用以下代码实施的其他条件:

检查q透镜

if not sqrt(2) * (2 ** ((nlen/2) - 1)) <= q <= (2 ** (nlen/2)) - 1:
    return "Invalid Q prime number size"

上述条件不匹配,他们的身体在奔跑

无论如何,对于解密len条件,这个问题是正确的

第二个条件成功通过

但首先将我的书面错误抛出到父类

这是我的代码:


if not 2 ** (nlen/2) < d < lcm(p-1, q-1):
    return "Invalid decryption key"

但是为什么呢

我认为我的问题与nlen有关。因为无论我在哪里使用nlen,我的测试都没有通过或失败

我检查了它的值,但我不知道我能做些什么来解决这个问题


Tags: andthe代码lenreturnif密钥not
2条回答

此私钥和公钥是绝对有效的。但对于安全密钥,我们的条件是正确的

我们可以使用pycryptodome python库来提高密钥测试的安全性

在这种情况下,我们应该使用这些密码短语创建密钥对,并在pycryptodome中使用相同的密码短语加载它们

我认为你的文字是错误的,因为这两个主要因素只用于计算键,而没有公布。以下答案将检查钥匙是否有效,而不是是否安全:

要检查两个键是否有效,需要具有以下值:

  • p和q(所选素数)
  • n(模数=p*q)
  • 密钥1和密钥2(公钥和私钥)
def is_valid(p, q, key1, key2, n):  # assuming p and q are actually prime
    if n != p * q:  # check if n is actually p * q
        return False
    num = (p - 1) * (q - 1)
    if (key1 * key2) % num != 1:  # check if keys are valid
        return False
    return True

相关问题 更多 >