RSA非对称加密原理
我们都知道对称加密是用一串密钥进行加密以及解密,故密钥保存在接受者和发送者手中,但一旦被窃取了密钥,安全信息自然的就暴露了。
故而就有了非对称加密:设计两种密钥,一种公钥对所有人公开,另一种密钥只有接受者拥有。发送者只能用公钥进行加密,接受者拿到密文后只能用密钥进行解密。
一,加密思路:
有没有一种正向加密简单,逆向求原值难呢,答案就是取模运算(单向函数),如要计算
3
3
m
o
d
7
3^3 mod 7
33mod7 很简单 答案是2 但要计算 原来的数:9,情况就比较复杂了。非对称加密正是利用了这一点!
公式:加密:
m
e
m
o
d
N
=
c
m^e mod N=c
memodN=c
解密:
c
d
m
o
d
N
=
m
c^dmodN=m
cdmodN=m
其中m为明文,c为密文,e为公钥,d为密钥。
二,证明过程:
对上面的式子做一下变换得到:
m
e
d
m
o
d
N
=
m
m^{ed}modN =m
medmodN=m 其中对于e,d的计算显得尤为重要,这里引入欧拉定理:
m
ψ
(
N
)
m
o
d
N
=
1
m^{\psi(N)}modN = 1
mψ(N)modN=1(对于任何一个与N互质的正整数m,提取它的
ψ
(
N
)
\psi(N)
ψ(N)次方然后对n取余数结果都等于1,其中,欧拉函数
ψ
(
N
)
\psi(N)
ψ(N)定义:小于或等于N的正整数中,有多少个与N互质的数。
我们对欧拉定理进行变形:
先左右两端同时去k次幂得到:
m
k
ψ
(
N
)
m
o
d
N
=
1
m^{k \psi(N)}modN = 1
mkψ(N)modN=1
然后左右两端同乘以m得到:
m
k
ψ
(
N
)
+
1
m
o
d
N
=
m
m^{k \psi(N)+1}modN = m
mkψ(N)+1modN=m
这里我们发现和上面的加密公式变换后很像:
m
e
d
m
o
d
N
=
m
m^{ed}modN =m
medmodN=m
推出:
d
=
k
ψ
(
N
)
+
1
e
d=\frac{k\psi(N)+1}{e}
d=ekψ(N)+1 相关定理:
ψ
(
p
∗
q
)
=
ψ
(
p
)
∗
ψ
(
q
)
\psi(p*q)=\psi(p)*\psi(q)
ψ(p∗q)=ψ(p)∗ψ(q)
p,q为质数则
ψ
(
p
∗
q
)
=
ψ
(
p
)
∗
ψ
(
q
)
=
(
p
−
1
)
∗
(
q
−
1
)
\psi(p*q)=\psi(p)*\psi(q)=(p-1)*(q-1)
ψ(p∗q)=ψ(p)∗ψ(q)=(p−1)∗(q−1)
其中e,N是公开的作为公钥,而d为私钥,RSA核心就在于
ψ
(
N
)
\psi(N)
ψ(N)(p,q)极为难求,即(对大数求与因数分解且因数为质数)。
三,以下我们举一个小例子:
公钥e取一个较小的数字3,p,q取17和23,k取5
则算出n为352,则私钥d=587
我们将e=3,n=352公开,发送者将明文a(ASII码值为97)加密为:
9
7
3
m
o
d
352
=
289
97^3mod352=289
973mod352=289发送给接受者,接受者拿着私钥d=587对密文289进行解密,得到:
28
9
587
m
o
d
352
=
97
289^{587}mod352=97
289587mod352=97
四,结语:
我们可以看到在加密解密的过程中求指数和取模的过程中计算量还是很大的,当我们需要加密信息过于多时计算量会很大,故而在实例应用中常常将对称加密
和非对称加密
结合起来使用,用对称加密
加密要发送的信息,然后用非对称加密
加密对称加密
的密钥。