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)求逆元问题转换为eenn求逆元的问题

cmemodnmemodnc ≡ m ^ e \mod n ≡ m * e \mod n

即我们可以通过求解eenn的逆元来求解明文

mce1modnmee1modnm ≡ 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的使用并不是很严谨

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

πzmod2π=πzmod2ππ ^ z \mod 2 * π = π * z \mod 2 * π

ππn2\frac{n}{2}, zzee

则有

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

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

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

n=pqr=2pqn = p * q * r = 2 * p * q

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

m=n2m = \frac{n}{2}cmemodnc ≡ m ^ e \mod n带入式(1)可得

cmemodnmemodnc ≡ 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算法进行攻击

memodnm ^ e \mod n转变为memodnm * e \mod n

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

降到使用EEA计算eenn逆元的时间复杂度O(log2n)O(\log_2 n)

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


考虑到SinSin函数的对称性

则有

πzmod2ππ(πz)mod2ππ ^ z \mod 2 * π ≡ π - (π * z) \mod 2 * π

cmemodnm(1e)modnc ≡ m ^ e \mod n ≡ m * (1 - e) \mod n

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

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

mc(1e)1modnm ≡ c * (1-e)^{-1} \mod n

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

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

故这种情况下无解

EOF