l
单向函数:
l
两个集合
X
、
Y
,
F
是两个集合之间的映射
,
有
Y = F(X)
,则
:
1) 已知 X 求 Y 容易
2) 已知 Y 反推 X 困难
例如: y = f(x) = ax
1) 求常数a的x次方,简单来说做x次乘法即可得到y,如果采用二分法,计算的复杂度会更低。
2) 反过来,如果已知y求x,难度要比做x次乘法大很多。
如果由x计算ax用时1秒,那么从ax反推x需要的时间约1014秒
l
公钥和私钥的产生
l
任意选择两个大的质数
(
素数
)
p
和
q
,
p
不等于
q
,计算
N=
pq
l
根据欧拉函数,不大于
N
且与
N
互质的整数个数为
(p-1)(q-1)
l
选择一个整数
e
与
(p-1)(q-1)
互质,并且
e
小于
(p-1)(q-1)
l
用以下这个公式计算
d
:
d×e
≡ 1 (mod (p-1)(q-1))
l
将
p
和
q
销毁
后,
(
N,e
)
是公钥,
(
N,d
)
是私钥
例如:
l
选
素数
p=47
和
q
=
71
,得
N=3337
,
j
(n)=(47-1)×(71-1)
=
3220
l
选择
e=79
,求得私钥
d=e
-1
º
1019(mod 3220)
公开
N=3337
和
e=79
l
加密消息
l
假设
Bob
想给
Alice
送一个消息,他知道
Alice
产生的公钥
N
和
e
l
将原始信息分为多段,每一段(假定为
n
)分别用以下公式计算出
c
:
l
l
将多个
n
计算出的多个
c
串在一起,就是密文,发送即可。
l
例如:公钥
(
N,e
)=(3337,79)
,私钥
(
N,d
)=(3337,1019)
l
现要发送明文
688
,计算:
688
79
(mod 3337)=1570
l
解密消息
l
Alice
得到
Bob
的消息
c
后就可以利用她的密钥(
N,d
)来解码。她可以用以下这个公式来将
c
转换为
n
:
l
l
得到
n
后,她可以将原来的信息
m
重新复原。
l
例如:公钥
(
N,e
)=(3337,79)
,私钥
(
N,d
)=(3337,1019)
l
收到密文
1570
后,用私钥
d
=
1019
进行解密:
15701019(mod 3337)=688
RSA应用
l
加密少量数据
l
比起
DES
和其它对称算法来说,
RSA
的运算速度要慢得多
。
实际使用时,RSA算法不用来加密消息,而是用来加密传输密钥,加密消息用对称算法,如DES。
实现数字签名
将RSA算法反向使用(私钥加密公钥解密),对消息摘要加密,可以实现数字签名的功能。
数字签名可以防止数据篡改、数据抵赖和数据伪造发生
小A同学准备一些文字(信件),选择一个密钥利用DES-Tool对文字进行加密得到密文1。
小B同学运行RSA-Tool,生成公钥和私钥,将公钥发送给小A同学,私钥自己留存。
小A同学利用小B同学的公钥对加密信件时使用的对称密钥进行加密,得到密文2。将密文1和密文2一同发送给小B同学。
小B同学首先用自己的私钥解密密文2,接着利用解密密文2得到的对称密钥在DES-Tool中解密密文1,得到原始文字内容。