ECDH是怎样做到防止中间人攻击的

@leehotde提到的资料,里面明确说到:由于 ECDH 密钥交换协议不验证公钥发送者的身份,因此无法阻止中间人攻击。如果监听者 Mallory 截获了 Alice 的公钥,就可以替换为他自己的公钥,并将其发送给 Bob。Mallory 还可以截获 Bob 的公钥,替换为他自己的公钥,并将其发送给 Alice。这样,Mallory 就可以轻松地对 Alice 与 Bob 之间发送的任何消息进行解密。他可以更改消息,用他自己的密钥对消息重新加密,然后将消息发送给接收者。ECDH 算法概述(CNG 示例)本质上ECDH依旧利用的是在椭圆曲线上的点构成的群所对应的离散对数问题,因此,可以和DH做类似的理解。既然DH不能防中间人,所以ECDH也不能。其实可以断言,所有不对公钥发出者进行身份验证(authentication)的密钥交换协议,都无法有效阻止中间人攻击。中间人攻击能成立的关键就在于协议执行中,有一条甚至多条信息无法明确判断来源,因此攻击者可以截获或替换这些信息。比如上面提到的例子,其关键在于g^a, g^b无法验证来源,所以攻击者可以替换成对自己有利的数据。类似的,还有针对Needman-Schroeder协议的重放攻击NeedhamThe protocol is vulnerable to a replay attack (as identified by Denning and Sacc). If an attacker uses an older, compromised value for KAB, he can then replay the message to Bob, who will accept it, being unable to tell that the key is not fresh.也是因为此条消息并无相应的认证机制保护,比如数字签名。身份验证的相关问题可以参考我这个答案 怎样确定A得到的所谓B的公钥,的确是B的公钥,比如通过CA的签名?具体机制? - 用户的回答
■网友
ECHD本身无法防止中间人攻击,需要结合证书技术,验证公钥的身份才能防止中间人攻击.
■网友
ECDH 算法概述(CNG 示例)ECDH 协议依赖两个公共参数:p 和 g。参数 p 是一个大的质数,参数 g 是一个小于 p 的整数。这两个参数通过不安全的线路进行交换。Alice 和 Bob 收到这两个公共参数后,选择私有整数。Alice 选择了 a,Bob 选择了 b。这些值称为私钥。
然后,Alice 和 Bob 使用公共参数及其私钥创建公钥。Alice 使用 (g^a) mod p,Bob 使用 (g^b) mod p。这些是非对称密钥,因为它们不匹配。
【ECDH是怎样做到防止中间人攻击的】 Alice 和 Bob 交换这些公钥,并使用它们计算共享的机密协议。虽然 Alice 和 Bob 不知道彼此的私钥,ECDH 数学也会保证 Alice 和 Bob 将计算出同一共享机密协议。
说明:只有 a、b 和 g^ab = g^ba 保密。其他所有值都是公开的。
任何截获交换的人都能够复制 p、g 和两个公钥。但是,要在不知道 Alice 和 Bob 的私钥的情况下从四个公开共享值生成共享机密协议,在计算上是不可行的。
使用暴力(即尝试所有可能的密钥)对 ECDH 加密的消息进行解密的难度与离散对数问题属同一级别。不过,ECDH 算法使用较短的密钥即可达到相同程度的安全性,这是因为它依赖椭圆曲线而不是对数曲线。

■网友
DH算法可以用RSA,也可以用ECC,其中ECC的版本叫ECDH。所以本质上ECDH也不能防中间人攻击。以上。


    推荐阅读