请教一个问题
在 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 1
只是接口这样写,函数内部帮你算过摘要了
RSA 签名不可能对全量数据做的,因为被签名的数值不能大于模数 N 正确地实现 RSA 签名不是随便传个明文进去就可以了(参见 https://en.wikipedia.org/wiki/RSA_%28cryptosystem%29#Attacks_against_plain_RSA ),为了保证安全,有一套 PKSC #1 来规定要怎么对明文进行预处理 |