RSA加密原理简述
RSA简介:
RSA加密算法使用不同的加密密钥与解密密钥,且由已知加密密钥推导出解密密钥在计算上是不可行的,以此来保障安全。
RSA算法通常是先生成一对RSA密钥,公钥和私钥,私钥由用户保存,公钥可对外公开。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位或2048位 。
RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
前置技能(数论知识)
在讲解原理之前,需要掌握一些数论知识才行。
互质:如果整数 a,b 的最大公因数为 1,即:gcd(a, b) == 1
,称 a, b互质。
欧拉函数
定义:对于正整数 x,
ϕ
(
x
)
:
=
从
1
至
x
中,与
x
互质的整数的个数
\phi(x) := 从1至x中,与x互质的整数的个数
ϕ(x):=从1至x中,与x互质的整数的个数
例如:
ϕ
(
1
)
=
1
,
ϕ
(
2
)
=
1
,
ϕ
(
8
)
=
4
\phi(1) = 1, \phi(2) = 1, \phi(8) = 4
ϕ(1)=1,ϕ(2)=1,ϕ(8)=4
欧拉函数有以下性质:
- 若 p 为质数,则 ϕ ( p ) = p − 1 \phi(p) = p-1 ϕ(p)=p−1
- 若 a, b 互质,则 ϕ ( a b ) = ϕ ( a ) ∗ ϕ ( b ) \phi(ab) = \phi(a)*\phi(b) ϕ(ab)=ϕ(a)∗ϕ(b)
- 若 a, n 互质,则 a ϕ ( n ) ≡ 1 ( m o d n ) a^{\phi(n)} \equiv 1\ (mod\ n) aϕ(n)≡1 (mod n)
证明过程,请阅读 《初等数论及其应用·第五版》p174 - p177,提取密码2233
RSA加密原理
- 选取两个大素数,p, q
- 令 n = p * q,则 ϕ ( n ) = ( p − 1 ) ∗ ( q − 1 ) \phi(n) = (p-1) * (q-1) ϕ(n)=(p−1)∗(q−1)
- 选取一个与 ϕ ( n ) \phi(n) ϕ(n) 互质的数 E
- 计算 E 模 ϕ ( n ) \phi(n) ϕ(n) 的逆元 D, 即 E ∗ D ≡ 1 ( m o d ϕ ( n ) ) E*D \equiv 1\ (mod\ \phi(n)) E∗D≡1 (mod ϕ(n))
现在,公钥就是(E, n),私钥就是 (D,n)
假设待加密数据为 a,(a必须与n互质,只需要保证a < min(p,q) 就行了)
加密:
m
=
E
n
c
r
y
p
t
(
a
)
=
a
E
(
m
o
d
n
)
m=Encrypt(a)=a^E\ (mod\ n)
m=Encrypt(a)=aE (mod n)
解密:
a
=
D
e
c
r
y
p
t
(
m
)
=
m
D
(
m
o
d
n
)
a=Decrypt(m)=m^D\ (mod\ n)
a=Decrypt(m)=mD (mod n)
证明一下:
m
D
=
a
E
D
=
a
k
ϕ
(
n
)
+
1
=
a
k
ϕ
(
n
)
∗
a
=
(
a
ϕ
(
n
)
)
k
∗
a
=
(
k
′
n
+
1
)
k
∗
a
=
1
k
∗
a
=
a
(
m
o
d
n
)
m^D=a^{ED}=a^{k\phi(n)+1}=a^{k\phi(n)}*a=(a^{\phi(n)})^k*a=(k'n+1)^k*a=1^k*a=a\ (mod\ n)
mD=aED=akϕ(n)+1=akϕ(n)∗a=(aϕ(n))k∗a=(k′n+1)k∗a=1k∗a=a (mod n)