0Pricing
Cryptology Academy · レッスン

HS256とRS256:対称鍵JWTと非対称鍵JWT

認証システムに適した署名アルゴリズムを選択します。

「HS256とRS256:対称鍵JWTと非対称鍵JWT」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

アルゴリズムの系統

JWTの署名には、対称(HMAC)アルゴリズムまたは非対称(RSA、ECDSA)アルゴリズムを使用します。HS256はHMAC-SHA256、RS256はRSA-PKCS1v1.5-SHA256、ES256はECDSA-P256-SHA256を表します。この選択は、鍵の配布方法と信頼モデルに影響します。

HS256:対称HMAC

HS256では、署名と検証の両方に1つの共有秘密鍵を使用します。発行者とすべての検証者が同じ秘密鍵を持つ必要があります。実装は簡単ですが、すべての検証者への安全な鍵配布が必要です。

HS256のユースケース

HS256は、発行者と検証者が同じサービスである場合に適しています(たとえば、モノリシックAPIが自身のトークンを署名・検証する場合です)。複数の独立したサービスがトークンを検証する必要がある場合は、HS256を使用しないでください。すべてのサービスに秘密鍵が必要になるためです。

RS256:非対称RSA

RS256では、秘密鍵で署名し、公開鍵で検証します。秘密鍵を保持するのは認証サーバーだけです。すべてのリソースサーバーはJWKSエンドポイントから公開鍵を取得してローカルで検証するため、秘密鍵を共有する必要はありません。

RS256のユースケース

RS256はマイクロサービスアーキテクチャに適しています。IDプロバイダーがトークンに署名し、各下流サービスはリクエストごとにIDPへ接続することなく、公開鍵で検証できます。鍵を配布するリスクなしに水平スケーリングできます。

ES256:ECDSAの代替

ES256はP-256上のECDSAを使用します。署名サイズは、2048ビット鍵を使うRS256の256バイトに対して64バイトです。検証はRS256より約10倍高速です。帯域幅または検証速度が重要な場合(モバイルAPIやIoT)に適しています。

鍵のローテーション

RS256/ES256では、JWKSに新しい鍵(新しいkid)を公開し、新しい鍵で新しいトークンに署名し、古いトークンが期限切れになるまで猶予期間を設けてから、古い鍵を削除します。HMACのローテーションでは、新しいシークレットを再配布する必要があります。

性能比較

HS256の検証: 約1 µs。RS256の検証: 約100 µs(2048ビット)。ES256の検証: 約50 µs(P-256)。HS256は最速ですが、シークレットの共有が必要です。分散システムでは、ES256がセキュリティと性能のバランスに最も優れています。

algヘッダー攻撃の概要

重大な脆弱性があります。検証側がalgヘッダーを無条件に信頼すると、攻撃者はalgをRS256からHS256に変更し、(公開されている)サーバーの公開鍵をHMACシークレットとして使ってトークンに署名できます。対策: algヘッダーを決して信頼しないでください。

アルゴリズムの選択

判断基準: 単一サービス → HS256。複数サービス/マイクロサービス → RS256またはES256。高負荷のモバイル環境 → ES256。迷った場合は、ES256(P-256)または2048ビット以上の鍵を使用してください。性能が重要な処理でRS512は決して使用しないでください。

ライブラリと標準

PyJWT(Python)、jose(Node.js)、または auth0/java-jwt を使用してください。検証呼び出しでは、想定するアルゴリズムを必ず固定してください: jwt.decode(token, secret, algorithms=["HS256"])。algorithms=Noneを渡したり、パラメータを省略したりしないでください。

確認問題

マイクロサービスアーキテクチャで、なぜHS256よりRS256が推奨されるのでしょうか。

まとめ

HS256は対称方式(共有シークレット)で、RS256/ES256は非対称方式(秘密鍵で署名し、公開鍵で検証)です。複数の当事者が関わるシステムでは、非対称アルゴリズムを使用してください。次はJWTの脆弱性の悪用について学びます。

よくある質問

「HS256とRS256:対称鍵JWTと非対称鍵JWT」レッスンは無料ですか?

はい。「HS256とRS256:対称鍵JWTと非対称鍵JWT」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「HS256とRS256:対称鍵JWTと非対称鍵JWT」で何を学びますか?

認証システムに適した署名アルゴリズムを選択します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「HS256とRS256:対称鍵JWTと非対称鍵JWT」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JWTの構造:ヘッダー、ペイロード、署名
  2. HS256とRS256:対称鍵JWTと非対称鍵JWT
  3. JWTの脆弱性:alg=noneと鍵の取り違え
  4. 安全なJWT実装のベストプラクティス
← Cryptology Academyに戻る