【てぃーおーてぃーぴー】
TOTP(ワンタイムパスワード) とは?
最終更新:
💡 秘密鍵と時間区間で、同じコードを計算する
共有した秘密鍵と、一定の区間に分けた時刻をもとに一時的な認証コードを計算する方式。アプリとサーバが同じ設定で計算し、コードを検証する。パスワードに加える認証などに使われるが、フィッシングへの耐性はない。
📌 このページのポイント
- Time-based One-Time Passwordの略で、共有秘密鍵と時刻を使う
- 時間区間や桁数をそろえ、アプリとサーバでコードを計算する
- 認証成功後の同じコードは、検証側で再利用を拒否する
- 秘密鍵の保護が必要で、フィッシングも防げるわけではない
アプリとサーバはどうして同じコードを出せるの?
最初に秘密鍵を共有し、時刻を区切る間隔などの設定をそろえるからだよ。両方が時刻から同じ時間区間を求め、秘密鍵と組み合わせて計算する。時刻だけから誰でも同じコードを作れる仕組みではないんだ。
必ず30秒ごとに6桁になるの?
よく使われる構成だけれど、間隔や桁数は設定によるよ。RFC 6238では時間区間の既定値を30秒としている。表示を見た時点で区間の残り時間が少ないこともあるので、見てから必ず30秒間使えるという意味ではないんだ。
一度入力すると、アプリの数字も消える?
同じ時間区間では、アプリが同じ数字を表示し続けることがあるよ。「一度だけ」は検証側の扱いなんだ。認証に成功したコードを、同じ有効期間にもう一度受け入れてはいけない。時計のずれへの許容範囲も検証側で設定するんだ。
パスワードが漏れても、これがあれば安心?
追加の認証として役立つけれど、TOTPにはフィッシングへの耐性はないよ。偽サイトで入力したコードが有効なうちに使われる危険がある。共有秘密鍵が盗まれるとコードを作られるため、鍵の保護も重要なんだ。
スマホをなくした場合はどうするの?
認証アプリを使えなくなると、サービスに入れないことがあるよ。設定時に、そのサービスが用意する復旧手段を確認しておこう。復旧コードや秘密鍵のバックアップを使う場合も、本人確認に関わる情報として安全に管理する必要があるんだ。
まとめ:ざっくりこれだけ覚えればOK!
「TOTP」って出てきたら「共有秘密鍵と時間区間から計算する、一時的な認証コードの方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Time-based One-Time Password」 = 時間ベースのワンタイムパスワード
💬 時刻と秘密鍵から計算するから、サーバとアプリで同じコードが出せるんだよ