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

JWT 署名アルゴリズムの概要

JSON Web Token (JWT) 署名アルゴリズムを探索し、2 つの最も人気のある非対称暗号化アプローチである RSA と EC をカバーします。それぞれのアルゴリズムの長所と短所、そして Logto が JWT トークンを保護するためにどのように使用しているかを学んでください。

Charles
Charles
Developer

JWT とは何ですか?

JSON Web Token (JWT) は、クレームを安全に表現するためのコンパクトで URL に安全な方法です。構造にはヘッダー、ペイロード、および署名が含まれています。

現在、JWT は広く採用されており、OAuth 2.0 および OIDC において重要な役割を果たしています。しかし、認可サーバーはクライアントから送信された JWT をどのように検証し、信頼するのでしょうか?トークンはどのようにして発行者によって発行および署名されるのでしょうか?このブログ記事では、非対称暗号化について話し、Logto が JWT トークンで使用しているさまざまな署名アルゴリズムの長所と短所を掘り下げていきます。

JWT の構造

Logto は、ID トークンとアクセス トークンの両方を含むすべての JWT トークンに署名しています。署名済みの JWT は JWS (JSON Web Signature) としても知られています。署名済み JWT の構造は、ヘッダー、ペイロード、および署名の 3 つの部分で構成され、ドット (.) で区切られています。

JOSE (JSON Object Signing and Encryption) ヘッダー

ヘッダーは通常次の部分で構成されます:

  • typ: トークンのタイプ、つまり JWT。
  • alg: 使用される署名アルゴリズム、例えば RS256 や ES384。
  • kid: JWT を保護するために使用されたキーを示すヒント。

ペイロード

ペイロードには、エンティティ(通常はユーザー)に関する声明と追加データを含むクレームが含まれます。たとえば、ID トークンには次のクレームが含まれる場合があります:

署名

署名は、JWT の送信者が詐称ではなく、メッセージが改ざんされていないことを確認するために使用されます。署名済み JWT を使用する場合、トークンの完全性を保証するためにトークン署名を検証する必要があります。あなたの API を保護するための JWT トークンの検証方法 に関するこのガイドを参照してください。

非対称暗号化とは何ですか?

非対称暗号化、別名公開鍵暗号化は、コンピューターセキュリティや暗号化における基本的な概念で、関連するキーのユニークなペアである公開鍵と秘密鍵を使用します。

公開鍵と秘密鍵の定義

  • 公開鍵: 公開鍵は、その名の通り、オープンに共有するために設計されています。JWT や類似システムのコンテキストでは、公開鍵は暗号化ではなく署名の検証に使用されます。データが秘密鍵で署名され、受信者が対応する公開鍵を所有している場合、データが確かに秘密鍵の所有者によって署名されたものであり、送信中に改ざんされていないことを確認できます。
  • 秘密鍵: 対照的に、秘密鍵は、その正当な所有者のみに知られているべき厳重に守られた秘密です。JWT のコンテキストでは、秘密鍵は誰もが対応する公開鍵を使って検証できるデジタル署名を作成するために使用されます。

このユニークな鍵の配置は、デジタル世界における安全なデータ送信とユーザー認証メカニズムの基礎を形成します。詳細については、このブログ記事 をチェックしてください。

人気のある JWT 署名キーアルゴリズム: RSA vs EC

RSA (Rivest-Shamir-Adelman) および EC (Elliptic Curve) アルゴリズムは、非対称暗号化において最も一般的に使用される「数学的関数」です。

開発者として、認証フレームワークおよびその JWT を扱う際に、これらのアルゴリズムのどちらを選ぶかという選択がしばしば提示されます。しかし、どちらを選ぶべきなのでしょうか?それぞれの長所と短所について詳しく見ていきましょう。

RSA 署名アルゴリズム (例: RSASHA256)

  • 長所:
    1. 広範なサポート: RSA はさまざまなプラットフォームやライブラリで広くサポートされており、さまざまな環境での互換性が保証されています。
    2. 長い実績: RSA は信頼性のあるセキュリティを持つ長い歴史を持ち、そのアルゴリズムは暗号コミュニティによく理解されています。
  • 短所:
    1. キーサイズ: RSA キーは、同じレベルのセキュリティを達成するために EC よりも長く、大きなトークンサイズと計算上のオーバーヘッドが増加します。
    2. パフォーマンス: RSA の操作は EC よりも遅くなりがちで、高トラフィックのアプリケーションではデメリットとなる可能性があります。

EC 署名アルゴリズム (例: ECDSASHA384)

  • 長所:
    1. 効率性: EC は RSA に比べて優れたパフォーマンスを誇り、リソース制約のあるまたは高トラフィックのアプリケーションに最適です。
    2. コンパクトなキーサイズ: EC キーは同等のセキュリティレベルを提供しながら RSA の対応キーよりもはるかに短いです。これにより、ストレージとネットワークの要件が減少し、暗号操作が加速されます。
    3. セキュリティ: EC は、その背後にある楕円曲線に基づく複雑な数学により、ブルートフォース攻撃に対して堅牢なセキュリティを提供することで高く評価されています。
  • 短所:
    1. 限られたサポート: 一部の古いシステムやライブラリでは、EC サポートが包括的でない可能性があり、互換性の問題を引き起こす可能性があります。例: Cloudflare Zero Trust は EC 署名トークンをサポートしていません。
    2. 複雑さ: EC の実装は、関連する数学的複雑さのため、より複雑になる可能性があります。

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

Logto は常に最高のセキュリティと柔軟性の基準を守り、常に最新かつ性能の良いソリューションを核として使用する傾向があります。EC は堅牢なセキュリティと計算効率の両方を提供し、現代の認証および認可のニーズに最適です。したがって、EC は私たちのプロダクトの初期段階以来、デフォルトの署名キーアルゴリズムとなっています。

しかし、EC 署名トークンが一部のサードパーティシステムやフレームワーク、特にレガシーなものと互換性がないことも認識しています。したがって、秘密鍵を回転させることで JWT 署名キーアルゴリズムを変更する機能を導入しました。

秘密鍵を回転させるための Logto コンソール UI のスクリーンショット

したがって、サードパーティプラットフォームに接続できない問題に直面している場合、サポートされていない JWT 署名アルゴリズムが原因である場合は、今すぐ回転して新しい秘密鍵に RSA アルゴリズムを選択する時です。

この機能はまた、長期的なキーの露出や妥協に関連するリスクを軽減するのに役立ちます。定期的に秘密鍵を回転させることは、組織のセキュリティ戦略の基本的な実践であるべきであり、Logto はこれを強く推奨します。

まとめ: 一般的に使用される JWT 署名アルゴリズム: RSA と EC

JWT トークンに署名することは、送信されるデータの完全性と信頼性を保証します。署名アルゴリズムの選択は、アプリケーションのセキュリティ、パフォーマンス、および互換性に重大な影響を与える可能性があります。

RSA と EC の両方のアルゴリズムは暗号学で重要で人気のあるアルゴリズムです。これらのアルゴリズムの長所と短所、ならびに背後にある数学的原則を理解することは、認証および認可フレームワークと連携させるためにアプリケーションにとってより良い決定を行うのに役立ちます。

Logto は引き続き、より安全で堅牢なユーザー体験を提供するために努力します。