我有一个即将举行的口语网络安全考试,并且知道在过去的考试中,教授问为什么 TLS 需要 TCP。我知道有 DTLS,但它不是讲座的一部分。所以问题是关于 TLS 通过要求其底层协议是 TCP 获得了什么优势,我猜。我已经听到了一些疯狂的猜测,但没有令人信服的论据。
在最低层,在一些可靠的传输协议(例如,TCP [TCP])之上分层的是 TLS 记录协议。
似乎在其他任何地方(根据我的判断),RFC 不仅需要“一些可靠的传输协议”,尤其是 TCP。
我有一个即将举行的口语网络安全考试,并且知道在过去的考试中,教授问为什么 TLS 需要 TCP。我知道有 DTLS,但它不是讲座的一部分。所以问题是关于 TLS 通过要求其底层协议是 TCP 获得了什么优势,我猜。我已经听到了一些疯狂的猜测,但没有令人信服的论据。
在最低层,在一些可靠的传输协议(例如,TCP [TCP])之上分层的是 TLS 记录协议。
似乎在其他任何地方(根据我的判断),RFC 不仅需要“一些可靠的传输协议”,尤其是 TCP。
TLS 需要可靠的传输。在 Internet 上,这仅留下 TCP,因为 UDP 不提供可靠性。
TLS 确实需要可靠的传输,因为(符合 ISO/OSI 参考模型的分层架构)它不处理传输错误、丢失的数据包或 IP 可能发生的其他干扰。
TLS 旨在在可靠传输之上提供安全通道,并且它做得很好。DTLS 确实(我假设)在协议中进行了必要的错误处理。
如果要通过 UDP 执行 TLS,连接和握手可能会因为数据包在传输过程中丢失而没有人注意到而失败。
缓解此类问题是(根据 ISO/OSI 参考模型)可靠传输的指定任务。任何可靠的传输在理论上都是有效的,但对于 IP 网络的所有实际目的,这通常意味着 TCP。
TLS 不需要 TCP,它只需要可靠的传输。甚至还有一个基于 SCTP 的 TLS 标准,这是另一种可靠的传输协议。
但是,如果您使用今天的互联网,那么您通常只有 UDP 和 TCP 作为 IP 之上的传输协议,而这两个 TCP 是唯一可靠的。这意味着,如果您只有有限的传输协议选择,那么 TLS 需要 TCP,因为它不适用于 UDP。为了与 UDP 一起工作,有一个类似的协议 DTLS,旨在通过不可靠的传输工作。
除了其他人已经说过的,TLS 需要一个可靠的传输层协议,因为它要求所有的数据包都被接收,按顺序接收,并且接收不被破坏。有几个原因:
如果一个数据包被丢弃或损坏,TLS 将无法从该数据包中恢复数据以呈现给应用层,因此,呈现给应用层的可靠性假设将丢失。
如果一个数据包被破坏,即使是一个比特,它也可能由于加密而完全乱码,特别是在使用分组密码的情况下。
如果一个数据包丢失、损坏或无序处理,任何基于密码块链接的加密方案不仅不能解密当前块,而且它后面的每个块都会失败,因为每个块都依赖于在它之前阻塞(因此,在所有先前的块上)。因此,网络上的任何数据包错误都需要断开 TLS 连接并重新协商。密码块链接在加密之前将密码块的明文与前一个块的密文进行异或,以防止监视密文的人能够从密文中检测到重复明文的模式。
如果记录被损坏,即使是一个位,消息验证码也不会匹配,导致 TLS(正确地)认为消息在传输过程中被更改,这将导致 TLS 连接被断开。
如果在使用流密码时乱序接收记录,则该记录中的消息部分将被错误地解密(使用流的错误部分),因此 MAC 检查将失败,并且TLS 连接将被断开。
当然,只要底层传输协议提供可靠性保证,TLS 本身就可以正常工作。TLS 本身没有什么要求底层传输协议是 TCP。当然,对于 Internet,TCP 通常是首选的可靠协议。
TLS不需要TCP。例如,我使用 OpenVPN 的 TLS 身份验证密钥(根据我的配置以降低开销)通过一个 TUN 接口,该接口位于UDP上。TLS 可以在两者上使用,并且可能在我不知道的其他事情之上。