首页/安全/加密与证书速查/填充预言(padding oracle)与防护
本包目录(305 条)
加密算法基础95 条
TLS 与 HTTPS60 条证书与 PKI30 条OpenSSL 实战30 条证书运维排查49 条密钥管理41 条

填充预言(padding oracle)与防护

服务端把填充错误与认证失败区分开时,攻击者可据此逐字节推断明文;防护要点是改用 AEAD、统一错误响应并保持处理耗时稳定。

加密与证书速查安全更新于 2026-10-12
成因解密错误分类可见(错误码/页面/耗时)
典型场景CBC+MAC 的 TLS ≤1.2、自研 Cookie/Token 加密
防护一改用 AEAD(GCM/CCM/ChaCha20-Poly1305)
防护二Encrypt-then-MAC(RFC 7366)并统一报错

服务端只保留 AEAD 套件(nginx 示例)

服务端只保留 AEAD 套件(nginx 示例)
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
自研加密高频出现的问题是「解密失败」与「校验失败」返回不同状态码或耗时差异;修复时要同时消除错误分类与时间侧信道。

易错点

  • 只改错误文案不改处理路径往往不够:加解密与 MAC 校验的顺序与耗时同样会泄漏信息
  • 对密文做「先解密再检查格式」的旧代码要整体重构为 AEAD,局部打补丁容易留下旁路

数据来源与参考

  • RFC 7366(Encrypt-then-MAC for TLS)
  • NIST SP 800-38A
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌