首页/安全/加密与证书速查/TLS 流量长度泄露与填充缓解
TLS 与 HTTPS60 条

TLS 流量长度泄露与填充缓解

即使内容加密,记录长度仍可能泄露明文规模信息(如页面大小指纹);TLS 1.3 允许在应用数据记录内填充、HTTP/2 提供填充帧,用于削弱此类分析。

加密与证书速查安全更新于 2026-10-13

长度泄露与填充

TLS 加密的是内容,不是长度:记录的分片数量与大小、握手消息尺寸仍然可见,攻击者可据此做页面指纹、推断用户在看什么(长度分析类研究的共同前提)。缓解手段是在加密记录内填充无关数据:TLS 1.3 允许应用数据记录的内层明文携带零填充,接收端按长度字段去除;HTTP/2 的 DATA 帧另有 padding 字段,可对响应尺寸做随机化。全局随机填充会让带宽明显上升,实际部署通常只对敏感页面按需启用。

基本信息

泄露面记录条数与大小、握手消息尺寸(如证书链长度)
TLS 1.3 填充内层明文可含零填充,整体加密后由接收端按长度字段剥离
HTTP/2 填充DATA 帧支持 padding 字段,可随机化响应尺寸
成本额外带宽与少量 CPU;按敏感页面选择性启用
前提填充必须在加密之前完成,否则长度依旧可见

典型使用场景

  • 敏感页面防护:登录、检索结果、医疗与金融类页面防长度指纹。
  • 抓包分析:统计记录长度分布,判断业务是否存在明显长度特征。
  • 协议选型:评估 HTTP/2 填充帧与 TLS 内填充哪种更贴合现有栈。
  • 合规说明:向评审方解释为何不能对所有流量无差别填充。
  • 安全研究复现:验证某类长度分析攻击在自有业务上是否可行。

观察记录长度分布

观察记录长度分布
# 有抓包文件时统计 application_data 记录长度分布
# tshark -r tls.pcap -Y 'tls.record.content_type == 23' -T fields -e tls.record.length | sort -n | uniq -c | tail
# 对比同一业务在填充前后的分布是否被抹平
# tshark -r padded.pcap -Y 'tls.record.content_type == 23' -T fields -e tls.record.length | sort -n | uniq -c | tail

泄露面与缓解手段

泄露点能推断出什么可行缓解
响应记录长度页面类型、数据条目多少内层填充或按块补齐长度
请求记录长度输入长度(如密码位数)对提交内容做定长化处理
握手证书链长度是否使用了某类特定证书压缩证书链,减少特征差异
记录条数响应分片的节奏合并分片,减少可区分边界
长度分析属于信息收集手段,防护重点在敏感页面的尺寸分布上。普通静态资源页填充意义不大,反而拖慢首屏。

易错点

  • 把填充当通用优化全局开启:带宽与 CPU 开销上升,业务指标变差却找不到原因。
  • 只盯响应体忽略握手尺寸:证书链长度同样有明显指纹价值。
  • 在错误层次做填充:应用层把明文补齐但服务端未去除,接收方会解析出多余字节。
  • 填充模式固定可预测:每次对齐到同一长度,攻击者仍能按长度聚类,应引入随机化。

数据来源与参考

  • RFC 8446 §5.4(记录填充)
  • RFC 9113 §6.1(DATA 帧填充)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌