MS_JOSE - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

JOSE

概要

  • JOSE : Javascript Object Signing and Encryption は、
    JSON オブジェクトの署名暗号化に関する仕様(群)。
  • JOSE のサブセット仕様に JWTJWS / JWE)がある。
  • 読み方が不明。ジョース?

補足: 発音は「ジョーズ」(ホセではない)で通っている。
IETF の WG 名がそのまま仕様群の呼称になったもので、
「JOSE」という単一の RFC は存在しない。

仕様群の全体像

仕様 RFC 役割
JWS RFC 7515 署名 / MAC を付ける(ヘッダ.ペイロード.署名
JWE RFC 7516 暗号化する(5 パート構成)
JWK RFC 7517 JSON で表現する
JWA RFC 7518 上記で使うアルゴリズム識別子を定義する
JWT RFC 7519 JWS / JWE を使ってクレームセットを運ぶ
  • 上記に加え、以下がよく参照される。
仕様 RFC 役割
JWK Thumbprint RFC 7638 JWK から kid を決定的に導出する
JWS Unencoded Payload RFC 7797 ペイロードを Base64URL しない JWS

補足(関係の整理): JOSE は「素材」、JWT は「用途」と考えると分かりやすい。

  • JWS / JWE は「任意のバイト列」を保護する汎用の入れ物である。
  • JWT は、その中身を「JSON のクレームセット」に限定した使い方の名前である。

したがって「JWT は JWS の一種」というより、
JWT は JWS(または JWE)というシリアライズ形式に乗った、クレームの表現」が正確。

批判

補足(この批判の論点): 批判の中心は
アルゴリズムをメッセージ側(ヘッダの alg)が指定できる」という設計にある。

  • alg: none を受理してしまう実装
  • RS256 を HS256 に読み替えさせ、公開鍵を HMAC 鍵として使わせる攻撃

いずれも「受信側が alg を鵜呑みにする」ことが原因である。
Fernet や NaCl(libsodium)のような
アルゴリズムを仕様側で 1 つに固定する」設計であれば、
この種の混乱は原理的に起こらない。

ただし JOSE は OpenID Connect や FIDO2(FIDO2)など
主要仕様の土台になっており、実務上は避けられない。
受け入れる alg をサーバ側で固定することで運用上は塞げる
(詳細は JWT を参照)。

参考

RFC

7165

7520


Tags: 移行, IT国際標準, プログラミング, 通信技術, 認証基盤, クレームベース認証, 暗号化

⚠️ **GitHub.com Fallback** ⚠️