ワンタイムパスワード(TOTP)とは?30秒ごとに変わる数字の仕組み

仕様の版:RFC 6238(2011年5月)、RFC 4226(2005年12月)
2段階認証を設定すると、スマートフォンの認証アプリやパスワードマネージャーに、30秒ごとに変わる6桁の数字が表示されるようになります。
この数字は、インターネットにつながっていなくても、サービスと同じ値になるのが特徴です。本記事では、その理由を、仕様(RFC 6238)をもとに解説します。
ワンタイムパスワードとは
ワンタイムパスワードは、一度しか使えない、短い時間で変わるパスワードです。認証アプリが表示する6桁の数字の多くは、TOTP(Time-Based One-Time Password)という方式で作られています。
普通のパスワードは、一度漏れると、変えるまで何度でも使われてしまいます。ワンタイムパスワードは30秒ほどで使えなくなり、一度使った数字も受け付けられないので、盗み見られても被害が広がりにくい作りです。
TOTPは2011年5月に、インターネットの技術を標準にまとめるIETFから、RFC 6238として公開されました。
同じ数字が出る仕組み
サービスと認証アプリが同じ数字を出せるのは、2つのものを共有しているからです。1つは最初の設定のときに受け渡す秘密の鍵、もう1つは現在の時刻にあたります。
仕様の計算は、次の2段階です。
- 現在の時刻(1970年1月1日からの秒数)を、30秒ごとの区切りで数え、何番目の区切りかを出します
- 秘密の鍵と、その区切りの番号から、決まった計算(HMAC)で6桁の数字を作ります
サービスも認証アプリも同じ鍵と同じ時刻を使うため、通信しなくても同じ数字になります。区切りが変わると番号も変わるので、数字は30秒ごとに入れ替わるわけです。
裏を返すと、サービスのサーバーにも、利用者の手元と同じ秘密の鍵が保存されています。サーバーから鍵が漏れれば、攻撃者も同じ数字を作れてしまうので、サービスはこの鍵を厳重に守らなければなりません。サービスに公開鍵しか置かないパスキーとの違いは、パスキーとはで比べました。
TOTPは、先に作られたHOTP(RFC 4226)を元にしています。HOTPは、区切りの番号の代わりに、ボタンを押した回数のような数え上げの値を使う方式でした。TOTPは、この値を時刻に置き換えたものです。
設定のときのQRコードの中身
2段階認証を設定するときに読み取るQRコードには、秘密の鍵が入っています。
QRコードの中身は、otpauth://totp/ で始まる1行の文字列です。サービス名とアカウント名に続けて、secret= のあとに秘密の鍵が書かれています。鍵は英大文字と数字だけで表すBase32という形式です。桁数や区切りの秒数を書かない場合は、6桁、30秒として扱われます。
このQRコードを撮影した人は、誰でも同じ数字を出せてしまうことに注意が必要です。設定の画面のスクリーンショットを残したり、人に送ったりしないでください。QRコードを読み取れないときに表示される英数字の「セットアップキー」も、同じ秘密の鍵です。
時刻のずれと、使い回しへの備え
仕様には、実際に使うときの決まりもあります。
1つ目は時刻のずれです。スマートフォンの時計がずれていたり、数字を入れるまでに区切りが変わったりすると、数字が合いません。そこで仕様は、前後に何区切りまでずれを許すかを、サービス側で決めておくよう求めています。
2つ目は使い回しの禁止です。一度ログインに使えた数字は、同じ区切りの中でも、2回目は受け付けてはいけないと定められています。盗み見た数字をすぐに使われても、ログインできません。
フィッシングには弱い
ワンタイムパスワードにも弱点があります。本物そっくりの偽サイト(フィッシングサイト)に、数字を入れてしまった場合です。
偽サイトは、受け取ったパスワードとワンタイムパスワードを、その場で本物のサイトへ入れます。数字は30秒ほど有効なので、その間に使われればログインされてしまうでしょう。数字そのものには、どのサイトのためのものかという情報が入っていないためです。
デジタル庁の本人確認のガイドラインも、ワンタイムパスワードは、偽サイトが入力を本物のサイトへその場で中継する攻撃には耐えられないと注意しています。フィッシングへの強さを求めるなら、ログイン先のサイトを機械が確かめるパスキーを選んでください。
製品での使われ方
ワンタイムパスワードは、Google AuthenticatorやMicrosoft Authenticatorのような認証アプリのほか、多くのパスワードマネージャーにも保存できます。パスワードマネージャーに保存すると、ログインのときにパスワードに続けてワンタイムパスワードも自動で入力される仕組みです。パスワードと同じ場所に保存したときの考え方は、2段階認証とはで解説しました。
このサイトでは、パスワードマネージャーの1つである1Passwordを例に、次のサービスでワンタイムパスワードを登録する手順を紹介しています。
参考にした一次情報
- デジタル庁「DS-511 行政手続等での本人確認におけるデジタルアイデンティティの取扱いに関するガイドライン」(2025年9月30日)
- RFC 6238「TOTP: Time-Based One-Time Password Algorithm」
- RFC 4226「HOTP: An HMAC-Based One-Time Password Algorithm」
- Google Authenticator「Key Uri Format」
- NIST SP 800-63B Rev.4「Authentication and Authenticator Management」
- 1Password「Use 1Password as an authenticator for sites with two-factor authentication」