1. 说明
本人并不是相关专业的学生和从业人员,只是对RSA感兴趣,并将自己的想法整理成文,与大家分享。
若有任何不妥或者错误的地方,欢迎大家能及时指出,也欢迎大家共同交流。
网上关于RSA加密的文章很多,具体原理就不细说了。
本文主要讲解RSA加密与解密的步骤,并用一个简单的例子举例说明,希望能够帮助读者快速理解RSA加密算法。
2. 简介
RSA的密钥分为公钥和私钥。
公钥即为公布于众的密钥;私钥为自己保存的密钥。
RSA密钥主要用两种用途:加密解密 和 签名。
在加密解密时,公钥加密、私钥解密;在签名时,私钥加密、公钥验签。(详见文章**[1]**)
加密是为了防止信息泄露;签名是防止信息被篡改。
3.RSA密钥计算
RSA的公钥为(N,e);私钥为(N,d)。
接下来就来看看密钥是怎么而计算出来的吧。
3.1 RSA计算步骤:
1. 首先选择两个素数 p 和 q,计算 N=p*q。
一般来说,目前两个数的长度都接近512位是安全的。
2. 计算 Φ(N)=(p-1)*(p-1),其中Φ(N)为N的欧拉函数。
为方便,用r表示Φ(N)的具体数值。(两素数乘积的欧拉函数等于两数分别减一后的乘积).
3. 选取一个正整数e,需要满足以下两点:
a. 1 < e < r
b. e和r最大公约数为1
4. 求d:d*e=1 (mod r)
上式表示的是d*e,再取模r运算,结果为1;更简单的说,d*e除以r余1,商是多少不重要。
5. 记录公钥(N,e),私钥(N,d);并销毁 p 和 q 。
此时,就已经完成了公钥和私钥的生成:公钥为(N,e);私钥为(N,d)。
这时,便可以将p和q销毁(绝对不能让其他人知道)。
公钥可以公布与众,而私钥需要自己保留,不能让他人知道。
举例
本例参考文章[3]。
1. 我们按照要求取 p=43,q=59;则 N=p*q=2537;
2. r=Φ(N)=(p-1)(q-1)=2436;
3. e选择13
4. 根据公式d*e=1 (mod r),计算出d=937。(当然,3373、5809也都是d的解,为计算方便,选取较小的937)
5. 此时,变完成了密钥的产生:公钥为(2537,13);私钥为(2537,937)。
参考文章[3],
3.2 RSA加密步骤
假设,待加密的信息码为 m,加密后的码为 c,解密后的码为 n,即:
\begin{equation}
m --加密–> c --解密–> n
\end{equation}
如果密钥正确,加密解密过程正确,则应该 m 和 n 是相同的。
1. m 为带加密的信息码;若 m 太长则需要对 m 分组,要求每组数都要小于 N。
例如:假设,N=55,m=3412;则m需要分组,m1=34,m2=12。m1、m2均小于N。详见文章[3]
2. 根据公式 m^e=c(mod N),求解c
上式表示的是m的e次方,再取模N运算,结果为1;更简单的说,d*e除以r余1,商是多少不重要。
3. c就是加密后的信息,可以发送给拥有私钥的人。
举例
本例参考文章[3]。
假设我们传输的信息为“secret”,并对其编码。
假设编码规则:
a为00,b为01,c为02,以此类推,y为24,z为25。
故,“secret”编码后为:180402170419。
1. m=180402170419过长,需要对m进行分组,要求每个分组对应的十进制数小于N。
N=2537,按照编码,最大的两位字母组合‘zz’的编码为2525,小于N,则可以按照每两个字母分组。
即,分组后为:m1=1804,m2=0217,m3=0419。
2. 计算c:c1=2343,c2=0710,c3=2017。
3. c=[c1 c2 c3]=234307102017,便可以将加密后的信息发给接收方。
3.3 RSA解密步骤
1. n为待解密的信息
2. 根据公式 c^d=n(mod N),求解n
3. n就是解密后的信息
举例
本例参考文章[3]。
接收加密后的信息为:c=234307102017。
1. 将c拆分:c1=2343,c2=0710,c3=2017;
2. 计算n:n1=1804,n2=0217,n3=0419;
3. 则n=180402170419,译码后便可以得到真正的信息“secret”。
参考文献
[3]https://jingyan.baidu.com/article/597a0643210228312b524319.html