本文在阅读不少他人的优秀博文以及查阅HTTPS协议和RSA等相关资料的基础上整理而成,包含了RSA算法的详细原理及其在HTTPS中的应用。RSA作为HTTPS协议中最为核心的加密/解密算法,其原理却很简单,很容易理解。当你读完本文之后,你也会惊叹于RSA算法发明者的奇思妙想。
首先,RSA的密钥越长,就越难破解。目前被破解的最长RSA密钥是768位二进制。也就是说,长度超过768位的密钥,还无法破解(至少没有人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥及其安全。下面就让我们来认识RSA算法。
##一、互质关系
如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。关于互质关系,有如下结论:
- 1、任意两个质数构成互质关系,如13和61;
- 2、一个数是质数,另一个数只要不是前者的倍数,则两者构成互质关系;
- 3、如果两个数之中,较大的那个数是质数,则两者构成互质关系,如97和57;
- 4、1和任意一个自然数都是互质关系,比如1和99;
- 5、p是大于1的整数,则p和p-1构成互质关系,如57和56;
- 6、p是大于1的奇数,则p和p-2构成互质关系,如17和15。
##二、中国余数定理
原本RSA算法和中国余数定理没有什么直接的联系,但即将介绍的欧拉函数的证明需要用到中国余数定理,固在这里先行介绍一下。
中国余数定理:给出 m m m个两两互质的整数,且它们的乘积为 P P P。假设有一个未知数 M M M,如果我们已知 M M M分别除以这 m m m个数所得的余数,那么在0到 P − 1 P-1 P−1的范围内,我们可以唯一地确定这个 M M M。这个值可以看作是 M M M的一个特解。其它所有满足条件的 M M M,则正好是那些除以 P P P之后余数等于这个特解的数。
从某种角度来说,中国余数定理几乎是显然的。让我们以两个比较小且互质的整数3和4来理解中国余数定理背后的直觉。其中 x m o d y x \bmod y xmody表示 x x x除以 y y y的余数。
从表中可以看到, i m o d 3 i \bmod 3 imod3的值以3位周期在循环,而 i m o d 4 i\bmod 4 imod4则以4为周期在循环。由于3和4是互质的,它们的最小公倍数为12,因而 ( i m o d 3 , i m o d 4 ) (i\bmod 3,\space i\bmod 4) (imod3, imod4)的循环周期是12,不会更短。因此,当 i i i从0增加到11时, ( i m o d 3 , i m o d 4 ) (i\bmod 3,\space i\bmod 4) (imod3, imod4)的值始终没有重复出现。同时, ( i m o d 3 , i m o d 4 ) (i\bmod 3,\space i\bmod 4) (imod3, imod4)也只有12种不同的取值,即当 i i i从0增加到11时, ( i m o d 3 , i m o d 4 ) (i\bmod 3,\space i\bmod 4) (imod3, imod4)与 i i i之间存在一一映射。这就是中国余数定理的内容。
##三、欧拉函数
请思考以下问题:任意给定正整数 n n n,请问在小于等于 n n n的正整数中,有多少个与 n n n构成互质关系?
计算这个值的方法就叫做欧拉函数,以 φ ( n ) \varphi(n) φ(n)表示。在1~8中,与8形成互质关系的是1,3,5,7,所以 φ ( 8 ) = 4 \varphi(8)=4 φ(8)=4。
φ ( n ) \varphi(n) φ(n)的计算方法并不复杂,但为了得到最后的公式,我们需要分以下五种情形讨论:
-
第一种情况:
n = 1 n=1 n=1,则 φ ( 1 ) \varphi(1) φ(1)=1,因为1与任何数(包括自身)构成互质关系。
-
第二种情况:
若 n n n是质数,则 φ ( n ) = n − 1 \varphi(n)=n-1 φ(n)=n−1。因质数与小于它的每一个数都构成互质关系。
-
第三种情况
如果 n n n是质数的某个次方,即 n = p k n=p^k n=pk( p p p为质数, k k k为大于等于1的整数),则 φ ( p k ) = p k − p k − 1 \varphi(p^k)=p^k-p^{k-1} φ(pk)=pk−pk−1。这是因为只有当一个数的因子不包含质数 p p p,才能与 n n n互质。而因子包含质数 p p p的数一共有 p k − 1 p^{k-1} pk−1个( 1 × p , 2 × p , … , p k − 1 × p 1\times p,2\times p,\ldots,p^{k-1}\times p 1×p,2×p,…,pk−1×p),把它们去除,剩下的就是与 n n n互质的数。
上面的式子还可以写成 φ ( p k ) = p k ( 1 − 1 p ) \varphi(p^k)=p^k(1-\frac{1}{p}) φ(pk)=pk(1−p1)。可以看出,第二种情况是第三种情况中 k = 1 k=1 k=1的特例。 -
第四种情况
如果 n n n可以分解成两个互质的整数之积,即 n = p 1 ⋅ p 2 n=p_1\cdot p_2 n=p1⋅p2,则 φ ( n ) = φ ( p 1 ⋅ p 2 ) = φ ( p 1 ) ⋅ φ ( p 2 ) \varphi(n)=\varphi(p_1 \cdot p_2)=\varphi(p_1)\cdot\varphi(p_2) φ(n)=φ(p1⋅p2)=φ(p1)⋅φ(p2),比如 φ ( 56 ) = φ ( 8 × 7 ) = φ ( 8 ) ⋅ φ ( 7 ) = 4 × 6 = 24 \varphi(56)=\varphi(8\times7)=\varphi(8)\cdot\varphi(7)=4\times6=24 φ(56)=φ(8×7)=φ(8)⋅φ(7)=4×6=24。
其实这条结论用“中国余数定理“就很好理解了。简单说下思路:如果 a a a与 p 1 p_1 p1互质( a < p 1 a<p_1 a<p1), b b b与 p 2 p_2 p2互质( b < p 2 b<p_2 b<p2), c c c与 p 1 p 2 p_1p_2 p1p2互质( c < p 1 p 2 c<p_1p_2 c<p1p2),则 c c c与数对 ( a , b ) (a,b) (a,b)是一一对应关系。由于 a a a有 φ ( p 1 ) \varphi(p_1) φ(p1)种可能, b b b的值有 φ ( p 2 ) \varphi(p_2) φ(p2)种可能,则数对 ( a , b ) (a,b) (a,b)有 φ ( p 1 ) φ ( p 2 ) \varphi(p_1)\varphi(p_2) φ(p1)φ(p2)种可能。而 c c c的值有 φ ( p 1 ) φ ( p 2 ) \varphi(p_1)\varphi(p_2) φ(p1)φ(p2)种可能,所以 φ ( n ) = φ ( p 1 ⋅ p 2 ) = φ ( p 1 ) ⋅ φ ( p 2 ) \varphi(n)=\varphi(p_1 \cdot p_2)=\varphi(p_1)\cdot\varphi(p_2) φ(n)=φ(p1⋅p2)=φ(p1)⋅φ(p2)。
补充说明:我们还可以证明一种更加特殊的情况:如果 n n n可以分解为两个质数之积,即 n = p 1 × p 2 n=p_1\times p_2 n=p1×p2( p 1 p_1 p1