【てぃーおーてぃーぴー】

TOTP(ワンタイムパスワード) とは?

最終更新:
💡 秘密鍵と時間区間で、同じコードを計算する

共有した秘密鍵と、一定の区間に分けた時刻をもとに一時的な認証コードを計算する方式。アプリとサーバが同じ設定で計算し、コードを検証する。パスワードに加える認証などに使われるが、フィッシングへの耐性はない。

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

参考資料

← 用語集にもどる