RSA系列——使用原理

写在前面:封面图的清晰度已经尽力了…… 这么经典的照片分辨率却如此渣渣orz(PS:仔细看会发现黑板上有一个P=NP)

RSA,或称RSA算法、RSA公钥(第六版现代汉语词典注音为yuè,笔者则认为yào并不好听)系统,是一种密码系统(cryptosystem),简单暴力地顾名思义,其用处是加密。

关于RSA的名称,英文wiki如是说:

RSA is made of the initial letters of the surnames of Ron RivestAdi Shamir, and Leonard Adleman, who first publicly described the algorithm in 1977.

正是由发明它的三位科学家的last name的首字母组成的。

RSA作为一种加密算法,最基本的作用自然是确保信息传递的安全。当被传输的信息被加密之后,即使在传输过程中被窃密,也要使窃密者几乎不可能将密文破译。《模仿游戏》有一句台词大概是这样的:德军的无线电波满天飞,而我们根本无法破译其中的信息。显而易见,比起防止信息传递过程中被窃密者拦截,将信息进行有效的加密更容易实现。研究表明,除非P=NP,不可能在一个“令人接受”的时间内对一个大整数进行质因数分解。基于这一点,RSA可靠程度非常高。

像刚从Pascal转入C++的小朋友那样,让我们看看如何像使用stl中的set一样来使用RSA(也就是将其当作科技黑箱):设有信息集合DD中的所有元素便是我们能使用的用来作为信息载体的文字。为了方便,不妨假设D中的元素全都是正整数。设有从DD一一映射的函数f,它的反函数记作f^{-1},也就是说有\forall x\in D满足f^{-1}(f(x))=x。此时,我们可称f为一个公钥f^{-1}为与之对应的密钥。假设现在Bob要给Alice发一些不可描述的信息,于是对于这段信息中的每一个文字M,Bob都将计算出f(M)并把f(M)发送给Alice。Alice收到f(M)后,再计算f^{-1}(f(M))便可以得到原来的M了。

上面的叙述显得十分的啰嗦,因为“加密”和“解密”就是使用某个函数和它的反函数的两个过程。但RSA的可怕之处在于:我们甚至可以将公钥公之于众,因为通过公钥来计算出密钥几乎是不可能的。下面将对其原理进行阐述,理解它可能需要一些基本的数论知识。

先不论使用了何种方法,我们得到了两个大质数pq,记n=pq,则\varphi (n)=(p-1)(q-1)\varphi (n)为欧拉函数,表示不超过n且与n互质的正整数的个数)。选取一个与\varphi (n)互质的较小奇数e,同时计算出e在模\varphi (n)下的唯一乘法逆元d(即ed\equiv 1(mod\ \varphi (n)))。

下面证明对于1n-1中任意整数MM^{ed}\equiv M(mod\ n)

由于p是质数,由费马小定理有M^{p-1}\equiv 1(mod\ p)。并且注意到一定存在整数k使得ed=k\varphi(n)+1=k(p-1)(q-1)+1,那么将费马小定理得到的同余方程两边进行乘方再乘M便得到了M^{ed}\equiv 1(mod\ p),同理有M^{ed}\equiv 1(mod\ q)。将M^{ed}看作未知数,我们得到了一个线性同余方程组。根据中国余数定理(Chinese Remainder Theorem),其在模pq即模n意义下只有一个解。显然M是其一个解,也就是说M^{ed}\equiv M(mod\ n)。证毕。

扫描二维码关注公众号,回复: 2660217 查看本文章

由此可见,我们可令公钥为f(M)=M^{e}\ mod\ n,密钥即为f^{-1}(M)=M^d\ mod\ n。一个人在使用RSA时,将数对(e,n)作为公钥对外公布,自己保留密钥(d,n)

RSA最基本的使用原理全部疑难至此解决了,当然要使用好它还不得不做一些其它的工作,比如安全性高的原因还没有得到阐述,如何找到足够大的质数等等,这些我们将在后续文章中进行讨论。

猜你喜欢

转载自blog.csdn.net/root_0423/article/details/81209180