什么是公钥密码体制?
背景
一般我们理解的密码体制都是通信双方都拿着相同的密钥,发送方用该密钥对想要通信的内容进行加密,接收方用相同的密钥进行解密,这种方式叫做对称加密。
而如果有一种加密机制是,通信双方各持有一对密钥中的一个,发送方用其中一对密钥加密,接收方只能用该密钥对中的另一个解密,这种体制就叫做公钥密码体制,一般发送方持有的叫公钥,接收方解密密钥叫私钥。
好处及用途
- 对称加密需要双方协商一个密钥,协商和传输的过程的安全性得不到保障
- 可以进行普通点对点加密,知道对方公钥即可
- 通信中的节点都具有唯一私钥,所以可以用其私钥做数字签名,证明身份
- 公钥密码体制性能较差,通信时一般用对称加密,所有公钥密码算法需要能够作密钥交换
RSA
RSA (Rivest-Shamir-Adleman) 算法是满足上面所有优点的一个优秀算法。被广泛运用于现代互联网通信基础。
如果对怎么做到用一个公钥进行加密,用另一个私钥进行解密比如好奇,也想了解一下是什么样的算法支撑起现在互联网通信的基石,可以继续往下看。当然需要掌握一些基础的数论知识。
基础的数论知识
数论主要关心的是素数。以及围绕它展开的模运算(可简单理解为取余)及各种定理,仅此知识就够了。
模运算
如果
a
=
q
n
+
r
a = qn + r
a=qn+r, 则
a
≡
r
(
m
o
d
n
)
a \equiv r \, (mod\,n)
a≡r(modn) 或
a
m
o
d
n
=
r
a\,mod\,n = r
amodn=r,如果
(
a
m
o
d
n
)
=
(
b
m
o
d
n
)
(a \, mod\, n) = (b\,mod\,n)
(amodn)=(bmodn), 则称 a 和 b 是模 n 同余的,表示为
a
≡
b
(
m
o
d
n
)
a\equiv b(mod\,n)
a≡b(modn)。
也可以反推,举例为如果
a
m
o
d
n
=
1
a\,mod\,n = 1
amodn=1, 那么
a
=
q
n
+
1
a = qn + 1
a=qn+1, q 为整数。
模运算的一些基本法则:
- [ ( a m o d n ) + ( b m o d n ) ] m o d n = ( a + b ) m o d n [(a\,mod\,n) + (b\,mod\,n)]\,mod\,n = (a + b)\,mod\,n [(amodn)+(bmodn)]modn=(a+b)modn
- [ ( a m o d n ) − ( b m o d n ) ] m o d n = ( a − b ) m o d n [(a\,mod\,n) - (b\,mod\,n)]\,mod\,n = (a - b)\,mod\,n [(amodn)−(bmodn)]modn=(a−b)modn
- [ ( a m o d n ) ∗ ( b m o d n ) ] m o d n = ( a ∗ b ) m o d n [(a\,mod\,n) * (b\,mod\,n)]\,mod\,n = (a * b)\,mod\,n [(amodn)∗(bmodn)]modn=(a∗b)modn
欧拉定理
欧拉函数
ϕ
(
n
)
\phi(n)
ϕ(n) 就是欧拉函数,它是指小于 n 且与 n 互素的正整数的个数。(互素是指两个数之间只有一个公因素1)。
比如
ϕ
(
7
)
=
6
\phi(7) = 6
ϕ(7)=6,因为 7 是素数,所以 1~6 都与它互素,一共 6 个。
再比如
ϕ
(
6
)
=
2
\phi(6) = 2
ϕ(6)=2, 因为只有 1 和 5 与它互素,一共 2 个。
欧拉定理
对于任意互素的 a 和 n,有:
a
ϕ
(
n
)
≡
1
(
m
o
d
n
)
a ^ {\phi(n)} \equiv 1 (mod\,n)
aϕ(n)≡1(modn)
并且可以证明对于两个素数
p
,
q
p,q
p,q 且
p
≠
q
p\neq\,q
p=q, 那么对于
n
=
p
q
n=pq
n=pq:
ϕ
(
n
)
=
ϕ
(
p
q
)
=
ϕ
(
p
)
∗
ϕ
(
q
)
=
(
p
−
1
)
∗
(
q
−
1
)
\phi(n)=\phi(pq)=\phi(p)*\phi(q)=(p-1)*(q-1)
ϕ(n)=ϕ(pq)=ϕ(p)∗ϕ(q)=(p−1)∗(q−1)
掌握上以基础就能来看 RSA 算法的神奇之处了。