🔑

JWK:RFC7517(JWK)とRFC7518(JWA)以外の関連項目

2024/10/19に公開

はじめに

  • RFC7517(原文)では,暗号鍵のJSONデータ構造であるJWK(Json Web Key),および複数のJWKセットであるJWK Setの仕様が策定されており,JWKに関しては各フィールド値の仕様が定義されています.
  • また,関連のRFC7518:JSON Web Algorithms (JWA)には,JWKで用いられる暗号アルゴリズムおよびその識別子の仕様が策定されています(例:EC:楕円曲線暗号, RSA:rsa暗号,oct:対称鍵)
  • JWKをいくつかのサイトで閲覧した時,RFC7517(JWK)やRFC7518(JWA)で定義されているフィールド値以外の値にみかけることがあったため,調べてみることにしました.どうやら,これら二つの仕様で定義されているフィールド値や識別子以外にもjwkで設定できる値が存在し, 関連仕様が策定されているそうです.**

RFC7638:JSON Web Key (JWK) Thumbprint

  • jwkのハッシュ値を計算する方法が策定されている.
  • 生成されたハッシュ値は,JWK識別または選択のために用いることができる.
    • 具体的な方法として,ハッシュ値をbase64urlエンコード化したものを,JWKs内のJWKのkidとして用いる方法がある.

RFC8037:CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)

  • Diffie-Hellmanアルゴリズムである「X25519」・「X448」と,その署名アルゴリズム「Ed25519」・「Ed448」をJOSEで使用するための仕様.
  • Diffie-Hellmanアルゴリズム:鍵共有のアルゴリズム
パラメータ 説明
kty(key type) "OKP" でなければならない.
crv 必須.キーペアのサブタイプ.例:"Ed25519","Ed448","X25519", "X448"
x 必須.公開鍵をbase64urlエンコーディングで表現したもの。
d 秘密鍵の場合は必須.秘密鍵をbase64urlエンコーディングで表現したもの.公開鍵の場合,このパラメータは存在しない.
  • 署名時のalg(JWT・JWS)設定例:
{"alg": "EdDSA"}

※CFRG:Crypto Forum Research Group

https://www.irtf.org/cfrg.html

"ext":「W3C:Web Cryptography API」で定義されたJWKのパラメーター

https://www.w3.org/TR/WebCryptoAPI/#iana-section-jwk

  • ext:対象のjwkが,エクスポートできるかどうかを表す.値は,truefalseのブール値
{"ext": true}

W3C:Web Cryptography API

  • ウェブアプリケーションにおける基本的な暗号操作(ハッシュ化、署名の生成と検証、暗号化と復号化,鍵生成および管理)を実行するためのJavaScript APIの仕様

https://www.w3.org/TR/WebCryptoAPI/

  • "ext"詳細
Parameter Name: "ext"
Parameter Description: Extractable
Used with "kty" Value(s): *
Parameter Information Class: Public
Change Controller: W3C Web Cryptography Working Group
Specification Document(s): [[ This Document ]]

OpenID Federation 1.0

  • Open ID ConnectまたはOAuth 2.0プロトコルを使用して,直接信頼関係にない(同じフェデレーションに属していない)2者(組織,サービス)が,信頼できる共通の第三者(Trust Anchor)を介してやり取りを行えるよう信頼関係を構築するための仕様.(間違っていたら,すいません)

  • Autlete社による説明

https://www.authlete.com/developers/oidcfed/

  • Authlete社代表取締役 川崎氏の資料(上記の図解を日本語バージョンにした資料)

https://www.slideshare.net/slideshow/20231109openidtechnightopenidfederationpdf/263261282#8

  • この仕様では,従来のjwkで設定できる値の他に下記の値がjwkのフィールド値として設定されます.iatexpは,JWTでも見慣れてますね.
フィールド 説明
iat オプション.対象の鍵が発行された時刻.
exp 必須.鍵の有効期限.
revoked オプション. JSONオブジェクト.対象の鍵の失効に関する情報が格納されている.
  • revoked
フィールド 説明
revoked_at 必須 .鍵が失効,または失効と見なされた時刻.
reason オプション. 鍵の失効理由を識別する文字列.仕様のセクション8.7.3で定義されている.例:unspecified等
  • 2024年に開かれたOpenIdのサミットにて,この仕様が紹介されている動画です.OpenID Federationの仕様では,JWKを従来のx509証明書みたいに扱おうとしているみたいですね.

https://youtu.be/XjZnDFsXGwE?si=aQt1q0P4IH7XLb5Z&t=507

{
    "iss": "https://trust-anchor.federation.example.com",
    "iat": 123972394272,
    "keys":
        [
            {
                "kty":"RSA",
                "n":"5s4qi …",
                "e":"AQAB",
                "kid":"2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
                "iat": 123972394872,
                "exp": 123974395972
            },
            {
                "kty":"RSA",
                "n":"ng5jr …",
                "e":"AQAB",
                "kid":"8KnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMJJr",
                "iat": 123972394872,
                "exp": 123974394972,
                "revoked": {
                  "revoked_at": 123972495172,
                  "reason": "compromised",
                }
            }
        ]
}

参考・関連資料

  • IANA:JSON Object Signing and Encryption (JOSE)

https://www.iana.org/assignments/jose/jose.xhtml#web-key-parameters

  • RFC7517:JSON Web Key(JWK)

https://datatracker.ietf.org/doc/html/rfc7517

  • RFC7517:JSON Web Key(JWK)日本語訳資料

https://openid-foundation-japan.github.io/rfc7517.ja.html

  • RFC7518:JSON Web Algorithms (JWA)

https://datatracker.ietf.org/doc/html/rfc7518

  • RFC7638:JSON Web Key (JWK) Thumbprint

https://datatracker.ietf.org/doc/html/rfc7638

  • RFC7638:JSON Web Key (JWK) Thumbprint日本語訳資料

https://openid-foundation-japan.github.io/rfc7638.ja.html

  • RFC8037:CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)

https://www.rfc-editor.org/rfc/rfc8037.html

  • W3C:Web Cryptography API

https://www.w3.org/TR/WebCryptoAPI/#iana-section-jwk

  • Web Crypto API - Web API | MDN

https://developer.mozilla.org/ja/docs/Web/API/Web_Crypto_API

  • OpenID Federation 1.0 - draft 39

https://openid.net/specs/openid-federation-1_0.html#name-federation-historical-keys-res

Discussion