之前介绍了MOD运算,这篇文章主要是针对非对称密码体制中常用的一种算法——RSA算法的加密过程进行分析。
RSA加密算法是一种非对称加密算法,它也是一种分组加密算法,它是基于数论中的欧拉定理实现的,采用的单向函数是大素数相乘,相乘容易但是因数分解很困难。RSA算法的安全性由“大素数乘积的因数分解”困难来保障。RSA使用两个密钥,一个公共密钥,一个专用密钥。如果用其中一个加密,则可用另一个解密,密钥长度从40到2048bit可变,加密时把明文分成块,块的大小可变,但不能超过密钥的长度,RSA算法把每一块明文转化为与密钥长度相同的密文块。
首先,先介绍一个数论中的一个基本概念“同余式”:
设p是给定的一个正整数,a、b是整数,a和b被p除时有相同的余数,则称a与b对模p同余,a≡b(mod p),或记为a≡b( p ),这个式子称为模p的同余式。
除了百度百科-同余式介绍的等价含义,我们可以将同余式的等价含义归纳为以下几点:
- a=kp+b, k属于整数。
- amodp=bmodp
- (a-b)modp=0
- a-b能被p整除,即p|(a-b)
这个的证明方法就是将a=pk1+r(k1为a被p除的商,r为余数),b=pk2+r(k2为b被p除的商,r为余数),两式相减,可得a-b=p(k1-k2)。
说完同余式的概念,就说一下RSA加密算法的密文是如何计算的。
其中N是两个大素数的乘积,e是与欧拉函数 互素的小整数(最大公约数为1),明文是消息m转换为一个小于N的非负整数n,(e,N)为公钥,密文c的计算是模指数运算的问题,通常的模指数运算方法是二进制算法(就是将e转换为二进制数,此时 转换为多个指数式的乘积,最后依据取余运算性质或者同余运算的性质就可以得到密文)。
加密算法的密文求解,本身就是模指数运算,求解的示例如下:
(模指数运算常用的方法就是二进制算法,参考模指数运算)