RSA算法是公开的,看着很简单,其实破解起来难度还是很大的,下面简单的浅析下它的原理。1、关于数学方面
关于欧拉函数,对于任意素数p,所有小于p的正整数都跟它互质,所以φ(p)=p?1。质数又称素数,有无限个。
如果p和q均为素数,那么对于整数n=pq,有φ(n)=φ(p)φ(q)=(p?1)(q?1)。
互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数。
质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
2、实际求法
我们要求的是E,D和N,
- 首选我们要先去准备两个很大的质数,A和B,这里之所以要尽量选择大是因为如果很小的话会很容易被破解,然后去计算出N=p*q,再去计算出M=(p-1)*(q-1),这里M的计算其实是通过求N的欧拉函数的出来的,然后去找一个整数E,这个整数E要满足两个条件,一个就是1< E < M以及要让E和M互质
- 也就是说除了1之后,没有其他的公约数,E和N也就是我们所要求的公钥了,公钥一般比较简单。
- 接着我们要去求D,D这个数要满足两个条件1 < D < L,这里的L就是L 是 p-1 和 q-1的最小公倍数。还有一个条件就是E*D%M=1,D和N就是私钥
【RSA原理浅析】密文=明文^E mod N这里需要注意的是密文和明文的实际长度都是小于等于N的,但是其实尽管这么说,其实从传输和存储角度,仍然是按照标准位长来进行的,所以,即使我们加密的是一字节的明文,运算出来的结果也要按照标准位长来使用的。对于要进行加密的数据有这样的要求,加密的真实数据长度是(密钥长度/8-11))字节。也就是说如果密钥是1024位的,加密内容的真实数据长度不能超过1024/8 - 11 = 117 bytes
明文=密文^D mod N
其实RSA 1024实际可加密的明文长度最大也是1024bits,上面说了加密内容的真实数据长度为117个字节,但其实后面还有11个字节是进行padding的,因为如果没有padding,用户无法确分解密后内容的真实长度
RSA算法在通信加密、签名认证等领域都起着重要作用。