8. 地址验证
8. 地址验证 (Address Validation)
address validation 确保 endpoint 不能被用于流量放大攻击. 在此类攻击中, 一个 packet 被发送到 server, 其伪造的 source address 信息标识某个受害者. 如果 server 响应该 packet 生成更多或更大的 packet, 攻击者就可以利用 server 向受害者发送比攻击者自身可发送量更多的数据.
针对放大攻击的主要防御是验证 endpoint 能够在其声称的 transport address 接收 packet. 因此, 在从尚未验证的 address 收到 packet 后, endpoint MUST 将它向该 unvalidated address 发送的数据量限制为从该 address 收到的数据量的三倍.
8.1 connection 建立期间的地址验证 (Address Validation during Connection Establishment)
connection 建立会隐式地为双方 endpoint 提供 address validation. 特别是, 收到使用 Handshake key 保护的 packet, 即确认 peer 已成功处理 Initial packet. 一旦 endpoint 成功处理来自 peer 的 Handshake packet, 它就可以认为 peer address 已经得到验证.
8.1.1 Token 构造 (Token Construction)
在 Retry packet 或 NEW_TOKEN frame 中发送的 token MUST 以允许 server 识别其如何提供给 client 的方式构造.
8.1.2 使用 Retry packet 进行地址验证 (Address Validation Using Retry Packets)
收到 client 的 Initial packet 后, server 可以通过发送包含 token 的 Retry packet (第 17.2.5 节) 来请求 address validation.
8.1.3 未来 connection 的地址验证 (Address Validation for Future Connections)
server MAY 在一个 connection 期间向 client 提供 address validation token, 该 token 可在后续 connection 中使用.
8.1.4 地址验证 token 完整性 (Address Validation Token Integrity)
address validation token MUST 难以猜测. 在 token 中包含足够大的随机值, 且该值至少具有 128 bit 熵, 即可满足要求.
8.2 路径验证 (Path Validation)
path validation 在 connection migration 期间使用 (见第 9 节), 用于在 address 变化后验证可达性. 在 path validation 中, endpoint 测试特定 local address 与特定 peer address 之间的可达性, 其中 address 是 IP address 和 port 组成的二元组.
8.2.1 发起路径验证 (Initiating Path Validation)
为发起 path validation, endpoint 在要验证的路径上发送包含不可预测 payload 的 PATH_CHALLENGE frame (第 19.17 节).
8.2.2 路径验证响应 (Path Validation Responses)
收到 PATH_CHALLENGE frame 时, endpoint MUST 通过在 PATH_RESPONSE frame (第 19.18 节) 中回显 PATH_CHALLENGE frame 包含的数据来响应.
8.2.3 路径验证成功 (Successful Path Validation)
当收到的 PATH_RESPONSE frame 包含先前 PATH_CHALLENGE frame 中发送的数据时, path validation 成功.
8.2.4 路径验证失败 (Failed Path Validation)
如果在预期时间内未收到 PATH_RESPONSE frame, path validation 失败.