RSA
加密的核心其实是欧拉定理,通过这个定理得到了这种非对称加密算法
一、算法介绍
找到两个素数ppp和qqq,并计算n=pqn=pqn=pq
找到(d,φ(n))(d,\varphi(n))(d,φ(n)),即ddd与φ(n)\varphi(n)φ(n)互质,其中0<d<φ(b)0<d<\varphi(b)0<d<φ(b),φ(n)\varphi(n)φ(n)为欧拉函数,是指<n<n<n且与nnn互质的正整数的个数
因为n=pqn=pqn=pq,所以φ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1)φ(n)=(p−1)(q−1),也就是说ddd与(p−1)(q−1)(p-1)(q-1)(p−1)(q−1)互质
再找到0<e<φ(n)0<e<\varphi(n)0<e<φ(n)使得de≡1(mod φ(n))de\equiv1(mod\space\varphi(n))de≡1(mod φ(n)),即dedede除以φ(n)\varphi(n)φ(n)余数为1
那么形成秘钥对(n,d)(n,d)(n,d)和(n,e)(n,e)(n,e),分别是私钥和公钥
使用秘钥对(n,x)(n,x)(n,x)加密的方法为f(a,n,x)=ax(mod n)f(a,n,x)=a^x(mod\space n)f(a,n,x)=ax(mod n),解密为同一函数
那么就可以用公钥加密私钥解密或用私钥加密公钥解密,即
B=f(A,n,d)B=f(A,n,d)B=f(A,n,d)且A=f(B,n,e)A=f(B,n,e)A=f(B,n,e)
但细心的人会发现,知道nnn就知道了φ(n)\varphi(n)φ(n),结合ddd就可以算出eee,这样知道公钥就知道私钥
其实,RSA
加密的核心就在于ppp和qqq的选择,这两个质数一定要选择的很大,相乘容易,分解难
所以破解往往长达数月(nnn的长度为512和七百多的RSA
已经被成功破解)
所以现在nnn的长度至少为1024,有很多是2048
二、欧拉定理
设nnn和xxx为正整数,(x,n)=1(x,n)=1(x,n)=1,则有xφ(n)≡1(mod n)x^{\varphi(n)}\equiv1(mod\space n)xφ(n)≡1(mod n),这就是欧拉定理,下面简单的证明一下
构造modnmod nmodn的既约剩余系(不懂的同学们看第三块)
设为a1,a2,...,aφ(n)a_1,a_2,...,a_{\varphi(n)}a1,a2,...,aφ(n),并找一个与nnn互质的数xxx,根据既约剩余系的积不变性(见第三块),有
既约剩余系xa1,xa2,...,xaφ(n)xa_1,xa_2,...,xa_{\varphi(n)}xa1,xa2,...,xaφ(n)的积与上述既约剩余系的积mod nmod\space nmod n同余
设a1,a2,...,aφ(n)a_1,a_2,...,a_{\varphi(n)}a1,a2,...,aφ(n)的积为kkk,那么第二个既约剩余系的乘积为kxφ(n)kx^{\varphi(n)}kxφ(n)
则有k≡kxφ(n)(mod n)k\equiv kx^{\varphi(n)}(mod\space n)k≡kxφ(n)(mod n),而因为aia_iai与nnn互质,所以kkk与nnn互质,所以两边同时除去kkk
xφ(n)≡1(mod n)x^{\varphi(n)}\equiv 1(mod\space n)xφ(n)≡1(mod n),得证!
三、既约剩余系
设有正整数nnn,找到rrr的集合,其中1≤r≤n1\le r\le n1≤r≤n且(r,n)=1(r,n)=1(r,n)=1
设这个集合为r1,r2,...,rk{r_1,r_2,...,r_k}r1,r2,...,rk,那么根据欧拉函数的定义,k=φ(n)k=\varphi(n)k=φ(n)
对于一个φ(n)φ(n)φ(n)元正整数集合,如果对其每一个元素mod nmod\space nmod n后得到的集合与上述集合相等
那么称这个集合为mod nmod\space nmod n的既约剩余系
而根据上述定义,所有mod nmod\space nmod n的既约剩余系mod nmod\space nmod n的性质类似
显然,任何两个mod nmod\space nmod n的既约剩余系的和与积mod nmod\space nmod n同余(因为每个元素对应mod nmod\space nmod n同余)
所以既约剩余系有和不变性和积不变性
四、总结
RSA
加密算法是通过欧拉定理得到的,该算法的安全性来源于大数分解质因数的困难,在选取ppp和qqq的时候要尽可能的大一些
而RSA
因为涉及到大数运算,甚至包括幂运算,所以速度比对称加密算法慢得多,一般用于加密对称加密的较短秘钥