工作过程:
RSA算法是一种非对称公开密钥密码算法。这个算法中有两个密钥:一个是公钥,它由通信双方所共同拥有;还有一个是私钥,它由通信接收方所拥有。现在来简要说明一下通信接收方生成公钥和密钥的过程。
1、选择两个大素数p和q。p、q的值越大,破解RSA越困难。
2、计算n=p*q和z=(p-1)*(q-1)。
3、选择一个小于n且和z互质的数e作为公钥。
4、选择一个数d,这个d要满足ed mod z=1。进行到这一步,我们已经可以得到公钥
(n,e)以及私钥(n,d)
5、若此时发送方发送由整数m表示的比特组合,则明文报文m加密后为c=(m^e)mod n
接收方解密方式如下式m=(c^d)mod n。
工作原理:
1、先来分析一下为何(c^d)mod n==m。首先c=(m^e)mod n,则解密运算式可以写成
(((m^e)mod n)^d) mod n,模运算有一个性质:((a mod n)^d) mod n==(a^d) mod n,
所以解密运算式可以写成(m^(e*d)) mod n。这时我们要运用数论中的一个结论:如果
p和q是素数,且有n=pq且z=(p-1)(q-1),则(x^y) mod n==(x^(y mod z))mod n。这时,令
x=m,y=ed,则(m^(e*d)) mod n==(m^((e*d) mod z))mod n。又前面已知(e*d) mod z==1,
则(m^(e*d)) mod n==(m^((e*d) mod z))mod n==m mod n==m。
2、该算法的安全性是基于以下事实:目前没有已知的算法可以快速进行一个数的因数
分解,这时无法将公钥n快速分解成素数p和素数q。如果已知p和q,则可以通过
公钥(e*d) mod ((p-1)*(q-1))==1这一特性很快推测出密钥d。