1. ホーム
  2. jwt

[解決済み】RS256 vs HS256:違いは何ですか?

2022-03-25 04:44:58

質問

Webアプリの認証処理にAuth0を使用しています。ASP.NET Core v1.0.0 と Angular 2 rc5 を使用していますが、一般的に認証とセキュリティについてあまり知りません。

での ASP.NET Core Web Api の Auth0 ドキュメント JWTアルゴリズムにはRS256とHS256の2つの選択肢があります。これは馬鹿な質問かもしれませんが。

RS256とHS256の違いは何ですか?また、使用例(該当する場合)を教えてください。

どのように解決するのですか?

どちらの選択肢も、IDプロバイダがどのようなアルゴリズムを使って サイン JWTを作成します。署名は、トークンの受信者がトークンが改ざんされていないことを確認するために検証できるquot;署名"(JWTの一部)を生成する暗号化操作です。

  • RS256(RSA署名と SHA-256 ) は 非対称アルゴリズム ID プロバイダは署名を生成するために使用される秘密鍵を持ち、JWT の消費者は署名を検証するために公開鍵を取得する。秘密鍵とは対照的に公開鍵は安全に保管する必要がないため、ほとんどの ID プロバイダは消費者が簡単に入手して使用できるようにしている(通常はメタデータ URL を介して)。

  • HS256 ( HMAC 一方、SHA-256では、ハッシュ関数と、署名となるハッシュを生成するために二者間で共有される一つの(秘密)鍵の組み合わせが使われます。署名の生成と検証の両方に同じ鍵が使われるため、鍵が漏洩しないように注意する必要があります。

もしあなたがJWTを消費するアプリケーションを開発するのであれば、HS256を安全に使用することができます。なぜなら、あなたは誰が秘密鍵を使用するかをコントロールできるからです。 一方、クライアントを制御できない場合、あるいは秘密鍵を確保する方法がない場合は、RS256がより適しています。

公開鍵は通常、メタデータのエンドポイントから入手できるので、クライアントが自動的に公開鍵を取得するようにプログラムすることができます。この場合(.Net Coreライブラリがそうであるように)、設定時に行う作業は少なくなります(ライブラリがサーバーから公開鍵を取得します)。一方、対称鍵は帯域外で交換し(安全な通信路を確保し)、署名鍵のロールオーバーがあった場合は手動で更新する必要があります。

Auth0は、OIDC、SAML、WS-Fedプロトコルのメタデータエンドポイントを提供し、ここから公開鍵を取得することができます。これらのエンドポイントは、クライアントの[詳細設定]で確認できます。

例えば、OIDCメタデータエンドポイントは、次のような形式をとります。 https://{account domain}/.well-known/openid-configuration . その URL を参照すると、JSON オブジェクトに https://{account domain}/.well-known/jwks.json として表される、アカウントの公開鍵(または複数の鍵)を含んでいます。 JSON ウェブ鍵セット .

RS256のサンプルを見ると、公開鍵はどこにも設定する必要がないことがわかります:フレームワークによって自動的に取得されるのです。