如何指纹JWK?

时间:2017-03-03 21:33:06

标签: ecdsa rsa-key-fingerprint jwk

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

从我正在阅读的内容来看,似乎标准没有定义如何指定kid,我觉得这很奇怪。对我而言,它最大限度地使它成为一个确定性的值,而不是一个需要查找表,以便其他人可以通过拥有公钥轻松地重新创建密钥id。

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

更新

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

2 个答案:

答案 0 :(得分:2)

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

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

实施起来非常简单:

  • 仅保留所需参数。对于RSA密钥:ktyne以及EC密钥:crvktyx和{{1} }。
  • 按字典顺序对这些参数进行排序:yekty
  • 将参数和值计算到Json:n
  • 使用SHA-256对其进行哈希并将其编码为Base64 Url Safe:{"e":"AQAB","kty":"RSA","n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2 aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCi FV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65Y GjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n 91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_x BniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw"}

答案 1 :(得分:0)

我不相信有真正的标准,但IETF mailing archives已讨论过这个话题。虽然对话似乎有点侧重于规范JSON是否是一般的好主意,但有一种方法似乎是合理的标准指纹识别方法。

  1. 从JWK中移除所有“元数据”字段(在这种情况下,“元数据”被定义为任何非必需的键,即除了“kty”之外的任何字段以及由JWA RFC-7518定义的加密算法的参数)。
  2. 将剥离的JWK转换为“规范”JSON(按字典顺序排序键,没有前导或尾随空格,并且令牌之间没有空格)。
  3. 通过创建的JSON字符串计算摘要。
  4. 对于规范的JSON,我也没有真正的标准,但我看到的所有来源至少都符合上面列出的规则(这是与所用对象类型相关的唯一规则)对于JWK's)。