TOTP(トーティップ)とは | 意味や読み方など丁寧でわかりやすい用語解説
TOTP(トーティップ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
時限式一次パスワード (ジゲンシキイチジパスワード)
英語表記
TOTP (トーティップ)
用語解説
TOTP(Time-based One-Time Password)は、時間ベースのワンタイムパスワードを生成するための技術標準である。これは、ユーザーの認証プロセスにおいてセキュリティを大幅に向上させる多要素認証(MFA)の一種として広く利用されている。従来のパスワード認証は、パスワードの漏洩や推測、使い回しといったリスクに常に晒されており、これら単一の要素だけでは安全な認証が困難である。TOTPは、パスワードのような「知っている情報」に加えて、「持っている情報」(スマートフォンなどのデバイス)を使って生成される一時的なパスワード「ワンタイムパスワード」を加えることで、認証の安全性を高める仕組みを提供する。具体的には、一定期間(通常30秒)ごとに使い捨てのパスワードを生成し、その短い有効期限が過ぎれば自動的に無効になるため、たとえワンタイムパスワードが第三者に知られても、時間切れによってその価値を失い、悪用されるリスクを大幅に低減できる点が特徴である。
TOTPの詳細な動作原理を理解するためには、いくつかの重要な要素を把握する必要がある。まず、TOTPの生成には、サービス提供者とユーザーのデバイス間で事前に共有された「共有シークレット」(秘密鍵)が不可欠である。この共有シークレットは、初期設定時によくQRコードをスキャンする形でユーザーのTOTPアプリケーション(Google AuthenticatorやAuthyなど)に登録される。この時点で、サービス側とユーザーデバイス側は、同じ秘密情報を保持している状態になる。
次に、TOTPは「時間」の要素を利用する。現在のUTC(協定世界時)に基づくタイムスタンプを一定の時間間隔(典型的には30秒)で区切り、これをカウンタのように利用する。例えば、0秒から29秒までは同じタイムスタンプ値を使い、30秒から59秒までは次のタイムスタンプ値を使う、といった具合である。このタイムスタンプと前述の共有シークレットを組み合わせ、HMAC(Hash-based Message Authentication Code)と呼ばれるメッセージ認証コードのアルゴリズムを用いて計算を行う。HMACは、秘密鍵とメッセージ(この場合はタイムスタンプ)からハッシュ値を生成する関数であり、メッセージが改ざんされていないことと、秘密鍵を知る者によって生成されたことを検証できる特性を持つ。TOTPでは、一般的にHMAC-SHA1、HMAC-SHA256、HMAC-SHA512といったハッシュ関数が利用されることが多い。
このHMAC計算によって生成された長いバイト列は、そのままではパスワードとして利用しづらいため、特定のアルゴリズムに従って「切り詰め」(truncation)処理が施される。この切り詰め処理により、最終的に人間が入力しやすい6桁または8桁の短い数字列が生成される。これが、ユーザーのTOTPアプリケーションに表示されるワンタイムパスワードとなる。
認証フローは以下のようになる。ユーザーがウェブサービスやアプリケーションにログインを試みる際、まずユーザー名と通常のパスワードを入力する。その次に、TOTPの入力を求められる。ユーザーは自身のスマートフォンなどでTOTPアプリケーションを開き、表示されている現在のワンタイムパスワードを確認し、それをサービス側に送信する。サービス側では、ユーザーのIDに対応する共有シークレットをデータベースから取得し、自身の現在のタイムスタンプと組み合わせて、ユーザーデバイス側と同じ計算ロジックでワンタイムパスワードを生成する。このサービス側で生成されたワンタイムパスワードと、ユーザーから入力されたワンタイムパスワードが一致すれば、認証が成功する。
ここで重要なのは、サービス提供者のシステムとユーザーのデバイスの時刻が正確に同期していることである。もし大きく時刻がずれている場合、互いに異なるタイムスタンプを用いて計算を行うため、生成されるワンタイムパスワードが一致せず、認証失敗となる可能性がある。そのため、TOTPアプリケーションは通常、正確な時刻情報にアクセスできるように設計されており、またサービス側もNTP(Network Time Protocol)などを用いて正確な時刻を維持している。ただし、数秒程度のずれは許容できるように、現在のタイムスタンプだけでなく、その前後1つ分のタイムスタンプで生成されるワンタイムパスワードも認証時にチェックするなどの対策が取られることもある。
TOTPの利点は多岐にわたる。まず、パスワードが漏洩しても、TOTPがなければログインできないため、フィッシング詐欺やブルートフォース攻撃に対する耐性が大幅に向上する。各パスワードが短期間しか有効でないため、一度使われたパスワードは再利用できず、安全性が高い。また、ワンタイムパスワードの生成にはインターネット接続を必要としないため、オフライン環境でも認証情報を生成できるという利便性も持つ。これは、共有シークレットと時刻情報がデバイス内にあれば、いつでもパスワードを生成できるためである。
一方で、課題も存在する。デバイスの紛失や破損は、TOTPによる認証手段を失うことを意味するため、サービス側は必ずリカバリ手段を提供する必要がある。また、共有シークレットの管理も重要であり、初期設定時にQRコードを読み取る際は、周囲に漏洩しないよう注意が必要である。さらに、近年では、TOTPコード自体をだまし取るような高度なフィッシング攻撃も出現しており、完全に万能なセキュリティ対策ではない点も認識しておくべきである。
TOTPとよく比較される技術にHOTP(HMAC-based One-time Password)がある。HOTPはTOTPと同様に共有シークレットとHMACを使用するが、時間の代わりに「カウンタ」を利用する。認証が成功するたびにカウンタをインクリメントし、次のワンタイムパスワードを生成する。TOTPはHOTPを時間ベースに拡張したものと言える。現代の認証技術では、TOTPは広く普及しており、多くのウェブサービスやアプリケーションで標準的な多要素認証の手段として採用されている。しかし、より高度なセキュリティと利便性を両立させるFIDO2/WebAuthnのような物理的な認証器を利用する方式も進化しており、認証技術は常に進化を続けている。システムエンジニアを目指す者として、これらの認証技術の基礎を理解することは、安全なシステム設計と実装を行う上で不可欠な知識である。