RSA JWT签名填充问询:RS256是否采用PKCS1填充?
JWT与RSA签名填充相关问题解答
1. JWT算法标识“RS256”是否意味着采用PKCS1填充?
是的,JWT的RS256算法全称是RSA-SHA256,遵循JWA(JSON Web Algorithms)标准规范,明确要求使用PKCS#1 v1.5作为签名的填充方案,而非PSS填充。
2. 理论上,验证阶段签名经过RSA逆运算后,是否无法从填充后明文的比特信息判断填充方案?至少能否可靠区分PKCS1与PSS?
从结构设计来看,PKCS#1 v1.5的填充有固定格式:开头为0x00 0x01,随后是连续的0xFF字节,接着是0x00分隔符,最后是哈希算法的OID标识和SHA256哈希值。而PSS填充的结构完全不同,包含随机盐值、掩码生成函数处理后的内容,整体无固定的连续0xFF这类特征。
虽然理论上存在极端巧合:PSS填充后的结果恰好符合PKCS#1 v1.5的格式,但这种概率极低(低到在实际场景中可以忽略不计)。因此,在验证阶段,完全可以通过检查逆运算后明文的结构特征,可靠区分PKCS#1 v1.5和PSS填充方案。
3. 若存在上述可能性,是否有某种RSA签名验证逻辑可自行推断填充方案,而非将其作为输入参数?
不存在可靠且安全的这类验证逻辑。原因有两点:
- 即使尝试同时用两种填充方案校验,虽然概率极低,但仍存在一个签名同时通过两种填充验证的可能性,这会带来安全风险(比如攻击者构造的签名可能被误判为合法)。
- 密码学协议的设计原则是明确指定算法和填充方案,JWT的算法标识(如
RS256)已经绑定了对应的填充规则,验证方必须严格按照指定的方案校验,而非自行推断——这既是标准要求,也是保障安全性的必要前提。
内容的提问来源于stack exchange,提问作者Seva Alekseyev
相关产品推荐
相关产品推荐

