对 JWT 使用公私钥签名方式的签名逻辑有些疑惑,求帮助🙏

2018-07-25 16:42:52 +08:00
 dlpliu

请教一个问题 在 jwt 的签名部分(VERIFY SIGNATURE),使用 RSA 公私钥方式对payloadheader进行签名的时候,签名的逻辑是

RSASHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  privateKey,
  publicKey
)

对于上面的逻辑来说,为什么要传入全部的 headerpayload进行加密呢? 对于一个 jwt 来说 payload 部分本来就相当于是明文可见的。只签名这两部分的 hash 应该也可以实现数据完整性的校验。像下面这种

RSASHA256(
  Hash(header,payload),
  privateKey,
  publicKey
)

我的问题是 --> 为什么不对 header 和 payload 的 hash 做签名而选择全量的数据呢?是出于那种考量呢

1445 次点击
所在节点    问与答
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 来规定要怎么对明文进行预处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/474096

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX