RSA加密演算法历程

历史背景

迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。公钥交换的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年首次发表。马丁·赫尔曼曾主张这个密钥交换方法,应被称为迪菲-赫尔曼-墨克密钥交换(英语:Diffie–Hellman–Merkle key exchange)。

虽然迪菲-赫尔曼密钥交换本身是一个匿名(无认证)的密钥交换协议,它却是很多认证协议的基础,并且被用来提供传输层安全协议的短暂模式中的前向安全性。

在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。

有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。当Alice和Bob共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名,也可以像MQV那样签名g和g;STS以及IPsec协议的IKE组件已经成为了Internet协议的一部分;当Alice和Bob共享一个口令时,他们还可以从迪菲-赫尔曼算法使用口令认证密钥协商,类似于ITU-T的建议X.1035。这已经被用作了G.hn的家庭网络标准。

在迪菲-赫尔曼密钥交换出现之前,加密通信双方必须要直接传递该密钥,才能进行正常的加解密会话,而迪菲-赫尔曼密钥交换可以在不直接传递密钥的条件下,完成密钥的交换。

核心技术

普遍大家都认为公钥密码体制是迪菲(W.Diffie)和赫尔曼(E.Hellman)发明的 [1]  ,可鲜为人知的是,默克勒(R.C.Merkle)甚至在他俩之前的1975年就提出了类似的思想,尽管其文章是于1978年发表的,但投稿比较早。因此,公钥密码体制的创始人应该是他们三人。 当然,他们三人只是提出了一种关于公钥密码体制与数字签名的思想,而没有真正实现。不过,他们确实是实现了一种体现公钥密码体制思想、基于离散对数问题的、在不安全的通道上进行密钥形成与交换的新技术。

在后续的内容中会涉及几个概念问题,在这里先做一下铺垫:

1.质数(素数):指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

2.原根:这个数学专业解释很复杂,博主可能连数学的皮毛都没学明白,举个例子简单理解会意即可:
               3ˆx  mod  7 = y (语义化表达为3的x次方对7进行取模运算,结果等y),在满足质数作为模数的条件下,
               得出来y的结果就是分布在[1...6]之间,这样3就叫做7的原根。
               如果当模数是一个足够大的质数时,通过y反向推导出x将变的不可完成,这也就是离散对数问题。
               文章结尾会附上一些数的原根列表。

3.互质关系:如果两个正整数,除了1以外,没有其他公因数,我们就称这两个数是互质关系。

4.欧拉函数:任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?使用:Φ(n)表示,
                       计算这个值的方式    叫做欧拉函数,有以下特点:
                       1.当n是质数的时候,φ(n)=n-1。
                       2.如果n可以分解成两个互质的整数之积,φ(A*B)=φ(A)* φ(B)。
                       3.如果n是两个质数P1 和 P2的乘积,则 φ(n)=φ(P1)* φ(P2)=(P1-1)*(P2-1)。

5.欧拉定理:如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。
                       公式表达:mˆφ(n)  mod n ≡ 1

6.费马小定理:欧拉定理的特殊情况:如果两个正整数m和n互质,而且n为质数!那么φ(n)结果就是n-1。
                           公式表达:mˆ(n -1)  mod n ≡ 1

7.模反元素概念:如果两个正整数e和x互质,那么一定可以找到整数d,使得 e*d-1 被x整除。
                               那么d就是e对于x的模反元素,公式表达:e*d  mod  x ≡  1

在加密算法的设计理念里,就是需要保持加密容易,解密非常困难。而离散对数的计算则是符合此项设计理念,正向计算容易,反向推导比较困难,离散对数在一些特殊情况下可以快速计算。然而,通常没有具非常效率的方法来计算它们,而正是基于这个条件以及迪菲赫尔曼密钥交换开始探索RSA算法的原理,下面来开始推导这个过程

根据欧拉定理,开始推导:
结合1ˆk  ≡  1则可导出:mˆ(k*φ(n))  mod  n  ≡  1
再结合1*m = m则可导出:mˆ(k*φ(n) + 1)  mod  n  ≡  m

根据模反元素则可导出:e*d  ≡ k*x + 1
如果x == φ(n),则可导出:mˆ(e*d)  mod  n  ≡  m,那么换个角度来讲就是e和φ(n)互质,可以根据模反元素算出整数d,那么d是e相对于φ(n)的模反元素,而在这个条件下,已经不需要再满足离散对数问题的模数为质数的条件,也不需要满足欧拉定理的m与n互质条件,但是需要再满足m

而迪菲赫尔曼密钥交换,则可以将 mˆ(e*d)  mod  n  ≡  m 进行拆解成两次,一次可以理解为加密,一次可以理解为解密:
下面所示:15为服务端随机数,13为客户端随机数,服务端和客户端保持同样的算法,3和17是商定的结果

密钥交换

通过上面可以看到,两端通过指定的算法交换第一次计算结果,神奇的地方在于第二次计算时,两端得到了相同的结果,而此时,也就完成真实密钥的交换,也就是相当于3 ^ 15 ^ 13 mod 17 =  10  = 3 ^ 13 ^ 15 mod 17。
上述的拆解交换密钥原理用公式来表达:
mˆ(e)  mod  n  =  c
cˆ(d)  mod  n  =  mˆ(e*d)  mod  n

见证奇迹的时刻,根据mˆ(e*d)  mod  n  =  m 形成闭环,则可进一步推导出:
mˆ(e)  mod  n  =  c(加密)
cˆ(d)  mod  n  =  m(解密)
e和d可以互换,既可以加密也可以用来解密

公钥: n和e 
私钥: n和d
明文:    m
密文:    c

条件:
1.m2.e和φ(n)互质

特点:
1.n会非常大,一般为1024个二进制位,2048二进制位更好, 详情可见RSA加密演算法初识 - ;
2.由于需要求出φ(n),所以根据欧函数特点,最简单的方式n 由两个质数相乘得到: 质数:p1、p2;
3.算出Φ(n) = (p1 -1) * (p2 - 1),找出e;
4.根据模反元素算出d。
这个过程总共生成6个数字:p1、p2、n、φ(n)、e、d

关于RSA安全问题:
1.公钥用到了n和e,其余的4个数字是不公开的;
2.要想求出私钥d  。由于e*d = φ(n)*k + 1。要知道e和φ(n);
3.e是知道的,但是要得到 φ(n),必须知道p1 和 p2;
4.由于 n=p1*p2。只有将n因数分解才能算出, 详情可见RSA加密演算法初识 - ;



你可能感兴趣的:(RSA加密演算法历程)