0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

共通鍵暗号と公開鍵暗号の違いから理解する署名方式の選び方

Posted at

共通鍵暗号方式とは

暗号化と復号に 同じ鍵(共通鍵) を使う暗号方式

仕組み

  1. 暗号化: 送信者と受信者は、あらかじめ同じ秘密鍵を共有しておきます。
    送信者はこの共通鍵でメッセージを暗号化し、暗号化されたデータを相手に送ります。
  2. 復号化: 受信者は送られてきた暗号文を、共有している同じ共通鍵を使って復号し、元のメッセージを読み取ります。

公開鍵暗号方式とは

暗号化と復号化に 異なる2本の鍵(公開鍵と秘密鍵) を使用する暗号方式

仕組み

  1. 暗号化: 送信者は、受信者が公開している「公開鍵」を使ってメッセージを暗号化します。
  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 を選ぶのが一般的です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?