用語辞典11分で読める

ワンタイムパスワード(OTP)とは:TOTP/HOTP/SMSの違いと限界

ワンタイムパスワード(OTP)は、一度きり・短時間だけ有効な使い捨てコードです。TOTP・HOTP・SMSの違い、パスワード漏洩に強い理由、中間者型フィッシングでは突破されうる限界を解説します。

本文を読む
公開日
更新日
目次

ワンタイムパスワード(OTP)は、一度きりで使い捨てのコードです。種類ごとの違いと、意外と知られていない限界(フィッシングには突破されうる)を整理します(攻撃手順は載せません)。

種類:TOTP / HOTP / SMS-OTP

「使い捨てコード」とひとくくりにされがちですが、作られ方で3種類に分かれます。

TOTP(時刻ベース)

認証アプリが秘密の種+現在時刻から計算。約30秒で切り替わる。オフラインで動く。

HOTP(カウンタ)

時刻でなく“回数(カウンタ)”で進む。押すたびに次のコード。ハードトークン等で使用。

SMS-OTP

SMSでコードを送る。手軽だがSIMスワップ・中継に弱く、最も脆い方式。

OTPの主な3方式。強さは『偽サイトに渡してしまえるか』でほぼ決まる。

いずれも「一度きり・短命」という性質は同じで、固定パスワードが漏れてもそのコード自体は再利用しにくいのが強みです。特にTOTPは通信を介さずアプリ内で計算するため、SMSのような横取り経路がありません。

強みと限界:偽サイトに入力すると盗まれる

OTPは固定パスワードの弱点を補いますが、万能ではありません。決定的な限界は「人がコードを読んで打ち込む」点にあります。

OTPが効く場面

  • パスワードの漏洩・使い回しによる乗っ取りを止める
  • 盗み見られても短時間で無効になり再利用されにくい
  • 認証アプリのTOTPはオフラインで動き、SMSより横取りに強い

OTPが破られる場面

  • 中間者型フィッシング(AiTM):偽サイトがOTPを本物へ中継して即ログイン
  • SIMスワップ:電話番号を乗っ取りSMS-OTPを横取り
  • 根本原因=コードは人が偽サイトに渡せてしまう(=ドメインに紐づかない)

受け取り方による違い

同じ「ワンタイムパスワード」でも、コードがどこで作られ、どの経路で届くかで弱点が変わります。

方式コードが作られる場所届く経路主な弱点
認証アプリ(TOTP)自分のスマホの中届かない(端末内で計算)偽サイトへの入力、スマホ紛失時の復旧
ハードウェアトークン専用の小さな機器届かない(画面に表示)偽サイトへの入力、機器の紛失
SMSサービスのサーバー携帯電話網偽サイトへの入力、SIMスワップ、SMSの傍受
メールサービスのサーバーメール偽サイトへの入力、メールアカウントの乗っ取り

どの方式にも共通する弱点が「偽サイトへの入力」です。米国国立標準技術研究所(NIST)の認証ガイドライン SP 800-63B(2025年8月の第4版)は、手で入力するワンタイムパスワードはフィッシング耐性を持てないとし、SMSなど電話網を使う方式を「制限付き」の扱いにしています。米国のサイバーセキュリティ・インフラストラクチャセキュリティ庁(CISA)も2024年12月、SMSを2つ目の要素に使わないよう勧めています。

2FA・2段階認証・パスキーとの言葉の関係は、二要素認証(2FA)とはの比較表にまとめています。

TOTPのしくみ:QRコードの中身が秘密の値

認証アプリを設定するときに読み取るQRコードには、サービスとアプリが共有する秘密の値(シークレット)が入っています。アプリはこの値と現在時刻からコードを計算し、サービスも同じ計算をして一致するかを確かめます。

  • 時間の区切りは、規格(RFC 6238)の推奨では30秒
  • 通信の遅れを考えて、サービスは1つ前の区切りのコードまで受け付けることが多い(規格の推奨は最大1区切り)
  • カウンタ式のHOTP(RFC 4226)は、ボタンを押すたびなどに回数が進む

この仕組みから、QRコードやシークレットの文字列を持っている人は、同じコードを作れることが分かります。設定画面のスクリーンショットをクラウドやチャットに残すのは、パスワードを書き残すのと同じです。

具体例:ネットバンキングの不正送金

2023年、日本ではネットバンキングの不正送金が急増しました。金融庁によると、2023年1月から11月までの被害は5,147件、約80.1億円(12月8日時点)で、いずれも過去最多でした。手口は、銀行を装ったメールやSMSで偽サイトへ誘導し、ネットバンキングのIDやパスワード、ワンタイムパスワードなどの情報を盗んで不正に送金するものだと説明されています。

この事例から分かることは2つあります。

  • ワンタイムパスワードを入れていても、偽サイトに入力すれば止められない:コードの有効時間が短くても、入力されたその場で使われれば間に合ってしまいます
  • 防ぐ場所は「入力する前」:金融機関は、IDやパスワードをメールやSMSで尋ねないとしています。メールやSMSのリンクから開いた画面でコードを入力しないことが、利用者にできる最も確実な対策です

その後、証券会社や銀行では、偽サイトでは成立しないパスキーなどの認証を必須にする動きが進んでいます(パスキーとは)。

自分のアカウント・サービスで確認する方法

1

SMSで受け取っているアカウントを認証アプリへ移す

メール、パスワードマネージャー、GitHub、クラウドなど重要なアカウントの2FA設定を開き、SMSになっていれば認証アプリ(TOTP)を追加して優先にする。パスキーが使えるならパスキーも足す。GitHubの手順は GitHubの2段階認証の設定 で解説している。

2

機種変更とスマホ紛失に備える

認証アプリが別の端末へ移せる設定(アプリのバックアップや移行機能)になっているかを確認する。各サービスのリカバリーコードは、パスワードマネージャーなどスマホとは別の場所に保存する。

3

QRコードとシークレットを残していないか確かめる

設定時のQRコードのスクリーンショットや、シークレットの文字列を写真フォルダ・クラウド・チャットに残していないかを探し、残っていれば削除する。

4

サービスを作る側は、検証の条件を見直す

コードの検証には失敗回数の制限をかける(6桁のコードは総当たりが現実的なため)。同じコードは有効時間内でも1回しか受け付けない。受け付ける時刻のずれは1区切り程度に絞る。管理者アカウントには、ワンタイムパスワードより強いパスキーを用意する。

当サイトの視点:OTPは途中の段階で、目指すのはパスキー

OTPは「パスワードだけ」から抜け出す優れた第一歩です。実際、SMSでもTOTPでも、入れるだけで乗っ取りの大半は止まります。ただし当サイトは、OTPを最終的な形ではなく途中の段階と位置づけます。中間者型フィッシングが現実の脅威である以上、目指すのは署名がドメインに紐づき、原理的に偽サイトへ出せないパスキー(FIDO2)です。

優先順位は明快で、まず全アカウントにOTPを入れ、重要なアカウント(メール・ドメイン・決済)から順にパスキーへ切り替えます。「注意して偽サイトを見破る」ことに頼らないのが正しい方向です。

出典(一次情報)

  • IETF RFC 6238「TOTP: Time-Based One-Time Password Algorithm」 — rfc-editor.org(30秒の時間区切り、通信の遅れとして許す範囲は最大1区切り)
  • IETF RFC 4226「HOTP: An HMAC-Based One-Time Password Algorithm」 — rfc-editor.org(カウンタ式のワンタイムパスワード、失敗回数の制限)
  • NIST SP 800-63B-4(2025年8月) — pages.nist.gov(手入力のOTPはフィッシング耐性を持てない、電話網を使う方式は制限付き、同じOTPは1回だけ受け付ける、失敗回数の制限)
  • CISA「Mobile Communications Best Practice Guidance」(2024年12月) — cisa.gov(PDF)(SMSを2つ目の要素に使わない)
  • 金融庁「フィッシングによるものとみられるインターネットバンキングによる預金の不正送金被害が急増しています。」 — fsa.go.jp(2023年1〜11月の件数・被害額、ワンタイムパスワード等を盗む手口)

次に読む

よくある質問

Qワンタイムパスワードと普通のパスワードは何が違いますか?
A

普通のパスワードは変えない限りずっと同じ(固定)で、一度漏れると変更するまで悪用され続けます。ワンタイムパスワード(OTP)は一度きり・短時間だけ有効な使い捨てで、使えばすぐ無効になります。だから盗み見られても再利用されにくく、固定パスワードの弱点(漏洩・使い回し)を補います。多くのサービスで、パスワードに“もう一つの証明”として足す二要素認証の一手段として使われます。

QSMSで届くワンタイムパスワードは安全ですか?
A

パスワードだけよりは確実に強いですが、OTPの中では最も弱い部類です。SMSはSIMスワップ(電話番号の乗っ取り)で横取りされたり、偽サイトが中継する中間者型フィッシングで抜かれたりします。可能なら認証アプリのTOTPへ、さらに重要なアカウントはパスキーへ移行するのが安全です。

Q認証アプリのコードはなぜ30秒ほどで変わるのですか?
A

それがTOTP(時刻ベースのワンタイムパスワード)だからです。アプリとサービスが同じ秘密値(シークレット)と現在時刻から、同じコードを一定間隔(多くは30秒)ごとに計算します。時間が来ると古いコードは無効になり、新しいコードに切り替わります。短命にすることで、盗み見られても使える時間をごく短く抑えているのです。

Qワンタイムパスワードを偽サイトに入力してしまったらどうすればいいですか?
A

そのコードはすでに使われたと考え、メールやSMSのリンクではなく、ブックマークか公式アプリからログインしてパスワードを変更します。続けて、ログイン中の端末やセッションの一覧、登録メールアドレス・電話番号・送金先などが勝手に変えられていないかを確認します。銀行や証券会社の場合は、すぐにその会社の窓口へ連絡してください。

Q認証アプリのコードを入れてもエラーになるのはなぜですか?
A

よくある原因は、スマホの時刻のずれです。TOTPは現在時刻からコードを計算するため、端末の時計がずれていると、サービス側と違うコードになります。スマホの日付と時刻を『自動設定』にしてから、新しく表示されたコードで試してください。

Qワンタイムパスワードとパスキーはどちらが安全ですか?
A

パスキーです。ワンタイムパスワードは人がコードを読んで入力するため、偽サイトに入力すればそのまま中継されます。米国のNISTも、手で入力するワンタイムパスワードはフィッシング耐性を持てないとしています。パスキーは署名がサイトのドメインに紐づくので、偽サイトではログインが成立しません。