0Pricing
Cryptology Academy · 课时

用于数字签名的 RSA-PSS

了解 PSS 编码和盐值,以及它为何取代 PKCS#1 v1.5 用于签名

用于数字签名的 RSA-PSS 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

欢迎

RSA-PSS(概率签名方案)是 PKCS#1 v1.5 签名的安全替代方案。它使用随机编码,提供可证明安全的签名。

PKCS#1 v1.5 签名的弱点

PKCS#1 v1.5 签名使用确定性的 DigestInfo 编码。已知的伪造攻击会利用验证实现中的宽松处理。布莱肯巴赫在 2006 年展示了针对某些验证器的签名伪造攻击。

PSS 设计目标

贝拉雷–罗加韦在 1996 年提出:PSS 加入随机盐值,使签名具有概率性。每次签名都会产生不同的签名。在随机预言机模型中,它具有可证明的安全性,并且能够紧密归约到 RSA 难题。

PSS 编码步骤

1. mHash = Hash(M) 2. salt = random(sLen bytes) 3. M' = 0x00×8 || mHash || salt 4. H = Hash(M') 5. DB = PS || 0x01 || salt 6. dbMask = MGF1(H, emLen - hLen - 1) 7. maskedDB = DB XOR dbMask 8. EM = maskedDB || H || 0xbc

盐值长度选择

PKCS#1 v2.2 选项: - MAX_LENGTH:盐值与哈希值一样长(推荐,安全性最高) - DIGEST_LENGTH:盐值等于哈希值长度(标准选项) - 0:确定性 PSS(失去概率性,不推荐) Python:padding.PSS.MAX_LENGTH

PSS 验证

恢复 EM = sig^e mod n。解析 maskedDB 和 H。根据 mHash(由消息计算)以及恢复出的盐值计算 M'。验证 H == Hash(M')。盐值不需要匹配,只需验证 H 即可。

PSS 与 v1.5 的安全性比较

PSS:具有可证明的安全性、紧密归约和概率性签名,但计算量略大。 v1.5:依靠启发式安全性、具有确定性、速度更快,但容易受到格式预言机攻击。 所有新代码都应使用 PSS。

TLS 1.3 中的 PSS

TLS 1.3 要求所有 RSA 签名都使用 RSA-PSS。新的 TLS 1.3 扩展禁止使用 PKCS#1 v1.5。签名算法包括:rsa_pss_rsae_sha256、rsa_pss_rsae_sha384、rsa_pss_rsae_sha512。

Python 中的 PSS

from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes # Sign sig = private_key.sign( message, padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH), hashes.SHA256() )

RSASSA-PSS OID

RSA-PSS 有自己的密钥类型 OID:id-RSASSA-PSS (1.2.840.113549.1.1.10)。专门为 PSS 生成的密钥使用此 OID,并要求使用 PSS 签名(不能与 v1.5 配合使用)。这是新部署的最佳实践。

截断哈希与盐值建议

当 salt_length = hash_length 时,PSS 的安全性 = min(|modulus|/2, |hash|) - 1 位。对于使用 SHA-256 的 RSA-2048:安全性为 128 位。请匹配安全等级:使用 RSA-3072 + SHA-384 可达到 192 位安全性。

快速检查

与 PKCS#1 v1.5 相比,是什么使 RSA-PSS 签名具有“概率性”?

回顾

RSA-PSS 是使用 RSA 进行签名的安全方式。接下来我们将掌握椭圆曲线密码学,理解曲线的几何结构和代数。

常见问题解答

「用于数字签名的 RSA-PSS」课时是免费的吗?

是的 — 「用于数字签名的 RSA-PSS」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「用于数字签名的 RSA-PSS」这节课中我会学到什么?

了解 PSS 编码和盐值,以及它为何取代 PKCS#1 v1.5 用于签名 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「用于数字签名的 RSA-PSS」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 教科书式 RSA 及其不安全原因
  2. PKCS#1 v1.5 填充与 Bleichenbacher 攻击
  3. OAEP:最优非对称加密填充
  4. 用于数字签名的 RSA-PSS
← 返回 Cryptology Academy