MS_JOSE - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- JOSE : Javascript Object Signing and Encryption は、
JSON オブジェクトの署名と暗号化に関する仕様(群)。 - JOSE のサブセット仕様に JWT(JWS / 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)というシリアライズ形式に乗った、クレームの表現」が正確。
- 以下の様な話もあるが、提案されている Fernet は(今の所)メジャーではない。
- JOSE は、絶対に避けるべき悪い標準規格である | POSTD
https://postd.cc/jwt-json-web-tokens-is-bad-standard-that-everyone-should-avoid/
- JOSE は、絶対に避けるべき悪い標準規格である | POSTD
補足(この批判の論点): 批判の中心は
「アルゴリズムをメッセージ側(ヘッダのalg)が指定できる」という設計にある。
alg: noneを受理してしまう実装- RS256 を HS256 に読み替えさせ、公開鍵を HMAC 鍵として使わせる攻撃
いずれも「受信側が
algを鵜呑みにする」ことが原因である。
Fernet や NaCl(libsodium)のような
「アルゴリズムを仕様側で 1 つに固定する」設計であれば、
この種の混乱は原理的に起こらない。ただし JOSE は OpenID Connect や FIDO2(FIDO2)など
主要仕様の土台になっており、実務上は避けられない。
受け入れるalgをサーバ側で固定することで運用上は塞げる
(詳細は JWT を参照)。
- Javascript Object Signing and Encryption (jose)
https://datatracker.ietf.org/wg/jose/charter/
-
RFC 7165 - Use Cases and Requirements for JSON Object Signing and Encryption (JOSE)
https://tools.ietf.org/html/rfc7165 -
Use Cases and Requirements for JSON Object Signing and Encryption (JOSE)
http://openid-foundation-japan.github.io/draft-ietf-jose-use-cases-03.ja.html
- RFC 7520 - Examples of Protecting Content Using JSON Object Signing and Encryption (JOSE)
https://tools.ietf.org/html/rfc7520
Tags: 移行, IT国際標準, プログラミング, 通信技術, 認証基盤, クレームベース認証, 暗号化