RSA加密
RSA加密是典型的非对称加密算法。RSA加密主要由五个部分组成:
- 原文
M
- 密文
C
- 公钥
PU
和私钥PR
- 加密算法
E(x)
- 解密算法
D(x)
RSA算法的实现整体又分为三个过程:
- 生成密钥对
- 加密
- 解密
实现上述三个步骤用到了六个数学变量p,q,n,φ(n),e,d
,下文将会说明。
简单理解下RSA加密:任何计算机信息都能转换成二进制,也能转换成十进制整数。这里M是一个整数,选择一个数字e进行M的e次方运算,再选取整数N进行取模运算,结果用c表示。比如整数7用公钥(2,23)进行加密后得到密文3,我们可以看到给定M,e,N是很容易算出C的,但是给定e,n,C却很难得出M。这个时候我们就要用到私钥(d,n)来进行解密得到M,RSA的算法规则在适当的选择e和N的前提下一定存在一个d使得C^d mod n=M
。RSA最复杂的地方在于如何适当的选择e和n,又如何运算出d。
数学基础
-
素数
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
-
同余
≡ :同余号。两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同余 记作 a ≡ b (mod m) # 3 mod 2 ≡ 1
-
互质
互质是公约数只有1的两个整数,叫做互质整数。 * 任意两个质数构成互质关系,比如13和61 * 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10 * 如果两个数中,较大的那个数是质数,则两者构成互质关系,比如97和57 以上两条规则,可以抽象为ー条:质数,和不为自己倍数的自然数互质。 * 1和任意一个自然数都是互质关系 * p是大于1的整数,则p和p-1构成互质关系,比如57和56 * p是大于1的奇数,则p和p-2构成互质关系,比如17和15
-
平方剩余
假设p是素数,a是整数。 如果存在一个整数x使得x^2≡a(mod p) (即x^2-a可以被p整除), 那么就称a在p的同余类中是平方剩余的。
-
欧拉函数
给定任意正整数n,计算在小于等于n的正整数中,有多少个与n构成互质关系,计算这个值的方法叫做欧拉函数。
-
第一种情况:
如果n=1,则φ(1)=1。1与任何自然数都构成互质。
-
第二种情况:
如果n是质数,则φ(n)=n-1。质数与每个小于他的数都构成互质。
-
第三种情况:
如果n是质数的某一个次方,即n=p^k(p为质数,k<=1),则
\[φ(p^k)=p^k-p^{k-1}=p^{K(1-\frac1p)} \] -
第四种情况:
n可以分解成两个互质的整数之积,n=p1*p2,则φ(n)=φ(p1p2)=φ(p1)φ(p2)。
-
第五种情况:
任意大于1的整数,都可以写成一系列质数的积。
\[n=p^{k1}_1p^{k2}_2p^{k3}_3...p^{kr}_r \]根据第四条结论
\[φ(n)=φ(p^{k1}_1)φ(p^{k2}_2)...φ(p^{kr}_r) \]根据第三条结论
\[φ(n)=p^{k1}_1p^{k2}_2p^{k3}_3...p^{kr}_r(1-\frac1{p1})(1-\frac1{p2})...(1-\frac1{pr}) \]等于
\[φ(n)=n(1-\frac1{p1})(1-\frac1{p2})...(1-\frac1{pr}) \]例:
\[φ(1323)=φ(3^2*7^2)=1323*(1-\frac13)(1-\frac17)=756 \]
-
-
欧拉定理
如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的式子成立:
\[a^{φ(n)}≡1(mod\,n) \]a的φ(n)次方减去1能被n整除
-
费马小定理(费马小定理是欧拉定理的一个特例)
如果p是一个质数,而整数a不是p的倍数,则
\[a^{p-1}≡1(mod\,p) \] -
模反元素
如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除
\[ab≡1(mod\,n) \]
RSA加密过程
生成密钥对
- 随机生成两个足够大的素数
p,q
- 计算公共模数
n=p*q
- 计算欧拉函数
φ(n)=(p−1)∗(q−1)
。p,q必须严格保密。 - 选取一个与φ(n)互质的数e作为公钥指数,且1<e<φ(n)。公钥PU=(e,n)
- 计算私钥指数d,d满足
(d*e)mod φ(n)=1
。私钥PR=(d,n)
加密
\[C=M^emod\,n(C为密文)
\]
解密
\[M=C^dmod\,n(M为明文)
\]
目前被破解的最长RSA密钥就是768位,因此我们认为1024位以上的密钥长度是安全的。