定義
ワンタイムパスワード(OTP)は、ログインや送金のたびに新しく生成され、たった一度しか使えない一時的なパスワードです。決められた短い時間が過ぎるか、一度入力すると効力が失われるので、誰かに盗み見られても再び悪用されることはありません。
なぜ固定のパスワードより安全なのでしょうか?
私たちがふだん使うパスワードは、玄関の鍵とよく似ています。鍵の形は変わらないので、誰かが鍵を盗んで複製したり、パスワードを盗み見たりすれば、いつでも玄関を開けて入ってこられます。どんなに長くて複雑なパスワードを作っても、一度漏れてしまえばおしまいです。
でもワンタイムパスワードは、ドアを開けるたびに鍵穴の形と鍵が同時に変わる魔法の錠前です。今使ったパスワードをハッカーが画面越しに盗み見たとしても、すでに一度使われて破棄された番号はまったく役に立ちません。
さらに、たいていは30秒から1分ほどのとても短い有効時間が過ぎると自動的に消えます。たとえ途中で番号が漏れても、時間がたてば無効になるので、あとから使い回すことはできません。
サーバーと自分のスマホは、ネットなしでどうして同じ番号がわかるの?
OTPのトークン機器やスマホの認証アプリを使うとき、インターネットがつながっていなくても番号がぴたりと合うのを見て、不思議に思ったことがあるかもしれません。銀行のサーバーと自分のスマホがリアルタイムでやり取りしなくても同じ番号を作り出せる秘密は、正確な時計と秘密の数式にあります。
パスワードを最初に登録するとき、銀行のサーバーと自分のスマホは、誰も知らない同じ「秘密の鍵(シークレットキー)」を分け合います。そして2つの機器は、同じ数式(アルゴリズム)に「現在時刻」と「シークレットキー」を入れて、それぞれ計算します。
世界標準時を基準に、同じ時刻に同じ数式で計算するので、通信をしなくても30秒ごとに同じ6桁の番号が両方の画面に表示されるのです。この方式を、時間ベースのワンタイムパスワード(TOTP)と呼びます。
もう少し正確に言うと — 万能の盾ではありません
ワンタイムパスワードはパスワード流出事故を防ぐすぐれた技術ですが、あらゆるサイバー攻撃を完全に防ぐ万能の鍵ではありません。ワンタイムパスワード自体が頑丈でも、人のミスにつけ込む詐欺の手口には弱いことがあるからです。
代表的な例が、偽の銀行サイトを作っておいて、ユーザー自身にOTPの番号を入力させるフィッシング攻撃です。ユーザーが偽サイトに番号を入れた瞬間、ハッカーがその番号をリアルタイムで横取りし、有効時間の30秒以内に本物の銀行サイトへすばやく入力してしまうことがあります。
ですからOTPを使うときも、アクセスしているサイトのURLが本物かどうか必ず確認しましょう。また、SMSで届く認証コードは、スマホのマルウェアや通信の傍受のリスクがあるため、専用のOTPアプリのほうが安全だと評価されています。ただし、OTPアプリの番号もフィッシングで横取りされることがあります。フィッシングにさらに強いのは、アクセスしたサイトのURLを機器自身が確認するセキュリティキーやパスキーの方式です。
よくある誤解
OTPの機器は、インターネットや通信網を通じて銀行のサーバーと常に番号をやり取りしている。
プラスチックのOTPカードやアプリは、通信機能がなくても動作します。サーバーと機器があらかじめ共有したシークレットキーと現在時刻を使って、それぞれ独立に計算し、同じ番号を作る仕組みです。
日常で出会う場面
ネットバンキングで大きな金額を送金するとき、小さなOTPトークン機器に表示された6桁の数字を入力します。
GoogleやGitHubのアカウントにログインするとき、認証アプリに表示される30秒限定の番号を追加で入力します。
つまり ひとことで
ワンタイムパスワードは、毎回新しく作られて一度だけ使い、使ったら捨てるセキュリティの鍵です。よく使われるOTPアプリや機器は、共有されたシークレットキーと現在時刻を組み合わせて番号を作ります(TOTP)。