認証・ID管理

TOTP(Time-based One-Time Password) とーとぷ

ワンタイムパスワード二要素認証多要素認証認証アプリHMACRFC 6238
TOTPって何? Google Authenticatorで出てくる6桁の数字と関係ある?

簡単に言うとこんな感じ!

そう、まさにそれだよ!TOTPは「今この瞬間だけ使える6桁のパスワード」を自動生成する仕組みなんだ。30秒ごとに番号が変わるから、盗み見されても即使えなくなる。銀行の「ワンタイムパスワード」と同じ発想で、スマホアプリが時刻をもとに計算してくれるってこと!


TOTPとは

TOTP(Time-based One-Time Password) とは、「現在時刻」と「あらかじめ共有した秘密鍵」を組み合わせて、短時間だけ有効な使い捨てパスワードを生成する認証方式です。Google AuthenticatorやMicrosoft Authenticatorなどの 認証アプリ が採用しており、ログイン時にIDとパスワードに加えて入力する6桁の数字がまさにTOTPです。

TOTPが生まれた背景には、パスワード単体の脆弱性 があります。固定パスワードは一度漏れたら何度でも悪用されますが、TOTPは30秒ごとに新しいコードが生成されるため、たとえ盗み見されても次の30秒後には無効になります。これにより 二要素認証(2FA) の「知っていること(パスワード)+持っていること(認証アプリ)」という二重の壁を実現できます。

ビジネスの現場では、社内システムやクラウドサービスへのログイン強化策として急速に普及しています。設定はQRコードをスキャンするだけで完了するため、ハードウェアトークン に比べてコストがかからず、スマートフォンさえあれば運用できる手軽さも大きな魅力です。


TOTPの仕組みと構造

TOTPは3つの要素を組み合わせて動作します。

要素内容具体例
秘密鍵(シークレット)サーバーとアプリが共有する文字列QRコードに埋め込まれる
現在時刻(Unixタイム)1970年1月1日からの経過秒数30秒単位に丸める
HMAC-SHA1秘密鍵と時刻から数値を計算するアルゴリズム結果の一部を6桁に切り出す

生成の流れは次のとおりです。

① QRコードをスキャン → 秘密鍵をアプリに保存
② アプリが「現在時刻 ÷ 30秒」の値(タイムステップ)を計算
③ 秘密鍵 + タイムステップ を HMAC-SHA1 で計算
④ 計算結果を切り詰めて6桁の数字を生成
⑤ サーバーも同じ計算をして、一致したら認証成功!

覚え方:「時計とカギで金庫を開ける」

TOTPを覚えるなら 「時計(Time)とカギ(秘密鍵)」 を思い浮かべてください。銀行の金庫は「カギ+時限スイッチ」で開きます。TOTPも同じで、正しいカギ(秘密鍵)と正しい時間(現在時刻)が揃わないと扉が開きません。

有効期間と時刻ずれの許容

項目標準値補足
コード有効期間30秒RFC 6238 の規定
許容する時刻ずれ±1ステップ(±30秒)スマホの時刻同期ずれに対応
コード桁数6桁(推奨)8桁にも拡張可能
アルゴリズムHMAC-SHA1SHA-256/512 も利用可能

歴史と背景

  • 1980年代:ワンタイムパスワード(OTP)の概念が登場。S/KEY方式(カウンターベース)が先行して開発される
  • 2005年頃:OATH(Open Authentication)コンソーシアムが設立。OTPの標準化を推進
  • 2011年HOTP(HMAC-based OTP) がRFC 4226として標準化。カウンターベースのOTPが公式規格に
  • 2011年:HOTPを時刻ベースに発展させた TOTP が RFC 6238 として標準化
  • 2012年頃:Google Authenticatorがオープンソース化。TOTP対応アプリが一気に普及
  • 2020年代:クラウドサービスのセキュリティ強化ニーズが高まり、TOTPを使った2FAが事実上の標準に。GitHub・AWS・Slackなど主要サービスが対応
  • 現在:パスキー(FIDO2)の台頭でTOTP以外の選択肢も増えつつあるが、シンプルさから依然広く採用される

HOTPとTOTPの違い、そして関連技術の比較

TOTPはHOTPを進化させた規格です。両者の違いと他のOTP方式との比較を整理します。

OTP方式の比較マップ HOTP RFC 4226 ・カウンター(回数)ベース ・使うたびに番号が増える ・時刻同期が不要 ・ズレが起きると再同期必要 ・有効期限なし(使うまで有効) ・利用例: 一部のハード トークン TOTP ★ RFC 6238 ・時刻ベース(30秒ごと) ・スマホアプリで生成 ・時刻同期が必要 ・導入コストが低い ・30秒で自動失効 ・利用例: Google Auth / Microsoft Auth など FIDO2 / パスキー W3C / FIDO Alliance ・公開鍵暗号ベース ・フィッシング耐性が高い ・生体認証と連携 ・OTPの入力が不要 ・対応デバイスが必要 ・利用例: iCloud Keychain / Windows Hello ← シンプル・普及率高い      フィッシング耐性・安全性高い →

TOTPの弱点とフィッシング対策

TOTPは強力ですが、フィッシングサイト には注意が必要です。偽サイトに誘導されてコードを入力してしまうと、30秒以内に悪用されるリスクがあります。この弱点を克服するのがFIDO2/パスキーです。

脅威TOTPFIDO2/パスキー
パスワード漏洩✅ 防げる✅ 防げる
SIMスワップ✅ 防げる(SMS OTPより安全)✅ 防げる
フィッシング⚠️ 30秒以内に悪用される可能性✅ ドメイン検証で防げる
導入コスト✅ 低い(アプリのみ)⚠️ 対応デバイスが必要

関連する規格・RFC

規格・RFC番号内容
RFC 6238TOTPの標準仕様。時刻ベースのOTP生成アルゴリズムを定義
RFC 4226HOTPの標準仕様。TOTPの基礎となるカウンターベースOTP
RFC 2104HMAC(Hash-based Message Authentication Code)の定義。TOTPの計算に使用
RFC 6287OCRA(OATHチャレンジレスポンス)アルゴリズム。OTPの拡張仕様

関連用語

  • 二要素認証(2FA) — パスワードに加えてもう一つの認証要素を組み合わせるセキュリティ手法
  • 多要素認証(MFA) — 2つ以上の異なる認証要素を組み合わせる認証方式
  • HOTP — カウンターベースのワンタイムパスワード方式。TOTPの前身
  • FIDO2 / パスキー公開鍵暗号を使ったフィッシング耐性の高い次世代認証規格
  • HMAC — 秘密鍵とハッシュ関数を組み合わせたメッセージ認証コード。TOTPの計算基盤
  • シングルサインオン(SSO) — 一度のログインで複数サービスに認証を通す仕組み
  • 認証アプリ — Google AuthenticatorやMicrosoft AuthenticatorなどTOTPを生成するスマホアプリ
  • SMS認証 — SMSでワンタイムパスワードを送る方式。TOTPより利便性は高いがSIMスワップ攻撃に弱い