我正在做一个需要 ECDH 密钥交换的项目。我正在尝试了解如何防止 MITM 攻击。我可以签署公钥并在公钥传输时发送签名,以确保密钥没有被篡改,但这并不能阻止 MITM 攻击做同样的事情。我知道密钥交换必须由第三方以某种方式验证,但我很难理解假设有人可以进行 MITM 攻击,第三方如何成为解决方案。为什么他们不能也对第三方验证进行 MITM?真的有一种万无一失的方法可以完全消除所有可能的 MITM 攻击,而无需双方事先知道吗?
3 回答
您需要一个受信任的第三方来签署这两个密钥。
如果没有任何关于预期合作伙伴身份的知识或断言,就无法将他²与其他任何人区分开来。
¹ 一个或多个 ² Bob
听起来您正朝着推出自己的加密协议的道路前进。不要那样做。这是个坏主意。它导致不安全的系统。
相反,请使用 SSL 或 TLS。这是为了解决设计这种加密协议时的微妙问题——并且已经过严格审查。您需要一种方法来验证另一个端点的证书。您可以使用证书颁发机构,或者在某些情况下,硬编码您希望与之交谈的实体的公钥可能是可行的。
如果您在Crypto stack exchange 上提问,您可能会得到更好的答案。
在 PKI 系统中,“认证机构”是基础设施的重要组成部分。认证机构对公钥和身份信息进行签名,让你知道对应的私钥确实属于声称的身份。就像 RSA 一样,EC 密钥也是如此。
顺便说一句,我一直在寻找颁发 EC 证书的 CA,但显然它们并没有实际使用。
大多数人为他们的认证机构获取证书,作为他们操作系统或安全应用程序的一部分。他们隐含地信任这些证书。不过,这里有几个危险。
首先,大多数用户没有有效的方法来验证这些证书的完整性。这是一个相当困难的问题,因为从根本上说,您必须有一个 100% 可信赖的验证通道——攻击者无法篡改的权限和用户之间的通道。当用户下载带有一组根证书的新浏览器时,他不知道该软件在传输过程中没有被篡改,甚至是用伪造的 CA 证书构建的。
即使证书集合按照提供者的意图完好无损,也有人质疑流行软件中默认包含的许多认证机构的完整性。例如,一些人指出,与恐怖主义赞助有关的州的电信公司将其证书包含在流行的浏览器中。任何受信任的机构都可以为任何域名颁发证书,浏览器会毫无疑问地接受它。
简而言之,不,如果不首先在安全通道上共享一些信息,就无法建立安全通道。PKI 和非对称密码学的好处是,在安全通道上的一次交换(接收受信任机构的证书)允许与多方建立安全通道。但是你必须以某种方式引导系统。