11. 安全考虑
如果该机制要与 DNS-over-TLS 一起使用, 那么这些消息受到与任何其他 DNS-over-TLS 消息相同的约束, 并且 MUST NOT 在 TLS 会话建立之前以明文发送.
"Encryption Padding" TLV 的数据字段可能被用作隐蔽信道.
设计新的 DSO TLV 时, 应考虑 TLV 中的数据被用作跟踪标识符的可能性, 并且在不需要时应避免这种情况.
在不使用 TLS 或类似密码保护时, 恶意实体可能能够向数据流中注入恶意的单向 DSO Retry Delay 消息, 指定不合理的大 RETRY DELAY, 从而对客户端造成拒绝服务攻击.
建立 DSO Sessions 会影响 DNS 服务器上的打开 TCP 连接数量. 因此服务器可能会使用额外资源. 不过, 由于服务器可以限制建立的 DSO Sessions 数量, 也可以按需关闭已有 DSO Sessions, 拒绝服务或资源耗尽不应成为问题.
11.1. TLS 零往返考虑
DSO 允许使用 TCP Fast Open 与 TLS 1.3 [RFC8446] early data 进行零往返操作, 以减少或消除会话建立中的往返. TCP Fast Open 仅允许与 TLS 1.3 early data 结合使用. 在本节其余部分中, 无论 TLS 1.3 early data 是否包含在使用 TCP Fast Open 选项的带 early data 的 TCP SYN 数据包中, 我们都将 TLS 零往返初始握手消息中的 TLS 1.3 early data 称为 "early data".
DSO 消息可能允许也可能不允许作为 early data 发送. 对于每个可用作 Primary TLV 的 TLV, 其定义必须说明该 TLV 是否允许作为 early data. 只有需要响应的消息才允许作为 early data, 并且除非存在隐式 DSO session (见第 5.1 节), 否则只有客户端允许将 DSO 消息作为 early data 发送.
对于允许作为 early data 的 DSO 消息, 客户端 MAY 将一个或多个这样的消息作为 early data 包含在内, 而无需等待第一个 DSO 请求消息的 DSO 响应来确认 DSO Session 已成功建立.
不过, 除非存在隐式 DSO session, 客户端 MUST NOT 在 DSO Session 双方建立完成之前发送 DSO 单向消息.
类似地, 除非存在隐式 DSO session, 服务器 MUST NOT 在收到来自客户端的需要响应的 DSO 请求消息并为该请求发送成功的 NOERROR 响应之前发送 DSO 请求消息.
必须谨慎确保作为 early data 发送的 DSO 消息是幂等的, 或者以其他方式免受零往返操作中可能发生的意外重放所导致的问题影响.
可以添加一种 TLV, 要求服务器执行某些大量工作, 并将其作为 TCP SYN 数据包中的初始数据发送给服务器. 大量这类数据包可被用作针对服务器的 DoS 攻击. 本文档定义的 TLV 都不具备这一属性.
如果指定的新 TLV 具备这一属性, 则必须规定该 TLV 不允许出现在零往返消息中. 这会防止服务器在一次从服务器到客户端的往返发生并验证该数据包的源地址可达之前执行工作.
定义新 TLV 的文档必须说明每个新 TLV 是否可以作为 early data 发送. 对于文档中定义的每个可作为 early data 发送的 TLV, 这类文档必须在安全考虑章节中包含威胁分析. 该威胁分析应基于 TLS 1.3 规范 [RFC8446] 第 2.3 节, 第 8 节和附录 E.5 中给出的建议.