Skip to main content

8. 安全考虑 (Security Considerations)

任何数据压缩方法都涉及数据中冗余的减少。Zstandard也不例外,通常的预防措施适用。

永远不应该将内容必须保密的消息与第三方生成的消息一起压缩。这种压缩可用于通过分析熵减少来猜测秘密消息的内容。这在压缩比率信息泄漏简化(CRIME)攻击[CRIME]中得到了证明。

解码器必须展示能够检测和防止压缩帧中任何类型的数据篡改触发系统故障的能力,例如读取或写入超出允许的内存范围。这可以通过实现语言或仔细的边界检查来保证。特别值得注意的是Number_of_Sequences值的编码,这些值导致解码器读入块头部(及以后),以及指示Frame_Content_Size小于实际解压数据的情况,试图触发缓冲区溢出。强烈建议对解码器实现进行模糊测试(即提供无效、意外或随机输入并验证安全操作),以测试和强化它们检测坏帧的能力并在没有任何不利系统副作用的情况下处理它们。

攻击者可能提供具有不合理内存要求的正确形成的压缩帧。解码器必须始终控制内存要求并强制执行一些(特定于系统的)限制,以保护内存使用免受此类情况的影响。

压缩可以通过在各种相关内容有效负载上训练字典来优化。然后,解压有效负载时必须提供此字典。虽然本文档未指定如何获取给定压缩有效负载的字典,但值得注意的是,第三方字典可能与解码器发生意外交互,导致可能的内存或其他资源耗尽攻击。我们期望在即将发布的关于字典获取和传输的RFC的安全考虑部分中更详细地讨论此类主题,但出于谨慎起见,现在突出显示此问题。

如第3.1.2节所述,可以在可跳过帧中存储任意用户元数据。虽然在数据解压期间忽略此类帧,但它们可以用作水印来跟踪压缩有效负载的路径。