如何对 JWK 进行指纹识别?

Coo*_*J86 4 rsa-key-fingerprint ecdsa jwk

是否有为 JWK 创建指纹(又名指纹)的标准规范方法?

从我阅读的内容来看,标准似乎没有定义 akid应该如何指定,我觉得这很奇怪。对我来说,它是最重要的,因为它是一个确定性的值,而不是一个需要查找表的值,这样其他人可以通过拥有公钥轻松地重新创建密钥 ID。

我知道 SSH 指纹和 X.509 指纹是标准化的,但是对于使用 JWK 的所有环境(尤其是浏览器)来说,这些似乎不是一个合适的解决方案,因为它们对于幼稚的实现来说太复杂了,并且包括能够操作的库这样(即伪造)会浪费大量内存、带宽和虚拟机编译时间。

更新

官方称它为“指纹”而不是“指纹”。

Flo*_*lli 6

我认为RFC7638会回答你的问题。

此 RFC 描述了一种通过 JWK 计算哈希值的方法。

实现起来真的很容易:

  • 仅保留必需的参数。对于RSA密钥:ktyne和一个EC键:crvktyxy
  • 按字典顺序对这些参数进行排序:e,ktyn
  • 将参数和值计算为 Json: {"e":"AQAB","kty":"RSA","n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2 aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCi FV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65Y GjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n 91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_x BniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw"}
  • 使用 SHA-256 对其进行散列并将其编码为 Base64 Url Safe: NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs