跳到主要内容

12. 安全考虑, IANA 考虑和参考文献

  1. 安全考虑

与任何压缩文件格式一样, 解压缩器实现应能处理所有压缩数据字节序列, 而不只是符合本规范的序列. 对于不符合规范的压缩数据序列, 应将其拒绝为无效.

针对包含解压缩器实现的系统 (例如 Web 浏览器) 的一种可能攻击是利用无效压缩数据触发的缓冲区溢出. 因此, 解压缩器实现应对每次由压缩流解码值及其派生值产生的内存访问执行边界检查.

针对包含解压缩器实现的系统的另一种可能攻击是向其提供 (有效或无效的) 压缩数据, 使解压缩器系统的资源消耗 (CPU, 内存或存储) 相对于压缩数据大小不成比例地增大. 除压缩数据大小之外, 解压缩 Brotli 流内单个压缩元块所需的 CPU, 内存和存储量由以下两个参数控制: 未压缩元块的大小, 它编码在压缩元块开头. 滑动窗口的大小, 它编码在 Brotli 流开头. 在内存或存储受限的系统中, 解压缩器实现应对这两个参数执行合理性检查. 从压缩流解码出的未压缩元块大小, 应与由系统约束或对未压缩数据的某种预期给出的硬限制比较, 或与压缩数据大小的某个倍数比较. 如果确定未压缩元块大小过高, 则应拒绝该压缩数据. 同样, 当包含解压缩器实现的系统保留完整未压缩流时, 应在解压缩每个额外元块之前检查该流的总未压缩大小. 如果从压缩流开头解码出的滑动窗口大小大于某个软限制, 则解压缩器实现最初应分配一个较小的滑动窗口, 使其适配第一个未压缩元块. 此后, 在解压缩每个额外元块之前, 应增加滑动窗口大小, 直到达到压缩数据中指定的滑动窗口大小.

相应地, 针对包含压缩器实现的系统 (例如 Web 服务器) 的可能攻击包括利用缓冲区溢出, 或通过提供例如不可压缩数据来造成不成比例的大量资源消耗. 如第 11.1 节所述, 大小为

        S(N) = N + (3 * (N >> 16) + 5)

字节的输出缓冲区足以容纳表示任意 N 个未压缩字节序列的有效 Brotli 压缩流. 因此, 在压缩 N 字节压缩性未知的数据之前, 压缩器实现应至少分配 S(N) 字节的输出缓冲区, 并应对写入该输出缓冲区的每次操作执行边界检查. 如果输出缓冲区已满, 压缩器实现应退回到第 11.1 节描述的平凡压缩算法. 对于特定输入数据, 压缩器实现的资源消耗主要取决于用于查找向后匹配的算法, 以及用于构造上下文映射和前缀码的算法, 在较小程度上才取决于输入数据本身. 如果包含压缩器实现的系统过载, 降低资源使用量的一种可能方法是切换到更简单的向后引用搜索和前缀码构造算法, 或退回到第 11.1 节描述的平凡压缩算法.

针对通过加密信道发送压缩数据的系统, 一种可能攻击如下. 如果攻击者能够反复将任意 (攻击者提供的) 数据与秘密数据 (密码, cookie) 混合, 并观察密文长度, 则可能重构秘密数据. 为防御这类攻击, 应用不应在同一个压缩流中混合敏感数据与非敏感的, 可能由攻击者提供的数据.

  1. IANA 考虑

"HTTP Content Coding Registry" 已使用以下注册项更新:

  +-------+-------------------------------------+------------+
| Name | Description | Reference |
+-------+-------------------------------------+------------+
| br | Brotli Compressed Data Format | RFC 7932 |
+-------+-------------------------------------+------------+

  1. 资料性参考文献

[HUFFMAN] Huffman, D. A., "A Method for the Construction of Minimum Redundancy Codes", Proceedings of the Institute of Radio Engineers, September 1952, Vol. 40, No. 9, pp. 1098-1101.

[LZ77] Ziv, J. and A. Lempel, "A Universal Algorithm for Sequential Data Compression", IEEE Transactions on Information Theory, Vol. 23, No. 3, pp. 337-343, DOI 10.1109/TIT.1977.1055714, May 1977, <https://www.cs.duke.edu/courses/spring03/cps296.5/papers/ ziv_lempel_1977_universal_algorithm.pdf>.

[RFC1951] Deutsch, P., "DEFLATE Compressed Data Format Specification version 1.3", RFC 1951, DOI 10.17487/RFC1951, May 1996, http://www.rfc-editor.org/info/rfc1951.

[WOFF2] Levantovsky, V., Ed., and R. Levien, Ed., "WOFF File Format 2.0", W3C Candidate Recommendation, March 2016, http://www.w3.org/TR/WOFF2/.


Source: RFC 7932 Official Text: https://www.rfc-editor.org/rfc/rfc7932.txt