1.非对称加密
RSA是一种非对称加密算法。由消息接收者将公钥发送给消息发送者,使用容易被截获的公钥来加密;把私钥一直保存在消息的接收者处,使用不容易被截获的私钥来解密。这样即使攻击者截获了公钥也无法获取加密后的内容。
这种算法还可以用于数字签名。使用发送端的私钥来加密数字签名,使用发送端传输给目标端的公钥来解密数字签名,如果解密成功,证明消息发送端是可靠的。而因为私钥难以获取,攻击者也难以用共钥伪造数字签名。
2.数论知识
欧拉函数
ϕ(N)=小于N的正整数中与N互质的数的数目
欧拉函数有特殊性质:若p和q互质,且N=pq,则有
ϕ(N)=ϕ(p)ϕ(q)=(p−1)(q−1)
模逆元素
如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,也就是ab与1模n时同余:
ab≡1(modn)
欧拉定理
当a,n为两个互质的正整数时,有:
aϕ(n)≡1(modn)
这样,由于
aϕ(n)=a⋅aϕ(n)−1≡1(modn),
aϕ(n)−1就是a关于模n的模逆元素
重要条件
(a⋅b)modn=((amodn)⋅(bmodn))modn
证明:
假设a和b除以n的余数为c1,c2,则a和b可以写成
a=n⋅t1+c1,b=n⋅t2+c2
那么,
a⋅b=n2⋅t1⋅t2+n⋅t1⋅c2+n⋅t2⋅c1+c1⋅c2
因此,a·b除以n的余数为
(c1⋅c2)modn,由于c1和c2都不能被n整除,因此
(c1⋅c2)modn=c1⋅c2,即
(a⋅b)modn=(amodn)⋅(bmodn)
3.RSA实践
- 基础数生成:选择两个大的且不相等的质数p和q,计算N=pq
- 求基础数欧拉函数:
r=ϕ(N)=ϕ(p)ϕ(q)=(p−1)(q−1)
- 寻找公钥:选择一个小于r的整数e使e与r互质
- 生成私钥:求e关于r的模逆元素d
这样(N,e)就是公钥,(N,d)就是私钥,p和q被销毁因此r也随之被销毁。消息接收者在执行完上述步骤后保存私钥,而将公钥发送给消息发送者。消息发送者用公钥加密信息:
c=nemodN
其中n是信息的编码(必须小于N,可以分段编码并加密)。然后将信息发出,接收到消息的一方可以用自己的私钥来解密消息:
n=cdmodN
证明:
n=(((ce)modN)d)modN=重要条件逆用=>cd⋅emodN=模逆元素定义(k为任意正整数)=>ckr+1modN=>(c⋅(ck)r)modN=重要条件=>((cmodN)⋅((ck)rmodN))modN=重要条件=>((cmodN)⋅((ckmodN)rmodN))modN=设任意正整数k为ϕ(N)=>((cmodN)⋅((cϕ(N)modN)rmodN))modN=欧拉公式=>((cmodN)⋅((1)rmodN))modN=c
4.原理
大数分解质因数是很困难的,得到了N也很难得到p和q,自然很难得到(p-1)(q-1)=r,那么得到了e也很难得到e关于r的模逆元素d
而e和d又拥有单向的加密解密性,这使得非对称加密得以成立