公开密钥加密(public-key cryptography),也成为非对称加密,是密码学的一种算法,他需要两个密钥,一个是公开密钥,另一个是私有密钥,一个用作加密的时候,另一个则用作解密。
因为公钥加密的信息只用私钥才能解的开,所以只要私钥不泄露,通信就是安全的。
今天这里只介绍RSA非对称加密。
在数学上d(c(x))=x,来表示加密解密过程。
这里我们使用典型的爱丽丝与鲍勃假设来解释(来自维基)。
在正式介绍RSA之前,先介绍一些数学知识。
如果两个正整数,除了1之外没有其他公因子,我们称这两个数是互质关系。比如15和32,说明不是质数也可以构成互质关系。
关于互质关系,有以下结论:
任意给定正整数n,计算在小于等于n的正整数之中,有多少个与n构成互质关系。计算这个值的方法叫做欧拉函数。以φ(n)表示。如φ(8)=4,应为在1到8之中,与8形成互质关系的有1,3,5,7。
φ(n)的计算方法并不复杂,我们就分情况分析。
第一种情况:
如果n=1,则φ(1)=1。应为1与任何(包括自己)都构成互质关系。
第二种情况:
如果n是质数,则φ(n)=n-1。应为质数与每个小于他的数都构成互质关系。
第三种情况:
如果n是质数的某一个次方,即n=p^k(p为质数,k>=1),则
如φ(8)=φ(2^3)=2^3-2^2=4。
这是应为只有当一个数不包含质数p时,才能与n互质。而包含质数p的数一共有p^(k-1)个,即是1*p、2*p、...、p^(k-1)*p。
上面的式子还可以写成:
第四种情况:
n可以分解成两个互质的整数之积。n = p1 * p2
则 φ(n)=φ(p1p2)=φ(p1)φ(p2)
即积的欧拉函数等于各个因子的欧拉函数之积。如:φ(56)=φ(7*8)=φ(7)*φ(8)=6*4=24
第五种情况:
因为任意大于1的整数,都可以写成一系列质数的积。
根据第四条结论
在根据第三条结论
也就等于
比如:
φ(1323)=φ(3^2*7^2)=1323(1-1/3)(1-1/7)=756
欧拉定理是指:如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的式子成立:
即是a的φ(n)次方减去1,被n整除。比如,3和7互质,φ(7)=6,(3^6-1)/7=104
如果正整数a与质数p互质,应为φ(p)=p-1,所以欧拉函数可写成:
这个就是著名的费马小定理。
如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除。
比如:3和11互质,那么3的模反元素是4,应为3*4-1 可以被11整除。4加减11的整数倍数都是3的模反元素。
欧拉定理可以用来证明模反元素必然存在:
可以看到,a的φ(n)-1次方,就是a的模反元素。
RSA算法之一种非对称加密算法。具体的加密工程如下:
依然使用Alice和他的小伙伴来举例子。
假设Alice想通过一个不可靠的媒体接受Bob的一条私人消息,他可以用下面的方式产生一个公钥和私钥。
其中(N,e)是公钥,(N,d)是私钥。
举个例子:
至此完成计算。
其中N=3233,e=17,d=2753。所以公钥就是(N,e)=(3233,17),私钥(N,d)=(3233,2753)。实际应用中公钥和私钥都是采用ASN.1格式表达的。
在RSA私钥和公钥生成的过程中,共出现过p,q,N,φ(N),e,d,其中(N,e组成公钥),其他的都不是公开的,一旦d泄露,就等于私钥泄露。那么能不能根据N,e推导出d呢?
ed ≡ 1(mod φ(N))。只有知道e和φ(N),才能算出d
φ(N)=(p-1)(q-1)。只有知道p和q,才能算出φ(N)
n=pq,只有将n分解才能算出p和q
所以,只有将n质因数分解,才能算出d。也就意味着私钥破译。
但是,大整数的质因数分解是非常困难的。
加密要用到公钥(N,e)。
假设Bob要向Alice发送加密信息m,他就要用Alice的公钥(N,e)对m进行加密。但m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。
所谓加密就是计算下式的c。
m^e ≡ c (mod n)
假设m=65,Alice的公钥(3233,17),所以等式如下:
65^17≡2790(mod 3233)
所以c等于2790,Bob就把2790发给Alice。
Alice收到Bob发来的2790后,就用自己的私钥(3233,2755)进行解密。
c^d ≡ m (mod n)
也就是c的d次方除以n的余数就是m。
2790^2753 ≡ 65 (mod 3233)
因此得到原文65。
记下来证明为什么用私钥就能解密。就是要证明这个式子:
c^d ≡ m (mod n)
因为加密规则是:
m^e ≡ c (mod n)
于是,c可以写成:
c = m^e - kn
将c代入要我们要证明的那个解密规则:
(m^e - kn)^d ≡ m (mod n)
等同于求证:
m^ed ≡ m (mod n)
因为:ed ≡ 1 (mod φ(n))
所以: ed = hφ(n)+1
将ed代入:
m^(hφ(n)+1) ≡ m (mod n)
接下来,分成两种情况证明上面这个式子。
1. 当m与n互质
根据欧拉定理,此时
m^φ(n) ≡ 1 (mod n)
得到:(m^φ(n))^h × m ≡ m (mod n)
由此原始得到证明。
2. 当m与n不是互质时
此时,由于n等于质数p和q的乘积,所以m必然等于kp或kq。
以 m = kp为例,考虑到这时k与q必然互质,则根据欧拉定理,下面的式子成立:
(kp)^q-1 ≡ 1 (mod q)
进一步得到:
[(kp)^(q-1)]^(h(p-1))× kp ≡ kp (mod q)
即:(kp)^ed ≡ kp (mod q)
改写成:(kp)^ed = tq + kp
上式t必然能被p整除,即t=t'p
(kp)^ed = t'pq + kp
因为m=kp,n=pq,所以:
m^ed ≡ m (mod n)
证明完毕。
注:转载自阮一峰老师