RSA原理以及计算逻辑
RSA基于的基础数学难题是大质数分解难题
计算原理如下:
1. 寻找两个大质数 p p p, q q q,如超过200位的大质数
基于素数定理可知,素数的分布规律在趋于无穷大的时候
π
(
x
)
\pi(x)
π(x) 渐近于
x
/
l
o
g
x
x/logx
x/logx。
所以在数字接近
1
0
200
10 ^ {200}
10200 的时候,随机选择一个200位长度的数字是质数的概率是
1
/
l
n
(
1
0
200
)
1 / ln(10^{200})
1/ln(10200),
很显然,我们是不回去选择偶数的,所以概率可以扩大一倍,
于是大约有
1
/
(
2
/
l
n
(
2
0
200
)
)
=
230
1/(2 / ln(20^{200}))=230
1/(2/ln(20200))=230 个数中会找到一个质数。
基于拉宾概率素性检验可知,随机找一个正整数,只要通过100次米勒检验,那么该数字是合数的概率不足
(
1
/
4
)
100
<
1
0
−
60
(1/4)^{100}<10 ^ {-60}
(1/4)100<10−60。这个时候我们就可以基本认定改数字是质数了。
于是上述操作在计算机中可以极为轻松的得到。于是我们就有了两个大质数
p
,
q
p,q
p,q
2. 生成公私钥
-
获得 n = p ⋅ q n=p \cdot q n=p⋅q
-
计算 n n n 的欧拉函数 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n) = (p-1)(q-1) ϕ(n)=(p−1)(q−1)
注意:这是因为欧拉函数 ϕ ( n ) \phi(n) ϕ(n) 是一个乘性函数 -
根据步骤1的方法再生成一个大于 p , q p,q p,q 的素数 e e e
这样即满足了 ( e , ϕ ( n ) ) = 1 (e,\phi(n))=1 (e,ϕ(n))=1 -
目标为找到 关于 e e e的一元一次同余方程式 e d ≡ 1 ( m o d ϕ ( n ) ) ed \equiv 1 (mod \ \phi(n)) ed≡1(mod ϕ(n)) ,求逆元 d d d
一次丢番图方程,代码形式类似递归,思路应该是连分数求解 -
此时得到公钥 ( e , n ) (e,n) (e,n),私钥 d d d
3. 加解密逻辑
明文信息为
P
P
P
加密为
E
(
P
)
=
C
≡
P
e
(
m
o
d
n
)
E(P)=C \equiv P^e(mod \ n)
E(P)=C≡Pe(mod n)
解密为
D
(
E
(
P
)
)
=
E
(
P
)
d
(
m
o
d
n
)
≡
P
e
d
(
m
o
d
n
)
D(E(P))= E(P)^d (mod \ n) \equiv P^{ed} (mod \ n)
D(E(P))=E(P)d(mod n)≡Ped(mod n)
因为
e
d
≡
1
(
m
o
d
ϕ
(
n
)
)
ed \equiv 1 (mod \ \phi(n))
ed≡1(mod ϕ(n)),所以 ed 可以写成
k
ϕ
(
n
)
+
1
k\phi(n)+1
kϕ(n)+1,其中
k
k
k 是正整数
所以有
D
(
E
(
P
)
)
≡
P
k
ϕ
(
n
)
⋅
P
(
m
o
d
n
)
D(E(P)) \equiv P^{k\phi(n)} \cdot P \ (mod \ n)
D(E(P))≡Pkϕ(n)⋅P (mod n)
以及欧拉定理可知
P
k
ϕ
(
n
)
≡
1
(
m
o
d
n
)
P^{k\phi(n)} \equiv 1 (mod \ n)
Pkϕ(n)≡1(mod n)
所以
D
(
E
(
P
)
)
≡
P
(
m
o
d
n
)
D(E(P)) \equiv P (mod \ n)
D(E(P))≡P(mod n)
针对RSA的攻击
哈氏广播攻击(Hastad broadcast attack)
用不同的密钥针对同一段明文加密
防御方式:针对明文信息填充不同的随机数在进行加密
p , q p,q p,q满足 q < p < 2 q q<p<2q q<p<2q 的时候解密 d d d 的次数小于 n 1 / 4 / 3 n^{1/4}/3 n1/4/3
这表明在生成 p , q p,q p,q 的时候 二者距离不能过近
得知大质数 p , q p,q p,q的部分信息
可以通过解密时间来进行攻击
可以在解密的时候随机等待时间
拉宾密码系统
一种RSA密码系统的变种
ElGamal密码系统原理以及计算逻辑
lGamal基于的基础数学难题是求模大素数的离散对数的困难性
计算原理如下:
1. 寻找一个大素数 p p p 和 这个素数的原根 r r r
这里找大素数不止依靠拉宾素性检验就可以了,因为我们还需要寻找相对应的原根,所以需要进行以下操作
-
(1) 寻找一个200位长度的大素数 q q q
-
(2) 去计算 2 q + 1 2q+1 2q+1 是否通过拉宾素性检验,通过则将其定义为 p p p 否则重新寻找大素数 q q q
-
(3) 此时拥有了一个大素数 q q q 和另一个大素数 p = 2 q + 1 p=2q+1 p=2q+1
-
(4) 注意,这样 ϕ ( p ) = p − 1 = 2 q \phi(p) = p-1 = 2q ϕ(p)=p−1=2q,于是乎,只要随机找一个大数 r r r 使其满足
r ϕ ( p ) / 2 = r q ≢ 1 ( m o d p ) r^{\phi(p)/2} = r^q \not \equiv 1 ( mod \ p) rϕ(p)/2=rq≡1(mod p) 以及
r ϕ ( p ) / q = r 2 ≢ 1 ( m o d p ) r^{\phi(p)/q} = r^2 \not \equiv 1 ( mod \ p) rϕ(p)/q=r2≡1(mod p)
即可判定 r r r 为 p p p 的原根,此时完成大素数与原根的计算(依据定理9.1.1)
2. 生成公私钥
随机生成一个大数 a a a 作为私钥,计算 r a ≡ b ( m o d p ) r^a \equiv b ( mod \ p) ra≡b(mod p),此时,公钥为 ( p , r , b ) (p,r,b) (p,r,b),私钥为 a a a
3. 加解密逻辑
明文信息为
P
P
P
加密为
E
(
P
)
=
(
γ
,
δ
)
E(P) = (\gamma, \delta)
E(P)=(γ,δ)
其中 先生成一个随机整数
k
k
k 得到
γ
=
r
k
(
m
o
d
p
)
,
0
≤
γ
≤
p
−
1
\gamma = r^k ( mod \ p), \qquad 0 \leq \gamma \leq p-1
γ=rk(mod p),0≤γ≤p−1
以及
δ
=
P
⋅
b
k
(
m
o
d
p
)
,
0
≤
δ
≤
p
−
1
\delta = P \cdot b^k ( mod \ p), \qquad 0 \leq \delta \leq p-1
δ=P⋅bk(mod p),0≤δ≤p−1
解密为
D
(
C
)
=
γ
a
‾
δ
D(C) = \overline{\gamma^a}\delta
D(C)=γaδ
其中
γ
a
‾
\overline{\gamma^a}
γa 代表
γ
a
\gamma^a
γa 的逆
依据欧拉定理可知,因为
p
p
p 是素数,
γ
<
p
\gamma<p
γ<p 所以
(
γ
,
p
)
=
1
(\gamma,p)=1
(γ,p)=1 ,于是有
γ
ϕ
(
p
)
≡
1
(
m
o
d
p
)
\gamma^{\phi(p)} \equiv 1 ( mod \ p)
γϕ(p)≡1(mod p)
这样我们计算
γ
a
‾
\overline{\gamma^a}
γa 即可通过
γ
a
‾
=
γ
ϕ
(
p
)
−
a
=
γ
p
−
1
−
a
\overline{\gamma^a} = \gamma^{\phi(p)-a}=\gamma^{p-1-a}
γa=γϕ(p)−a=γp−1−a 得到
于是解密
D
(
C
)
=
γ
p
−
1
−
a
⋅
δ
(
m
o
d
p
)
D(C)=\gamma^{p-1-a} \cdot \delta (mod \ p)
D(C)=γp−1−a⋅δ(mod p)
在正确性上有
D
(
C
)
=
γ
a
‾
δ
=
r
k
a
‾
⋅
P
b
k
=
(
r
a
)
k
‾
⋅
P
b
k
=
b
k
‾
⋅
b
k
⋅
P
≡
P
(
m
o
d
p
)
D(C)= \overline{\gamma^a}\delta = \overline{r^{ka}} \cdot Pb^k=\overline{(r^a)^k} \cdot Pb^k=\overline{b^k} \cdot b^k \cdot P\equiv P (mod \ p)
D(C)=γaδ=rka⋅Pbk=(ra)k⋅Pbk=bk⋅bk⋅P≡P(mod p)