日本語
  • セキュリティ
  • 暗号化
  • jwt
  • 非対称
  • ec
  • rsa
  • 公開鍵
  • 秘密鍵
  • トークン
  • 署名

JWT における EC および RSA 署名アルゴリズムの入門

非対称暗号化の基本を学び、JWT の人気の署名キーアルゴリズム - EC と RSA の利点と欠点を理解しましょう。

Charles
Charles
Developer

背景

デジタル世界では、データ伝送のセキュリティを向上させる追求は常に一定で進化しています。今日では、JSON Web トークン (JWT) が広く採用され、OAuth 2.0 および OIDC において重要な役割を果たしています。しかし、認可サーバーはクライアントから送信された JWT トークンをどのように検証し信頼するのでしょうか?トークンはどのように発行され、発行者によって署名されるのでしょうか?このブログ記事では、非対称暗号化について説明し、Logto が JWT トークンで使用するさまざまな署名アルゴリズムの利点と欠点を掘り下げます。

非対称暗号化の理解

非対称暗号化は、公開鍵暗号とも呼ばれ、コンピュータセキュリティと暗号化の基本概念であり、関連する一対のユニークなキー、公開鍵と秘密鍵の使用を含みます。これらのキーの役割は最初は直感に反するかもしれませんが、データセキュリティには不可欠です。

  • 公開鍵: 名前が示すように、公開鍵はオープンな共有のために設計されています。JWT や同様のシステムの文脈では、公開鍵は暗号化ではなく署名検証に使用されます。データが秘密鍵で署名され、受信者が対応する公開鍵を有している場合、受信者はデータが本当に秘密鍵の保有者によって署名され、伝送中に改ざんされていないことを確認できます。しかし、HTTPS などの従来の非対称暗号化使用では、公開鍵は暗号化に使用され、暗号化されたデータはペアとなる秘密鍵を持つターゲットサーバーのみが復号化できます。
  • 秘密鍵: それに対して、秘密鍵は厳重に守られるべき秘密であり、正当な所有者のみが知っているべきです。JWT の文脈では、秘密鍵はデジタル署名を作成するために使用され、誰でも対応する公開鍵へのアクセス権を持つことで検証できます。さらに、より伝統的な非対称暗号化の文脈では、秘密鍵は実際には復号化に使用され、公開鍵で安全に暗号化されたデータへのアクセスを可能にします。

このキーのユニークな配置により、公開鍵がデータを検証または暗号化し、秘密鍵がそれに署名または復号化するという形で、デジタル世界での安全なデータ伝送とユーザー認証メカニズムの基礎が形成されます。 詳細はこのブログ記事をご覧ください。

非対称暗号化アルゴリズム: RSA vs EC

RSA (Rivest-Shamir-Adelman)EC (楕円曲線) アルゴリズムは、非対称暗号化で最も一般的に使用される 2 つの「数学的関数」です。開発者として、Auth フレームワークとその JWT を扱う際に、これらのアルゴリズムの選択を迫られることがよくあります。しかし、どちらを選ぶべきでしょうか?各アルゴリズムの利点と欠点を掘り下げてみましょう。

RSA 署名アルゴリズム

  • 利点:
    1. 幅広いサポート: RSA はさまざまなプラットフォームやライブラリで広くサポートされ、多くの環境での互換性を確保しています。
    2. 長い実績: RSA は信頼性のあるセキュリティの長い歴史を持ち、アルゴリズムは暗号コミュニティによく理解されています。
  • 欠点:
    1. キーのサイズ: RSA キーは同じレベルのセキュリティを達成するために EC よりも長く、より大きなトークンサイズと計算上の負担を引き起こします。
    2. パフォーマンス: RSA 操作は EC に比べて遅くなる傾向があり、トラフィックの多いアプリケーションではデメリットになる可能性があります。

EC 署名アルゴリズム

  • 利点:
    1. 効率性: EC は RSA と比較して優れたパフォーマンスを誇り、リソース制約や高トラフィック負荷のアプリケーションに理想的です。
    2. コンパクトなキーサイズ: EC キーは同等のセキュリティ レベルを提供しながら、RSA に比べてはるかに短いです。これにより、ストレージとネットワークの要求が削減され、暗号化操作が高速化されます。
    3. セキュリティ: EC は、楕円曲線の複雑な数学によって強化され、ブルートフォース攻撃に対して耐性がある堅牢なセキュリティで高く評価されています。
  • 欠点:
    1. サポートの制限: 一部の古いシステムやライブラリは、完全な EC サポートに欠け、互換性の問題を引き起こす可能性があります。例えば、Cloudflare Zero Trust は EC で署名されたトークンをサポートしていません。
    2. 複雑性: EC の実装は、関与する数学の複雑さにより、より複雑になる可能性があります。

Logto の JWT 署名アルゴリズムの選択

Logto は常にセキュリティと柔軟性の最高基準にコミットしており、コアに最も最新で高性能のソリューションを使用する傾向があります。EC は、堅牢なセキュリティと計算効率の優れた組み合わせを提供し、現代の認証および認可ニーズに理想的なフィットとなります。したがって、EC は私たちの製品の初期段階からデフォルトの署名キーアルゴリズムとなっています。

しかし、EC で署名されたトークンが、一部のサードパーティーのシステムやフレームワーク、特にレガシなものと互換性がないという多数のユーザーフィードバックも受け取りました。そのため、Logto がすべての認証要件に対して適応性と多様性を保持できるように、RSA アルゴリズムのサポートを提供する取り組みを進めています。

次回のリリースで、Logto Cloud は「プライベートキーのローテーション」機能を導入します。これにより、あなたのテナントで新しい OIDC プライベートキーとクッキーキーを作成できるようになります。(プライベートキーは JWT トークンの署名に使用され、クッキーキーはクッキーの署名に使用されます。)

OIDC キーを回転させるためのコンソール UI のスクリーンショット

この機能は、長期間のキー漏洩や危険性を軽減するのに役立ちます。定期的に秘密鍵をローテーションすることは、組織のセキュリティ戦略における基本的な実践であり、Logto により強く推奨されています。

さらに、JWT 署名キーを回転させる際、EC と RSA から署名キーアルゴリズムを選択するオプションも提供します。サードパーティープラットフォームに接続できないという問題に直面している場合は、未対応の JWT 署名アルゴリズムのために、今が新しい秘密鍵に対して RSA アルゴリズムを選択する時です。

この設定はテナント設定ページにあるため、OSS ユーザーには UI は利用できません。しかし、心配しないでください、最新のリリースにアップグレードし、Logto ルートディレクトリで以下の CLI コマンドを実行することでこれを達成できます。

要約

非対称暗号化は、認証システムでの JWT トークンのセキュリティを確保します。EC および RSA アルゴリズムは、暗号化における不可欠で人気のあるアルゴリズムです。これらのアルゴリズムの利点と欠点、および数学的原則を理解することで、認証と認可フレームワークを使用するアプリケーションにとってより良い決定を下す助けになります。

Logto は引き続き、より安全で堅牢なユーザーエクスペリエンスを提供するために探求し続けます。