【问题标题】:How to Fingerprint a JWK?如何对 JWK 进行指纹识别?
【发布时间】:2017-07-24 03:33:36
【问题描述】:

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

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

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

更新

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

【问题讨论】:

    标签: ecdsa rsa-key-fingerprint jwk


    【解决方案1】:

    我想RFC7638 会回答你的问题。

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

    实现起来真的很简单:

    • 只保留必需的参数。对于 RSA 密钥:ktyne,对于 EC 密钥:crvktyxy
    • 按字典顺序对这些参数进行排序:ektyn
    • 将参数和值计算成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

    【讨论】:

      【解决方案2】:

      我不相信有一个真正的标准,但这个话题已经在IETF mailing archives 中讨论过了。虽然关于规范 JSON 总体上是否是一个好主意的讨论似乎有点偏离轨道,但有一种方法似乎是合理的标准指纹识别方法。

      1. 从 JWK 中删除所有“元数据”字段(在这种情况下,“元数据”定义为任何非必需密钥,即除“kty”和JWA RFC-7518 定义的加密算法参数之外的任何内容)。
      2. 将剥离的 JWK 转换为“规范”JSON(按字典顺序对键进行排序,没有前导或尾随空格,并且标记之间没有空格)。
      3. 根据创建的 JSON 字符串计算摘要。

      我知道规范 JSON 也没有真正的标准,但我看到的所有来源都至少同意上面列出的规则(这是唯一应该与使用的对象类型相关的规则对于 JWK 的)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-23
        • 2018-03-11
        • 1970-01-01
        • 2013-01-17
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多