DH 与RSA的区别
有一朋友这样问到"dh是密钥协商交换用的,为什么只有在服务器上有dh.pem文件,而客户端里没有,我就不明白了,客户端与服务器都有rsa公私钥了,可以传输对称密钥了,为什么还需要dh算出对称密钥呢?"
我们先一下,Open×××的man帮助是如何说dh选项的。
--dh file
File containing Diffie Hellman parameters in .pem format (required for --tls-server only).
Set file=none to disable Diffie Hellman key exchange (and use ECDH only). Note that this requires peers to be using an SSL library that supports ECDH TLS cipher suites(e.g. OpenSSL 1.0.1+, or mbed TLS 2.0+).
Use openssl dhparam -out dh3048.pem 2048 to generate 2048-bit DH parameters. Diffie Hellman parameters may be considered public.
1、使用阶段不同:DH用于TLS握手期间,RSA是用于数据通信阶段。
2、如果没有这个选项,启动Open×××服务器会出错 Options error: You must define DH file (--dh)
那么什么是Diffie-Hellman参数文件?
迪菲·赫尔曼密钥交换(Diffie-Hellman key exchange,简称「D-H」) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。这个DH参数不是安全敏感的,所以只要在Open×××服务器有一份就可以了,而且即使被第三方拿到了,也无所谓。
如果想深入一些,可以这样来理解:
1、RSA和DH都基于非对称算法。
2、RSA: 常用的示例是Alice向Bob发送消息,并使用Bob的公钥加密消息。向Bob发送消息。鲍勃用他的私钥解密。验证签名以确保Alice发送签名。该消息将成为对称加密密钥。这是用于保护连接的内容。
3、DH Diffie Hellman交换依赖于生成秘密值的两个单独实体。通过一些数学算法,他们都能够产生共同的密钥值。这是一个对称密钥。
4、使用RSA,可以进行加密和签名的密钥对。使用DH,只执行加密,没有签名机制。