请教一个问题 在 jwt 的签名部分(VERIFY SIGNATURE),使用 RSA 公私钥方式对payload
和header
进行签名的时候,签名的逻辑是
RSASHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), privateKey, publicKey )
对于上面的逻辑来说,为什么要传入全部的 header
和 payload
进行加密呢? 对于一个 jwt 来说 payload 部分本来就相当于是明文可见的。只签名这两部分的 hash 应该也可以实现数据完整性的校验。像下面这种
RSASHA256( Hash(header,payload), privateKey, publicKey )
我的问题是 --> 为什么不对 header 和 payload 的 hash 做签名而选择全量的数据呢?是出于那种考量呢
payload
和header
部分被篡改也能恢复干净数据的考量吗? 求大神赐教,感谢 1 billlee 2018-07-25 22:25:01 +08:00 ![]() 只是接口这样写,函数内部帮你算过摘要了 RSA 签名不可能对全量数据做的,因为被签名的数值不能大于模数 N 正确地实现 RSA 签名不是随便传个明文进去就可以了(参见 https://en.wikipedia.org/wiki/RSA_%28cryptosystem%29#Attacks_against_plain_RSA ),为了保证安全,有一套 PKSC #1 来规定要怎么对明文进行预处理 |