SSL 与 SSH 有什么区别?哪个更安全?

信息安全 加密 tls 网络 SSH
2021-08-31 22:29:36

SSH 和 SSL 有什么区别?如果您可以将它们放在一起比较,哪个更安全
哪个有更多潜在的漏洞?

4个回答

SSL 和 SSH 都提供了加密元素,以建立具有检查完整性的机密数据传输隧道。对于这部分,它们使用相似的技术,并且可能遭受相同类型的攻击,因此它们应该提供相似的安全性(即良好的安全性),假设它们都被正确实施。两者都存在是一种NIH综合症:SSH 开发人员应该将 SSL 用于隧道部分(SSL 协议足够灵活,可以适应许多变化,包括不使用证书)。

他们在隧道周围的东西上有所不同。SSL 传统上使用 X.509 证书来公布服务器和客户端公钥;SSH 有自己的格式。此外,SSH 带有一组用于隧道内部的协议(多路传输、在隧道内执行基于密码的身份验证、终端管理......),而 SSL 中没有这样的东西,或者更准确地说,当这些东西在 SSL 中使用,它们不被认为是 SSL 的一部分(例如,在 SSL 隧道中进行基于密码的 HTTP 身份验证时,我们说它是“HTTPS”的一部分,但它确实以类似的方式工作SSH 会发生什么)。

从概念上讲,您可以使用 SSH 并将隧道部分替换为来自 SSL 的部分。您还可以采用 HTTPS 并将 SSL 替换为 SSH-with-data-transport 和一个挂钩以从其证书中提取服务器公钥。没有科学上的不可能性,如果做得好,安全性将保持不变。但是,没有一套广泛的约定或现有的工具。

因此,我们不会将 SSL 和 SSH 用于相同的事情,但这是因为历史上这些协议的实现附带了哪些工具,而不是因为与安全相关的差异。并且建议实施 SSL 或 SSH 的人看看在这两种协议上都尝试了什么样的攻击。

这不是一个合理的比较。SSL 是一种保护通过网络传输的数据的通用方法,而 SSH 是一种用于登录并与远程计算机共享数据的网络应用程序。

SSH 中的传输层保护在功能上与 SSL 相似,因此“更安全”取决于您的特定威胁模型所要求的内容以及每种方法的实现是否解决了您尝试处理的问题。

SSH 然后有一个 SSL 缺少的用户身份验证层(因为它不需要它 - SSL 只需要对 SSH 也可以做的两个连接接口进行身份验证)。在 UTF-8 艺术中:

      SSL              SSH
+-------------+ +-----------------+
| Nothing     | | RFC4254         | Connection multiplexing
+-------------+ +-----------------+
| Nothing     | | RFC4252         | User authentication
+-------------+ +-----------------+
| RFC5246     | | RFC4253         | Encrypted data transport
+-------------+ +-----------------+

关于有更多潜在攻击的问题,显然 SSH 具有更大的攻击面。但这只是因为 SSH 内置了一个完整的应用程序:SSL 的攻击面+您需要提供的任何应用程序都无法比较,因为我们没有足够的信息。

从严格的密码学角度来看,它们都提供经过身份验证的加密,但以两种不同的方式。

SSH 使用所谓的 Encrypt-and-MAC,即加密消息与明文消息的消息验证码 (MAC) 并列,以增加完整性。这并没有被证明总是完全安全的(即使在实际情况下它应该足够了)。

SSL 使用 MAC-then-Encrypt:MAC 与明文并列,然后它们都被加密。这也不是最好的,因为对于某些分组密码模式,MAC 的某些部分可以被猜测并揭示密码中的某些内容。这导致了 TLS 1.0 中的漏洞(BEAST 攻击)。

所以他们都有潜在的理论弱点。最强的方法是 Encrypt-then-MAC(添加加密消息的 MAC),例如在 IPsec ESP 中实现。

我认为这种比较的一个方面被忽视了。user185 接近但没有完全到达那里。我同意这些是苹果和橙子,并且感觉比 HTTPS 和 SSH 更好。HTTPS 和 SSH 利用 OSI 模型的不同层,因此在传输的不同时间对数据进行加密。那么真正应该问的问题将是这些数据在传输过程中何时加密和未加密。这将揭示您潜在的攻击面。使用 HTTPS,一旦数据包被目标网络中的设备(Web 服务器、边界路由器、负载均衡器等)接收到,它就不会被加密,并以纯文本的形式度过余下的旅程。许多人会争辩说这没什么大不了的,因为此时流量是内部的,但如果有效载荷包含敏感数据,它会以未加密的形式存储在它通过的每个网络设备的日志文件中,直到它到达最终目的地。使用 SSH,通常会指定目标设备并对传输进行加密,直到它到达该设备。有一些方法可以重新加密 HTTPS 数据,但这些是大多数人在他们的环境中实施 HTTPS 解决方案时忘记采取的额外步骤。