为什么 RSA 不会发生中间人攻击?

信息安全 中间人 RSA
2021-08-23 06:56:31

我了解 RSA 的工作原理(生成私钥/公钥对,将公钥发送给您想与之交谈的任何人,用公共加密,用私人解密),但这没有缺陷吗?

假设 A 想向 B 发送消息。A 生成他​​的公钥/私钥对,并通过网络将公钥发送给 B,对吗?是什么阻止了 C 拦截这个公钥,生成他自己的公钥,然后将他自己的公钥发送给 B?然后,当 B 将他的公钥发回给 A 时,C 可以截取并存储它,并将自己的公钥发送给 A。

现在,当 A 使用他认为是 B 的公钥(但实际上是 C 的)发送加密消息时,C 将截获该消息,对其进行解密,然后使用 B 的实际公钥再次对其进行加密。

这行得通吗?如果不是,为什么不呢?只是使用安全网络发送公钥的问题吗?

4个回答

这是密钥分配的问题,很难。一般来说,Alice 必须已经知道密钥属于 Bob,或者让她信任的人证明它属于他。

对于 HTTPS,这是通过公钥基础设施(PKI) 完成的,其中证书颁发机构(CA) 证明密钥属于某个域或一组域。如果任何被广泛信任的 CA 证明不值得信任,该方案很快就会崩溃,不幸的是,这种情况在过去已经发生过多次(WoSignSymantec)。

SSH 通过为您连接的每台服务器存储主机密钥来缓解它,然后在主机密钥更改以供将来连接时警告您(这称为首次使用时的信任)。它还会警告您并允许您在首次连接时验证密钥的指纹,但这需要通过其他方式获取指纹,因此它并不能解决问题,而是将其传递给用户。

您描述的问题确实可能发生 - RSA(或任何其他加密方案)中没有任何东西可以阻止它。这被称为例如。“密钥分配问题”。

是的,通过安全通道而不是不安全的消息交换密钥是解决问题的一种方法。根据用例,可能还有其他有用的方法(或没有)。

在 TLS 中,通过在另一端已经有一些东西来防止这种情况 - 各种 CA 的公共证书,预装在操作系统或浏览器中。它可用于检查 CA 首先制作的传输公钥的签名。

(与这个问题并不真正相关,但没有人直接用 RSA 加密消息。例如,因为它很慢。用 AES 加密消息,然后只用 RSA 加密 AES 密钥更为常见,但这并不能改变问题这里)。

狭义上,你没有错。非对称加密提供的机密性和真实性保证以所有各方都拥有对方公钥的真实副本为前提。如果对手冒充您的对手并欺骗您接受他们自己的不真实密钥作为真正的交易,那么一切都会崩溃。

非对称加密的优势在于,这种身份验证可以通过某个对公众可见的通道进行。可以这样想:所有密码术都要求参与者在某些时候使用某种间歇性安全通道来设置密码术以供以后使用。纯对称密码学需要一个保密和真实的通道供参与者建立共享密钥。非对称密码学对此进行了改进,因为它只需要一个真实的通道——您可以在窃听者的视线范围内验证对方的公钥。

为什么您断言 RSA 不会发生这种情况?当然可以。

如果公钥是假的。假设 A 请求 B 的公钥。A 按名称引用目标主机。如果 A 的 DNS 被攻击者入侵,A 可能会获得被入侵主机的 IP,从而为您提供假证书。整个证书链都可能受到损害。A 获得一个公钥并认为这是 B 的密钥,而实际上它是 C 的密钥。然后发生你所描述的事情。C 在中间,读取整个流量。

阅读有关公钥固定的信息。它是 PKI 中针对中间人攻击的一种可能措施,不仅限于 RSA。