メインコンテンツへスキップ

TOTPとは

この記事は約 2 分で読めます

TOTP (Time-based One-Time Password) とは、現在の時刻に基づいて生成されるワンタイムパスワードの仕組みです。 Google Authenticator や Microsoft Authenticator などの認証アプリで広く利用されています。通常 30 秒ごとに新しい 6 桁のコードが生成され、パスワードに加えた二段階認証の要素として機能します。 2024 年時点で、 TOTP は最も広く採用されている二段階認証方式であり、 Google 、 GitHub 、 AWS など主要サービスの大半が対応しています。

必須化しても残る三つの前提

利用を義務付ける決定は、設定を終えた人数として測られることが多いが、実際の状態を決めるのはその背後に残る三つの前提である。第一に、一度完了した登録は永続しない。端末を買い替えたとき、機種を変えたとき、アプリを入れ直したときには登録がやり直しになり、その過程では別の手段で本人であることを示す必要が生じる。やり直しの経路が本来の手順より簡単であれば、そこが実際の入口になる。したがって義務付けの効果は、登録が済んでいるかどうかよりも、登録し直すときに何を求めるかに左右される。第二に、符号が短い時間で入れ替わることが防ぐのは、後から使い回されることであって、受け取った直後に使われることではない。同じ期間内であれば同じ符号が有効なので、入力された符号をその場で別の相手が使えば、入れ替わりの速さは働かない。時間で変わる仕組みは、盗まれた符号の寿命を短くするものであり、盗まれる経路そのものをなくすものではない。第三に、求める設定が適用される範囲は、人の一覧と一致しない。画面から入る経路には要求できても、機械同士のやり取りのために別に発行された資格情報や、古い手順のまま残っている入口は、同じ要求の対象にならないことがある。全員に設定させたという状態は、すべての入口で求められているという状態を意味しない。前者は名簿で確かめられるが、後者は入口の側を数え上げないと分からない。

TOTP 生成のフロー

共有秘密鍵
現在時刻 (30 秒単位)
HMAC-SHA1 計算
6 桁コード生成

TOTP の仕組み

TOTP は RFC 6238 で標準化されたアルゴリズムです。サーバーとクライアントが共有する秘密鍵と現在の時刻を入力として、 HMAC-SHA1 でハッシュ値を計算し、そこから 6 桁の数値を抽出します。サーバーとクライアントの時計が同期していれば、同じコードが生成されるため認証が成立します。

具体的な活用シナリオ

よくある誤解は「 SMS 認証と TOTP は同じレベルのセキュリティ」というものです。 SMS 認証は SIM スワップ攻撃や SS7 プロトコルの脆弱性を突かれて傍受されるリスクがあります。 TOTP はデバイス内で完結するため、これらの攻撃に対してはるかに安全です。 NIST (米国国立標準技術研究所) も SMS 認証よりも TOTP やハードウェアキーの使用を推奨しています。

パスワードマネージャーで生成した強力なパスワードに TOTP を組み合わせることで、パスワードが漏洩しても不正ログインを防止できます。 TOTP の秘密鍵はバックアップコードとともに安全に保管しましょう。認証アプリを使うスマートフォンを紛失した場合に備え、バックアップコードを紙に印刷して金庫に保管するか、複数のデバイスに認証アプリを設定しておくことが実務上のベストプラクティスです。

関連用語

この記事は役に立ちましたか?