Diffie-Hellman只有在双方通过身份验证时才提供安全密钥交换。对于身份验证,双方正在使用公钥/私钥。所以如果A方知道B方的公钥,那么A可以简单地使用该密钥来加密消息(或新的会话密钥)。为什么还要使用单独的密钥交换算法?为什么我们需要迪菲赫尔曼?
回答
Diffie Hellman旨在交换共享密钥。所以,这个问题可以表述为:Why would I want to use a shared key, when public/private key pairs offers encrpytion and ease of sharing public keys?
在公共/私人密钥的共享密钥的好处是:
共享密钥都更快的算法相比,公钥/私钥算法,因此需要较少的处理功率。
如果证书颁发机构受到威胁,攻击者有可能在使用公钥/私钥加密时冒充:请参阅DigiNotar case。
ad1)我们只能使用公钥/私钥作为握手来生成对称密钥为会议。它与验证其他方的签名(在经过验证的Diffie Hellman中执行)具有相同的成本。 ad2)如果证书颁发机构受到威胁,那么Diffie Hellman也不安全(因为双方都没有可靠的身份验证)。所以我仍然看到DH和用于会话密钥交换的非对称加密之间没有区别 – piotrek 2012-07-07 11:52:54
您可以使用直接加密来交换没有diffie-hellman的共享密钥,这就是SSL中普通RSA套件的工作方式。你的模仿论点也没有意义。如果您将DH与受损的证书颁发机构一起使用,模仿仍然可行。 – CodesInChaos 2012-07-08 09:28:11
- 1. 素的在RFC3526符号约迪菲 - 赫尔曼密钥交换
- 2. 需要什么卡尔曼滤波器
- 3. 为什么我们需要将布尔值传递给方法
- 4. 为什么我们需要fieldset标签?
- 5. 为什么我们需要RIA?
- 6. 为什么我们需要.htaccess的worpdress?
- 7. 为什么我们需要9补丁?
- 8. 为什么我们需要在JavaScript
- 9. 我们为什么需要纤维
- 10. 为什么我们需要BeginGetResponse和BeginRead?
- 11. 为什么我们需要TensorFlow tf.Graph?
- 12. 为什么我们需要Bower和Nuget?
- 13. 为什么我们需要ng-click?
- 14. 为什么我们需要`ngDoCheck`
- 15. 为什么我们需要设置SONAR_RUNNER_OPTS?
- 16. 为什么我们需要Anaconda 2.7?
- 17. 为什么我们需要mktemp?
- 18. 为什么我们需要ClassMethods和InstanceMethods?
- 19. 为什么我们需要ioc容器
- 20. 为什么我们需要RBAC许可?
- 21. 为什么我们需要scalaz.stream迭代?
- 22. 为什么我们需要Buffer.isBuffer方法?
- 23. 为什么我们需要WCF
- 24. 为什么我们需要addRequestHeader方法?
- 25. 为什么我们需要编写log.isDebugEnabled?
- 26. 什么是仿函数,为什么我们需要它们?
- 27. 装配需要什么?为什么我们使用它们?
- 28. 为什么阿拉莫菲尔早退?
- 29. 需要什么知识,如果我想了解卡尔曼过滤器
- 30. 虽然我们有Swing,但为什么我们需要JavaFX?
,你可能会得到crypto.stackexchange.com – 2012-07-07 11:29:32
甚至上http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange更好的答案,特别是因为你的问题首先是一个不正确的前提(双方都是“认证的”)。 – msw 2012-07-07 11:32:28
@msw即使您可以验证通信伙伴(了解他的公钥),Diffie-Hellman也很重要。我个人认为SSL密码套件不会使用短暂的diffie-hellman有缺陷。如果你根本没有办法认证对方(甚至没有共享的对称秘密),即使diffie-hellman也不会救你,因为它不能阻止MitM。 – CodesInChaos 2012-07-08 09:25:52