RSA 在 python 中验证 p 和 q 密钥,python-rsa lib

更新

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

这些密钥是否有效。

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

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

但是我有 p、q 和 nlen 的关系。

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

  1. 质数 p 和 q 的选择应符合以下约束条件:

(a) (p–1) 和 (q–1) 应与 公共指数 e.

(b) 应选择私有质因子 p 并满足

RSA 在 python 中验证 p 和 q 密钥,python-rsa lib

(a) 条件成功通过。

但我看不懂(b)项。

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

nlen 等于模块的大小。

让我们谈谈这个条件:

RSA 在 python 中验证 p 和 q 密钥,python-rsa lib

这些代码是 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"

使用以下代码实现的另一个条件:

RSA 在 python 中验证 p 和 q 密钥,python-rsa lib

检查 q len

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

以上条件不匹配,他们的身体跑了。

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

RSA 在 python 中验证 p 和 q 密钥,python-rsa lib

第二个条件成功通过。

但首先将我写的错误扔给父类。

这是我的代码:


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

但是为什么?

我认为我的问题与 nlen 有关。因为在我使用 nlen 的任何地方,我的测试都没有通过和失败。

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

lovejason200 回答:RSA 在 python 中验证 p 和 q 密钥,python-rsa lib

我认为您的文字是错误的,因为这两个主要因素仅用于计算密钥而未发布。以下答案将检查密钥是否有效,而不是它们是否安全:

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

  • p 和 q(选择质数)
  • n (mod-number = p * q)
  • key1 和 key2(公钥和私钥)
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
,

这个私钥和公钥是绝对有效的。但我们的条件适用于安全密钥。

我们可以使用 pycryptodome python 库来提高我们的关键测试安全性。

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

本文链接:https://www.f2er.com/1943.html

大家都在问