通信理论知识|RSA加密算法和DH密钥协商的比较

最近在知乎上看到一篇关于RSA和DH的比较,简单明了,以此记录一下。

问题1:RSA做密钥协商(密钥交换)时,是否可以防范中间人攻击?
答:单就RSA本身而言,是无法防范中间人攻击的。

和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡中间人攻击。假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递,那么她可以将她自己的公钥传给Bob,Bob以为这是Alice的公钥。Eve可以将所有Bob传递给Alice的消息截下来,将这个消息用她自己的密钥解密,读这个消息,然后将这个消息再用Alice的公钥加密后传给Alice。理论上Alice和Bob都不会发现Eve在偷听他们的消息。今天人们一般用数字认证来防止这样的攻击。
上面引用来自于维基百科,稍微补充的一点是防止中间人攻击的方法实际上就是身份证认证方式,目前主流方式就是数字签名的方式,但是也是存在利用不对称信息、时间戳、生物信息、物理信息等其它成熟或者是不成熟,公开或不公开的解决方式。关于不对称信息这样的情况可以参见一下我之前的另外一个答案课堂上传纸条如何防范中间人攻击?

【通信理论知识|RSA加密算法和DH密钥协商的比较】问题2: RSA做密钥协商(密钥交换)时和DH的区别是什么?
答:分两点来讲
一、首先说明:RSA和DH实际上根本不是一回事
RSA是公钥加密算法,也就是非对称密码算法,一般情况下的使用流程是这样的:
1 A通过B公开的公钥加密信息,加密信息,发送加密后的信息给B,B通过自己的私钥进行解密;
2 B如果想给A发送消息,就先获取A公开的密钥,加密信息,发送加密后的信息给A,A通过自己的私钥进行解密。
DH是密钥交换协议,一般情况下的使用流程是这样的:
1 A和B通过DH协议获得了同一个密钥;
2 A然后用这个密钥采用其他的对称密码算法如DES AES对通信进行加密解密,传递给B;
3 B使用同样的密钥采用其他的对称密码算法如DES AES对通信进行加密解密,传递给A。
总结一下,区别主要是:
1 RSA是用来加密解密的,DH是用来协商创造密钥的
RSA可以用来传递信息,DH是用来传递密钥的,想要传递信息还需要借助别的加密方式。
2 使用RSA进行信息传输是非对称密码体系,使用DH进行密钥交换的下一步使用的一般是对称的密码体系
使用RSA加密和解密所使用的密钥是不一样的,前者叫公钥后者叫私钥,公钥用于加密私钥用于解密,并且不可逆向,也就是不能用私钥加密公钥解密。如果A和B想进行通信的话,需要两套(4个)密钥。而DH交换得到的密钥则一般是用于对称加密的,也就是加密和加密使用的是同一个密码,进行通信只需要一个密钥即可。
二、然后解释一下,如何用RSA做密钥协商(密钥交换)
实际上可以模拟成下面的情况:A想和B进行密钥交换,获得一个新的密钥,于是A就通过B的公钥加密了一个密钥K(此处的密钥相当于原文),然后将生成的密文发给B。B接到了这个密文之后使用自己的私钥解密获得密钥K。于是双方就可以愉快的使用这个K来进行后面的加密了~
这就是最简单的RSA密钥交换模型了。实际上考虑到前面提到的中间人攻击的问题,因此A往往需要同时加上自己的身份认证信息。同时有些复杂点儿的情况下可能还需要B通过A的公钥发送一系列的确认信息。
因此RSA做密钥协商(密钥交换)时和DH的从原理上而言是有着非常大的差距的。
问题3: 实际中的密钥协商主要使用哪些算法?
答:抱歉..日常生活中很少单纯依靠这一两种算法来进行的,一般情况下都是多种算法进行组合使用。
RSA和DH都怕中间人攻击,因此一般需要配套数字证书。而数字证书本身就是带了每个人的公钥的。
数字证书是一个或一组电脑文件,内载拥有人的身份数据及一组公开密码匙。凭著数字证书文件,拥有人可向电脑系统认证自己的身分,从而访问或使用某一特定的电脑服务。
因此其实如果非得说密钥协商什么用得最多,我只能说——数字证书+RSA用得最多= =

    推荐阅读