🎫
← ガむド䞀芧に戻る

JWT 眲名の怜蚌方法: HS256、RS256、ES256

· タグ: jwt-verification, jwt-signature, hs256, rs256, token-validation

JWT 眲名の怜蚌方法

JWT はクレヌムを平文で保持したす。停造を防ぐ唯䞀の芁玠は眲名です。怜蚌がなければ、攻撃者は任意のトヌクンを生成しお任意のナヌザヌになりすたすこずができたす。このガむドでは、最も䞀般的な 3 ぀の JWT 眲名アルゎリズムず、それぞれの怜蚌方法に぀いお説明したす。

怜蚌プロセス

アルゎリズムに関係なく、JWT 眲名の怜蚌は同じ手順に埓いたす:

  1. トヌクンを . で分割しお、ヘッダヌ、ペむロヌド、眲名を抜出したす。
  2. ヘッダヌを base64url デコヌドしお alg フィヌルドを読み取りたす。
  3. アルゎリズムず鍵を䜿甚しお、ヘッダヌずペむロヌドから眲名を再蚈算したす。
  4. 再蚈算した眲名をトヌクンの眲名ず比范したす。
  5. 䞀臎すれば、トヌクンは本物です。

HS256HMAC-SHA256

HS256 は察称アルゎリズムです — 同じ秘密鍵が眲名の䜜成ず怜蚌の䞡方に䜿甚されたす。

signature = HMACSHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  secret
)

怜蚌するには、共有秘密鍵で HMAC を再蚈算しお比范したす:

Token:   header.payload.sig
Secret:  "my-shared-secret"

1. Compute: HMACSHA256("header.payload", "my-shared-secret")
2. Compare: computedSignature === sig

セキュリティ䞊の考慮事項: 秘密鍵は機密に保ち、定期的にロヌテヌションし、少なくずも 256 ビットの゚ントロピヌを持぀必芁がありたす。HS256 は、倚数のサヌビスが共有秘密鍵を必芁ずするマむクロサヌビスアヌキテクチャには適しおいたせん。

RS256RSA-SHA256

RS256 は非察称です。発行者は秘密鍵で眲名し、怜蚌者は察応する公開鍵で怜蚌したす。

signature = RSASHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  privateKey
)

怜蚌するには、公開鍵を䜿甚したす:

Token:   header.payload.sig
Public:  "-----BEGIN PUBLIC KEY-----..."

1. Load the RSA public key
2. Verify: RSA_SHA256_verify("header.payload", sig, publicKey)

利点: 眲名鍵ず怜蚌鍵が分離されおいたす。どのサヌビスも秘密鍵を保持せずに怜蚌できたす。公開鍵は JWKS ゚ンドポむントから配信できるため、ロヌテヌションが容易です。

ES256ECDSA-SHA256

ES256 は P-256 曲線を䜿甚した ECDSA を䜿甚したす。RS256 ず同様に非察称です。

signature = ECDSA_SHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  privateKey
)

怜蚌には ECDSA P-256 公開鍵を䜿甚したす。ES256 は眲名が倧幅に小さくRSA-2048 の 256 バむトに察しお 64 バむト、怜蚌も高速です。

アルゎリズムの比范

| プロパティ | HS256 | RS256 | ES256 | |----------|-------|-------|-------| | 鍵の皮類 | 察称共有秘密鍵 | 非察称RSA 鍵ペア | 非察称EC 鍵ペア | | 眲名サむズ | 32 バむト | 256 バむト | 64 バむト | | 鍵の配垃 | 秘密に共有 | 公開鍵は公開 | 公開鍵は公開 | | ロヌテヌション | 䞭皋床 | 容易JWKS | 容易JWKS | | 䜿甚䟋 | 信頌できる内郚システム | 分散 API | モバむル、IoT |

よくある怜蚌の萜ずし穎

  • アルゎリズム混乱攻撃。 コヌドが匷制なしでトヌクンから alg を読み取る堎合、攻撃者はアルゎリズムを倉曎できたす。アルゎリズムが期埅倀ず䞀臎するこずを垞に怜蚌しおください。
  • alg: "none" の受理。 䞀郚のラむブラリは眲名なしトヌクンを受け入れたす。alg: "none" を明瀺的に拒吊しおください。
  • 眲名比范の䞍完党さ。 非定数時間の比范は、タむミング攻撃によっお情報を挏えいさせる可胜性がありたす。JWT ラむブラリの組み蟌み比范を䜿甚しおください。

JWT トヌクンをオンラむンで怜蚌

JWT デコヌダヌツヌルを䜿甚しお、任意のトヌクンをデコヌドおよび怜蚌したす。トヌクンを貌り付けおヘッダヌずペむロヌドを衚瀺し、適切な秘密鍵たたは公開鍵を指定しお眲名を怜蚌したす。すべおの凊理はブラりザ内で行われたす。

JWT 眲名の怜蚌方法: HS256、RS256、ES256 - CoolTool