保存一些推导好的结论
已知n 且p、q相邻
线索是在加密脚本中可以找到如下类似代码
1 | p = getPrime(512) |
如下代码解出p、q
1 | # pq相邻 为n开方 |
加以验证
1 | print(p*q) |
q = sympy.nextprime(),意味着 p 和 q 是相邻的素数,非常接近,于是可以将 N 开平方根,这个数的 nextprime 就为 q
$q$ 与 $phi(q^2)$ 关系
题目给出
1 | from Crypto.Util.number import * |
解出q
Euler(q^2) = q * (q-1)
,那么q-1 < sqrt(Euler(q^2)) < q
.(已翻译)rain:
Euler(q^2) = q * (q-1)
推导过程
$$\begin{aligned}\phi(q^2) &= q^2 - q \ &= q*(q - 1)\ &= q *\phi(q)\end{aligned}$$
此处待上传一份定理
设 $p$ 是素数, $a$ 是一个正整数,那么
$$\phi(p^a)=p^a-p^{a-1}$$
证明不超过 $p^a$ 且和 $p$ 不互素的正整数就是那些不超过 $p^a$ 且能够被 $p$ 整除的整数,即 $kp$,其中 $1<=k<=p^{a-1}$. 因为恰有 $p^{a-1}$ 个这样的整数,所以存在 $p^a-p^{a-1}$ 个不超过 $p^a$ 且和 $p^a$ 互素的正整数. 所以 $\phi(p^a) = p^a - p^{a-1}$ .
LQX: 关键在于
Euler(q**2) = q * Euler(q)
lov3:Euler(q) = q - 1
1 | Eq = gmpy2.iroot(EQ, 2)[0] # 求平方根 |
Q: 为什么可以用
gcd(rsa1,N)
计算出 S,其背后的数学原理是什么?
已告知有 rsa1 = RA * S , N = R * S * A
A: 因为 rsa1 和 N 都有相同的因子 S。这只是一种初等算术。例如,令 p,q,r 为不同的素数。然后 gcd(pq, pr) = p。
代码验证如下
1 | from Crypto.Util.number import * |
待更新。。。