For

2024.4.26

JOSE, JWS, JWK, JWA, JWT

概要

JOSE(JSON Object Signing and Encryption)を構成するJWS, JWK, JWA, JWTの概要をまとめます。

仕様

JWS(JSON Web Signature)

RFC 7515 - JSON Web Signature (JWS)
データの完全性を保証するためにデジタル署名やMAC(Message Authentication Codes)をJSONペイロードに適用する仕様。

JWE(JSON Web Encryption)

RFC 7516 - JSON Web Encryption (JWE)
データの機密性を保つためにJSONペイロードを暗号化する仕様。
JWEで暗号化されたトークンはHeader、Encrypted Key、Initialization Vector、Ciphertext、Authentication Tagの5セクションからなる。

JWK(JSON Web Key)

RFC 7517 - JSON Web Key (JWK)
暗号化や署名に使用される鍵をJSON形式で表現するための仕様。

RSA公開鍵の例

JSON_____sample_____{
  "kty": "RSA",
  "alg": "RS256",
  "use": "sig",
  "kid": "1234567890abcdef",
  "n": "0vx7agoebGcYSuP6kPaQ_HSzLY314rbt9yZcHqFxpG10bvq7ZKDXA5iBlEiB4Dm_Gx5x5D9EX7Q3A_In9jFwMfXiGmKo5VZ5Q0LALjQHoKmTCSJ6t5R5zmNeC3Yckca3Pgp_1R_m56EJNkKFV3lEK3yAo9KkZz8vQUYTqIFZ3Clk",
  "e": "AQAB"
}


HMAC対称鍵の例

JSON_____sample_____{
  "kty": "oct",
  "alg": "HS256",
  "use": "sig",
  "kid": "01",
  "k": "GawgguFyGrWKav7AX4VKUg"
}


JWA(JSON Web Algorithms)

RFC 7518 - JSON Web Algorithms (JWA)
JWS、JWE、およびその他のセキュリティトークン仕様において使用される暗号化アルゴリズムとデジタル署名アルゴリズムを定義している。

JWT(JSON Web Token)

RFC 7519 - JSON Web Token (JWT)
Auth0 by Okta - Docs - JSON Web Tokens

JSON web token (JWT), pronounced "jot”, …

Header、Payload、Signatureの3セクションからなるトークン。
Signatureがなくてもドットで区切られた仕様に準拠した3セクションが用意されていればJWTと言える。

それぞれの関連性

・JWTのSignatureには任意でJWSに準拠した署名が行われる。
・JWTをJWEに準拠して暗号化したものをJWE Tokenと呼ぶ。
 “JWE Token” という表現はRFCでの定義には登場しないものの Auth0 by Okta - JSON Web Encryption では使用されている表現。おそらく口語で通じる表現のはず。
・JWKは主に外部システムとの間で鍵を共有するために使われ、JWTやJWEのHeaderのkidを通じて参照される。