密码学是指研究信息加密,破解密码的技术科学。算法
非对称加密算法,须要两个密钥,公开密钥简称公钥(publicKey) 和私有密钥简称私钥(privateKey)。公钥加密,私钥解密;私钥加密,公钥解密。安全
讲解RSA数学原理以前,必定要明白的几个概念。网络
在大于1的天然数中,除了1和它自己之外再也不有其余因数的天然数。如:二、三、五、七、十一、13。函数
若两个天然数除了1以外没有其余公因子,则这两个数就是互质关系。如:3和五、7和10。post
题目:给定任意一个正整数n,在小于等于n的正整数中有几个与n互质?加密
计算这个题的函数就叫欧拉函数,用Φ(n)表示。
举例:设计
1
、2
、3
、4
、5
、6
与n互质,则Φ(7) = 6。1
、3
、5
、7
与8互质,则Φ(8) = 4。Φ(n) = n - 1
。n = a * b,a和b互质
,则有Φ(n) = Φ(a) * Φ(b)
。n = a * b,a和b均为质数
,则Φ(n) = Φ(a) * Φ(b) = (a - 1) * (b - 1)
。举例:code
Φ(56) = Φ(7) * Φ(8) = 6 * 4 = 24。
Φ(35) = Φ(5) * Φ(7) = (5 - 1) * (7 - 1) = 24。巧合了,都是24。
若是
a和b互质
,则a
的Φ(b)次方
减1
必定能够被b整除
,即:。cdn
接下来咱们能够对欧拉定理进行一些转换blog
若是两个正整
x
和y
互质,则必定能够找到一个整数z
,使得xz-1
能被y
整除,此时z
就叫作x
相对于y
的模反元素。
即:,也即
,k是任意值的常量。
--------------------一条分割线先暂停一下-----------------------
看到小结觉得文章到这就结束了?NONONO,这只是上面那些推导定理的小结。
RSA数学原理所用到的数学定理
及推导定理
到这算是讲完了,先总结一下咱们推导出来可使用的条件:
还有推导过程当中咱们用到的一些基础知识:
前面密码学的发展历史中讲到1976年迪菲和赫尔曼提出了一种不直接传递密钥就可完成密钥交换的方法叫作迪菲赫尔曼密钥交换,开拓了密码学的新篇章。而且仅仅时隔一年RSA非对称加密就诞生了,要说这二者之间没有任何关系估计鬼都不信吧。
借个图来解释一下迪菲赫尔曼密钥交换的原理。
啊哦,发生了什么?这两个算出来的结果竟然是相同的?
对,没错,这个最终算出来的10就是真正用来加密的密钥。
到这就不得不说这种方法的巧妙之处了,黑客能够从网络中截取到6和12,可是他想要算出真正的密钥10,就必须知道m,n,cr/sr的值。m和n也可能经过一些特殊手段获得,可是cr和sr这两个都是随机生成的。所以黑客想要破解出真正的密钥就只有暴力破解,而应对暴力破解,咱们能够将cr/sr,n的值设置为很是大的数,例如1024或2048位,这样位数的数字破解难度就已经很是大了。这些就是迪菲赫尔曼密钥交换的原理。
等等,不是说讲RSA的原理吗?怎么讲到密钥交换原理了?还有前面说了一大堆欧拉定理、模反元素是干什么的?还说不是凑字数?
先把砖头🧱放下,我还有没讲完呢,接下来就把前面的东西都用上。😂😂
这里是整篇文章的重点和难点,不明白的能够找找纸笔画画,笔者学这一块的时候画了两张A4纸,正反两面。
下面把前面推导出来的原理再拿过来:
有没有发现和
在格式上很类似?
因此如今像作应用题同样:
设
则当a和b互质,x和Φ(b)互质时,有。必定要记清楚这个结论的前提条件。
咱们接着把上面的那个结论拆开,能够获得和
。有没有以为好像在哪见过这两个式子呢?就是在上面的迪菲赫尔曼密钥交换那里啊。
就至关于客户端进行的操做,计算出c发送给服务端,服务端经过
计算出终极密钥a。
说到这,细心的你有没有对比这两个式子和上面密钥交换不同的地方呢?
什么?还有不同的地方?
固然有,仔细看密钥交换的那两步计算,计算前是3,最终计算出来的结果是10。而这和
两个式子,计算前是a,计算后仍是a。是否是恍然大悟?若是说第一个式子是
用x加密a获得c
,第二个式子用z解密c再获得a
,这样说你就该明白RSA的原理了吧?
再等等,先别结束,还有问题,这两个式子分别是加密
和解密
这我理解了,可是为何它们计算前和计算后是同样的,而迪菲赫尔曼密钥交换计算先后是不同的?不解释清楚别想结束!
因此别忘了这两个式子推导出来的前提条件:
在加密解密过程当中,a是须要传输的原始数据。b、x、z则都是未知的,所以咱们须要针对上面的三个前提条件来找b、x、z的值。
举个例子:
要传输的数据a = 3,为了知足条件1,我让b = 5,则Φ(b) = Φ(5) = 4。
条件2中x须要和Φ(b)互质,我让x = 7。为了知足条件3的,我可让z = 11,这样
是成立的。也就是说如今3个条件都知足了。
下面就到了验证的时刻了,带入那两个式子,而
。验证是成功的。
固然,在真正使用上确定不会像上面例子那样简单,通常密钥都是在1024位以上。另外说明一下,这个加密和解密的过程当中密钥并不仅仅是x和z
,真正的加密密钥应该是x和b
,解密密钥应该是z和b
。
好了,要讲的都已经讲完了,如今就来总结一下这篇文章中用到的知识点。
差很少就这么多了,接下来还有就是,,,额,没什么事了,结束。
哦对了,维权。这就是原文