共通鍵暗号方式とは
暗号化と復号に 同じ鍵(共通鍵) を使う暗号方式
仕組み
- 暗号化: 送信者と受信者は、あらかじめ同じ秘密鍵を共有しておきます。
送信者はこの共通鍵でメッセージを暗号化し、暗号化されたデータを相手に送ります。 - 復号化: 受信者は送られてきた暗号文を、共有している同じ共通鍵を使って復号し、元のメッセージを読み取ります。
公開鍵暗号方式とは
暗号化と復号化に 異なる2本の鍵(公開鍵と秘密鍵) を使用する暗号方式
仕組み
- 暗号化: 送信者は、受信者が公開している「公開鍵」を使ってメッセージを暗号化します。
- 復号化: 暗号化されたメッセージを受け取った受信者は、自分だけが持つ「秘密鍵」で復号し、元の内容を取り出します。
HMAC/RSAの違い
| 項目 | HMAC(HS256 など) | RSA(RS256 など) |
|---|---|---|
| 暗号方式 | 共通鍵暗号方式 | 公開鍵暗号方式 |
| 署名 | 共通鍵で署名 | 秘密鍵で署名 |
| 検証 | 同じ共通鍵で検証 | 公開鍵で検証(秘密鍵不要) |
| 鍵管理の難易度 | 高い(複数サーバーで共通鍵の共有が必要) | 低い(公開鍵を配布すればOK) |
| セキュリティ | 鍵漏洩の影響が大きい →漏れると“偽のJWTを作れる” |
秘密鍵が守られていれば安全性が高い |
| パフォーマンス | 高速 | やや遅い(非対称暗号のため) |
| JWTでの例 | HS256 / HS384 / HS512 | RS256 / RS384 / RS512 |
HMAC と RSA を選ぶ基準
HMAC(HS256など)を選ぶとよいケース
- サーバーが 1台〜少数構成で、共通鍵を安全に保持できる場合
- システムが 内部ネットワークだけで完結している場合
- 高速性・シンプルさを優先したい場合
- 外部に公開する必要のない内部APIにJWTを使う場合
RSA(RS256など)を選ぶとよいケース
- サービスが 複数サーバー / マイクロサービス構成
- 外部の認証基盤(Auth0, Cognito, Google OIDC など)と連携する
- セキュリティをより重視したい
- 複数のクライアント(Web / モバイル / API)が検証する
まとめ
JWT の署名には、単一の共通鍵で処理する HMAC と、公開鍵暗号を用いる RSA の2種類があり、それぞれで鍵管理と安全性の特徴が異なります。
署名と検証を同一サービス内で完結させるなら HMAC、複数のサービスやクライアントで JWT を検証する場合は RSA を選ぶのが一般的です。