Jumping's Second Law in RSA

Sin(πz)=Sin(π∗z)Sin(π ^ z) = Sin(π * z)

即

(πz)mod  (2∗π)=(π∗z)mod  (2∗π)(π ^ z) \mod (2 * π) = (π * z) \mod (2 * π)

那么在RSA中我们可以使用Jumping’s Second Law

将ee模ϕ(n)\phi(n)求逆元问题转换为ee模nn求逆元的问题

即

c≡memod  n≡m∗emod  nc ≡ m ^ e \mod n ≡ m * e \mod n

即我们可以通过求解ee模nn的逆元来求解明文

m≡c∗e−1mod  n≡m∗e∗e−1mod  nm ≡ c * e ^ {-1} \mod n ≡ m * e * e ^ {-1} \mod n

POC如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import gmpy2

p = 2713
q = 3733
m = 8701623
e = 3163
n = p * q
c = pow(m, e, n)

# RSA Decrpytion

phi = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi)
m1 = pow(c, d, n)
print(m1)

# Jumping's Second Law in RSA

e_ = gmpy2.invert(e, n)
m2 = (c * e_) % n
print(m2)

"""
8701623
8701623
"""

上述内容在RSA中对于Jumping’s Second Law的使用并不是很严谨

这里给出一个更加严谨的使用

πzmod  2∗π=π∗zmod  2∗ππ ^ z \mod 2 * π = π * z \mod 2 * π

令ππ为n2\frac{n}{2}, zz为ee

则有

(n2)emod  n=(n2)∗emod  n(\frac{n}{2})^e \mod n = (\frac{n}{2}) * e \mod n – (1)

这里由于nn为pp, qq两个素数之积,n2\frac{n}{2}不是整数

所以我们需要使用三素数RSA,令第三个素数rr为2

n=p∗q∗r=2∗p∗qn = p * q * r = 2 * p * q

则当m=p∗q=n2m = p * q = \frac{n}{2}时

将m=n2m = \frac{n}{2}和c≡memod  nc ≡ m ^ e \mod n带入式(1)可得

c≡memod  n≡m∗emod  nc ≡ m ^ e \mod n ≡ m * e \mod n

POC如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import gmpy2
from Crypto.Util.number import *

p = getPrime(16)
q = getPrime(16)
e = getPrime(16)
r = 2
n = p * q * r
m = p * q
c = pow(m, e, n)
print(m)

# RSA Decryption

phi = (p - 1) * (q - 1) * (r - 1)
d = gmpy2.invert(e, phi)
m1 = pow(c, d, n)
print(m1)

# Jumping's Second Law in RSA Decryption

e_ = gmpy2.invert(e, n)
m2 = (c * e_) % n
print(m2)

"""
1854486911
1854486911
1854486911
"""

即在三素数RSA中有一个素数为2且mm为其他两个素数之积时

可以使用Jumping’s Second Law对RSA算法进行攻击

将memod  nm ^ e \mod n转变为m∗emod  nm * e \mod n

将分解nn的时间复杂度O(n)O(\sqrt{n})

降到使用EEA计算ee模nn逆元的时间复杂度O(log⁡2n)O(\log_2 n)

大大降低了RSA私钥的计算难度


考虑到SinSin函数的对称性

则有

πzmod  2∗π≡π−(π∗z)mod  2∗ππ ^ z \mod 2 * π ≡ π - (π * z) \mod 2 * π

即

c≡memod  n≡m∗(1−e)mod  nc ≡ m ^ e \mod n ≡ m * (1 - e) \mod n

其中nn为三素数之积且其中一个素数为2,mm为其他两个素数之积

那么在这种情况下进行RSA解密则需要计算1−e1 -e模nn的逆元

即

m≡c∗(1−e)−1mod  nm ≡ c * (1-e)^{-1} \mod n

但由于nn和1−e1-e均为偶数,无法求(1−e)(1-e)模nn的逆元

若e为偶数则在正常RSA解密中无法求ee模ϕ(n)\phi(n)的逆元

故这种情况下无解

EOF