如果数据包丢失,DTLS 是否仍能正常运行并确保安全?

Can DTLS still function and be secure if packets are being lost?

我正在寻找使用 DTLS 的应用程序,例如语音聊天。
DTLS 能否在原始声音数据包丢失时工作?
是否可以丢失某些数据包并且 DTLS 会话仍然正常运行而不重新发送丢失的数据包,这违反了使用 UDP 的要点(拥塞的 TCP 延迟)。
即使部分声音数据丢失,声音仍然可以听到。
通信是否仍能抵御重放攻击?

是的,即使应用程序数据包丢失或被网络重新排序,DTLS 也会继续运行。在这种情况下,这些数据包中的明文数据也将是 lost/reordered,与您在明文 UDP 中看到的行为完全匹配。

DTLS 确实在握手阶段执行重传,因为加密计算不需要丢失数据包。但这只会影响交换的前几个数据包。

DTLS 提供重放保护(在 https://www.rfc-editor.org/rfc/rfc6347 的第 3.3 节中描述),因此导致重复数据包到达的攻击者(或路由错误)只会导致单个明文数据包 - 重复数据包将被丢弃。根据该规范,重放保护是可选的,但我知道的所有实现都提供了它。