关于DH和RSA算法的简单比较

南笙酒味 提交于 2019-11-26 03:45:40
   本文简单地谈下关于安全中最为常用的两个非对称加密的DH算法及RSA算法,文中无意于涉及一些数学原理,这个在网上已经有很多文章叙述了,再重复也没有太多意思(这类文章只要关注两点,**其一是密钥生成方法,其二就是数据的加解密公式**),此文仅仅是帮助一般用户能够明确地区别下这两种算法的异同和应用场合,故不会太长。

    对于DH和RSA算法而言,其最大的相同点就在于它们的理论基础就是“初等数论”,既然是初等那么就意味着如果需要看懂其原理,我们只要有中学数学基础就可以了,甚至是初中数学,而不会应用到大学数学的相关内容,你无需关注什么极限、微分、积分等等,只不过RSA算法是基于所谓的“欧拉定理”(费马定理是其特例),而DH中没有非常明显的涉及,但其中有两个内容可能需要证明,本文就不涉及了,都是关于同余问题的(初等数论中的许多问题都和同余相关,其中最著名的恐怕是“孙子定理”,或可称之为”中国剩余定理“,在任何一般有关数论的书中都会描述)。

    那么不同点在何处呢?其中最显著的不同之处就是DH用于动态交换密钥,它其实会在服务器和客户端各生成一个密钥对,也就是两对密钥,而且注意它是动态的;而RSA只包含一组密钥对,而且是静态的,即一旦生成了私钥就不会更改,除非显示地替换,最明显的就是更换私钥文件(因为密钥太长,一般生成后会放到文件中)。

    通过简单分析,我们就能看出为什么使用DH算法生成的共享密钥是无法获取的,因为它们分别在服务器和客户端的内存中(对于共享密钥,通讯双方可以通过自我计算即可,不用交换,因为客户端和服务器通过计算所得的密钥是相同的,只要它们交换了各自的公钥),所以除了暴力破解别无它法,而且由于大质数的问题,以及密钥产生的随机性(随机的私钥大小在1到这个大质数减一之间,所以肯定是互质的),故在目前的条件下无法保证破解。

    另外,由于RSA运算过于消耗计算资源,所以它只被用于签名(即只对少量数据进行验证,如可对数字证书的部分内容的摘要进行签名),不会被用于真正的数据内容加密;而DH算法仅是交换密钥,生成的密钥被用于数据的加解密,所使用的对真正数据加解密的对称算法一般为AES(SSL、HTTPS通常都使用此算法,而不太用以前的3DES了);所以在OPENSSL中有所谓加密算法套件的说法,它们是用于不同用途的,而且在OPENSSL中有一整套关于大数(Big Number)的计算方法,不过用户一般不会直接调用吧。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!