V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dlpliu
V2EX  ›  问与答

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

  •  
  •   dlpliu · 2018-07-25 16:42:52 +08:00 · 1423 次点击
    这是一个创建于 2313 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一个问题 在 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 做签名而选择全量的数据呢?是出于那种考量呢

    • 是出于即使payloadheader部分被篡改也能恢复干净数据的考量吗? 求大神赐教,感谢🙏
    1 条回复    2018-07-25 22:25:01 +08:00
    billlee
        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 来规定要怎么对明文进行预处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2741 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:06 · PVG 12:06 · LAX 20:06 · JFK 23:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.