はじめに
従来、多くのアプリやウェブサービスでは、ユーザーがサインインのたびにパスワードを記憶し入力することが求められていました。この負担に加え、ユーザーが弱いパスワードを選んだり、複数のサービスで再利用するため、セキュリティリスクも伴っていました。これらの問題は、トークンベース認証によって解決されます。では、その仕組みを見ていきましょう。
まずは「トークン」というものの意味から確認する。基本的に、トークンとは秘密のパスワード、ドアをノックするような軽い動作、または認証に使われる合言葉など、身元確認のために使われる様々な形態を指す。
例えば、アニメのキャラクターがドアをノックすると、スライド式の扉が開いて顔が現れ、秘密の合言葉(『Joe sent me』など)を待ってから、不審者の侵入を防ぐ仕組みになっている場合がある。合言葉の代わりに、特有のノックのリズム(2回、止め、3回)を用いることもある。
Web上でのトランザクションにおいて、認証トークンは、ログイン、変更、購入、その他の操作時に本人確認を行うための非常に有用なツールです。認証トークンの優れている点は、ログインのように継続的に使われる場合もあれば、過去に公開したオンライン記事で述べたように、追加の手動入力が必要な場合もある点にあります。
トークンはユーザー固有の情報を含む必要がなく、計算やアルゴリズムで生成されるため、ハッカーに対してより安全です。個人の年金番号やその他の個人情報を識別子として利用する従来の方法に比べ、大きな改善と言えます。ペットの名前など、個人情報をパスワードとして用いるユーザーは、攻撃者がソーシャルメディアなどから容易に情報を取得するリスクに晒されます。
ネット上で誰かと会話を始めることは、トークンベース認証に似た仕組みです。裏ではコードが動作し、共通の秘密のパスワードや合意された記号を共有することで認証プロセスを完了するためのトークンを生成します。不正なユーザーが貴社の資源にアクセスするのを、トークンによる身元確認で防ぎます。
トークンは多要素認証(MFA)や、アプリ、API、ウェブサイトを接続するバックエンドプロトコルで利用できます。
テクノロジーの細部にとらわれず、解決すべき問題に目を向けてみよう。不正なユーザーがネットワークに侵入し、データを盗んだりランサムウェアを仕掛けたりしないよう、正当なユーザーに身元確認を求めているのです。トークンはデバイスの秘密鍵に基づいているため、PingIDのようなアプリ、キーフォブ、もしくはパソコンに接続するドングルなどを利用することで、外部からの不正な介入を防げます。手続きが煩雑であれば、競合サービスが選ばれてしまう可能性もあります。大切なのは、ユーザーに摩擦やストレスを与えず、確実に認証できるトークンベースのソリューションを選ぶことです。スムーズに動作すれば、ユーザーは満足し、データも安全に守られます。
テクノロジーにも欠点は存在します。たとえば、運用の自動化によってユーザー体験を向上させ、同時に人員を削減した企業でも、計画や導入が不十分だと状況が悪化する場合があります。顧客の期待が高まる中、認証やその他の自動システムが失敗すると、ユーザーは不満を募らせ、企業は顧客を失いかねません。
ユーザーには、ハードウェアトークン、一時的なパスワード(多くの場合携帯電話で受け取る)、またはJWT標準に基づくソフトウェアトークンなど、様々な方法で認証トークンが提供されます。
安全な方法で、すべてのトークンはユーザーの認証情報やデータを保存します。今日の厳しいデータ保護規制の下では、トークンは情報が正確で改ざんされていないことを確認できる基本的なセキュリティ要件を満たしています。また、ユーザーがパスワードを記憶せずともサインインできるため、体験が向上します。
トークンによる認証は通常、次の4つの段階で行われる:
この方式には、他の認証方法と同様にメリットとデメリットが存在する。
メリット
デメリット
利用ケースを十分に整理・区分してから検討することが肝心です。そうすれば、最適な選択が可能になります。また、システムに最初から組み込むべき重要な要素として、セルフ管理も挙げられます。
サイバー犯罪が高度化する中、管理型サービスプロバイダー(MSP)はセキュリティ戦略や設定を最新の状態に保つ必要があります。フィッシング、ブルートフォース、辞書攻撃など、様々な手法が資格情報を狙っているため、パスワードだけでは認証が不十分となっています。
他の認証方法と組み合わせたトークンベース認証は、先進的なハッカーが盗んだパスワードを悪用するのを防ぐ、より堅固な障壁となります。トークンは、発行元のデバイス(例えば携帯電話やキーフォブ)から取得されるため、非常に安全な認証手法とされています。
認証トークン方式には多くのメリットがある一方で、リスクも存在します。携帯電話に保存されたトークンは便利ですが、デバイスの脆弱性により危険な場合もあります。SMSで送信されると通信中に傍受される恐れがあり、デバイスが紛失または盗難された場合、悪意ある第三者がトークンにアクセスする可能性があります。
とはいえ、単一の認証方式に依存するのは避けるべきです。トークン認証は、二要素認証や多要素認証と組み合わせて使用するのが望ましいです。
ハードウェアトークンは、物理的なデバイスで、一度認証されると、ユーザーが保護されたネットワークにアクセスできるようになります。認証トークンまたはセキュリティトークンとも呼ばれ、二要素認証や多要素認証(2FAまたはMFA)によってセキュリティレイヤーを追加する目的で利用されます。デバイスの所有者は、アクセスしたいサービスやシステムにこれを紐づけます。
優れたユーザー体験と柔軟性を提供するため、ハードウェアトークンは様々な形状やサイズで提供されます。最も一般的なのは、キーフォブやUSB、リモートトークンです。ハードウェアトークンは主に3つのカテゴリに分類されます。
この種類は、JSON形式(RFC 7519)でデータを扱うためのオープンスタンダードです。パーティ間でデータを安全に送信するための、シンプルかつ自由な方法を提供します。JWT標準は、トークンの送受信にJavaScript Object Notation(JSON)オブジェクトを用い、認証やユーザー・アカウント情報の追加送信にも利用されます。
JWTは、URL、POSTパラメータ、またはHTTPヘッダーとして送信され、その小さなサイズゆえに迅速に処理できます。追加のデータベース参照を避けるため、JWTには必要最低限のユーザー情報が含まれています。JWTを検証する際、受け手はサーバーに問い合わせる必要がありません。
JWTは以下の3つのセグメントから構成される:
これは、一回限りのパスワードを生成する、安全なハードウェアまたはソフトウェアのデバイスです。4桁から12桁までの数字からなる個人識別番号(PIN)が、最も一般的に利用されている。
ワンタイムパスワードは多くの場合、携帯電話で生成または受信されます。電話番号の所有が確認されると、認証アプリを用いてOTPを生成でき、携帯電話がコードジェネレーターとして機能します。また、OTPはSMSで送信されることもあります。
強固な認証情報を組み合わせることで、OTPトークンは既存のユーザー名・パスワードシステムを補完します。OTPトークンは、プロバイダーに応じて同期的または非同期的にPINを生成します。
同期型トークンは、秘密鍵と現在の時刻を用いて一回限りのパスワードを生成します。一方、非同期型では、サーバーが発するチャレンジに対し、トークンが正しい応答を返すチャレンジレスポンス認証方式(CRAM)を用います。
このトークンタイプは、貴社のサービスにアクセスを要求するアプリの一意の識別子として機能します。その後、アプリは貴社によって発行されたAPIトークンを用いてサービスにアクセスします。保存されたトークンと照合することで認証およびアクセスが行われます。場合によってはセッションIDが用いられることもありますが、これは特殊なケースです。
APIトークンは、HTTP経由でユーザー名・パスワードの組み合わせを送信するよりも安全な代替手段として注目されており、OAuth2は今日最も広く採用されているAPIセキュリティ標準の一つです。
最適な認証トークンは状況によって決定されます。貴社のアプリ、要件、利用ケースに応じて、OAuth、SAML、JWT、またはその他の認証トークンが選ばれるべきです。
クラウドサービスにおけるユーザーやセッションの認証プロセスは、Web API向けトークンベース認証と呼ばれます。ユーザーのアプリが認証サービスにリクエストを送り、身元確認後にトークンが発行されると、サービスへのアクセスが可能となります。
REST APIは、低レベルのウェブAPIよりも理解しやすいトークンベース認証の恩恵を受けています。一般的にはオープンスタンダードのJWTトークンが使われ、URL形式で長い文字列と(例えば GET、PUT、または POST の)アクションワードやエンドポイントが含まれます。RESTful APIの仕組みに興味がある場合は、ぜひ詳細を確認してみてください。
多要素認証において、ハードウェアトークンやソフトウェアトークンは、『所有しているもの』として分類され、『知っているもの』であるユーザー名・パスワードの組み合わせに続いて、ユーザーの身元確認に用いられます。
最新情報を購読