首页/安全/加密与证书速查/RSA PKCS#1 v1.5 填充(历史方案)
加密算法基础95 条

RSA PKCS#1 v1.5 填充(历史方案)

最早的 RSA 填充方案(RFC 8017 §7.2 / §9.2),加密与签名通用;作为加密方案已不推荐,作为签名方案在兼容场景仍有使用。

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

PKCS#1 v1.5 是什么

PKCS#1 v1.5 是最早的 RSA 填充方案,加密与签名共用同一套结构。作为加密方案它已不推荐:Bleichenbacher 在 1998 年给出的适应性选择密文攻击表明,只要解密侧对不同失败原因的响应可被区分,攻击者就能逐字节恢复明文。作为签名方案,它在兼容场景中仍被广泛使用,证书签名与 TLS 1.2 握手里都能见到。

基本信息

标准RFC 8017 §7.2(加密)、§9.2(签名)
加密风险Bleichenbacher 1998 适应性选择密文攻击
签名现状仍广泛用于证书与 TLS 1.2
推荐替代加密改用 OAEP,签名改用 PSS
哈希限制应彻底禁用 SHA-1
使用前提仅在必须兼容老系统时保留

典型使用场景

  • 维护老系统:对方只支持 v1.5 验签时按兼容策略保留
  • 迁移评估:盘点仍在使用 v1.5 加密的接口并安排替换
  • 排查签名失败:确认双方填充方式与哈希算法是否一致
  • 安全加固:把解密失败的响应与耗时统一化,避免暴露填充差异
  • 代码审查:找出脚本里默认使用 v1.5 的签名调用并评估是否可升级

默认为 v1.5 的签名命令

默认为 v1.5 的签名命令
# openssl 的 dgst 默认使用 PKCS#1 v1.5 填充
openssl dgst -sha256 -sign rsa.key -out sig.bin data.bin
openssl dgst -sha256 -verify rsa.pub -signature sig.bin data.bin
# 显式指定 PSS,便于与 v1.5 的差异做对比
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sign rsa.key -out sig.pss data.bin
# 查看现有证书使用的签名算法
openssl x509 -in cert.pem -noout -text | grep -i 'Signature Algorithm'

用途与替代方案

用途v1.5 的风险替代方案
公钥加密填充预言机攻击RSA-OAEP
数字签名安全论证较弱但可用RSA-PSS
证书签名老客户端只认它新签发改用 PSS
传递对称密钥解密失败细节易被利用优先用 ECDHE 协商会话密钥
新系统不要用 PKCS#1 v1.5 做公钥加密;若必须兼容,解密侧严禁对外区分各类失败原因,也不要有可测量的耗时差异。
签名场景同样有细节要求:填充结构决定了哈希算法标识的位置,混用不同哈希会导致验签失败,同时应彻底禁用 SHA-1。
常见的迁移路径是「新签发的用 PSS、验签侧两种都支持」:既保住老客户端,又能让新资产逐步切到更稳的方案。

易错点

  • v1.5 加密与随机填充耦合,任何解密失败细节的泄漏都可能是攻击入口
  • 签名兼容旧系统的同时要限制哈希算法,必须禁用 SHA-1
  • 解密失败返回不同错误信息或存在耗时差异,会构成填充预言机
  • 混用 v1.5 与 PSS 却不做验签能力普查,导致部分客户端无法验证
  • 以为密钥够长就没问题:填充方式的缺陷与密钥长度无关

数据来源与参考

  • RFC 8017 §7.2
  • Bleichenbacher, Chosen Ciphertext Attacks Against Protocols Based on the RSA Encryption Standard(CRYPTO 1998)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌