使い方
- サービスの2段階認証のページにある秘密鍵を入力欄に入力するか、そのQRコードが持つ otpauth:// のテキストを貼り付けます。表示を押すと、入力内容を確認できます。
- サービスが指定するハッシュ、桁数、期間を選びます。多くのサービスは、Key URI Format の既定値を使います。SHA-1、6桁、30秒です。
- カウンターを使うサービスでは、カウンターベース(HOTP)を選び、カウンターを入力します。カウンター + 1で進みます。
- 残り時間がなくなる前に現在のコードを入力します。お使いの機器の時計が少しずれている場合は、前のコードと次のコードも確認してください。
コードの作り方
HOTP(RFC 4226)は、秘密鍵とカウンターを取り、カウンターの HMAC をハッシュで作り、その4バイトを取り出します(動的切り捨て)。その4バイトが示す数を、10の桁数乗で割った余りが、コードになります。
TOTP(RFC 6238)は、時刻から作るカウンターを使う HOTP です。Unix 時刻を秒で取り、期間で割って切り捨てたものです。コードは期間ごとに新しく始まるため、両方の側で時計が正確である必要があります。
TOTP = HOTP(key, floor(unix time / period)); HOTP = truncate(HMAC(key, counter)) mod 10^digits
秘密鍵と otpauth:// の URI
秘密鍵は Base32の文字列(RFC 4648)で、A から Z の英字と、2から7の数字からなります。スペースは無視され、末尾のパディングは省けます。その範囲にない文字を含む秘密鍵や、ありえない長さの秘密鍵は拒否されます。
otpauth:// の URI(Google の Key URI Format)は、種類、ラベル、秘密鍵のほか、任意で発行者、ハッシュ、桁数、期間、カウンターを持ちます。足りない設定は、その形式の既定値になります。SHA1、6桁、30秒、カウンター0です。
このページの確認方法
コードは、RFC 4226の付録 D のテスト値(カウンター 0から9)と、RFC 6238の付録 B のテスト値(8桁で、SHA-1、SHA-256、SHA-512の6回分)に対して検証されています。HMAC はお使いのブラウザの SubtleCrypto で計算されます。
例:RFC 6238のテスト用の秘密鍵
RFC のテスト用の秘密鍵は、テキスト12345678901234567890で、Base32では GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ です。Unix 時刻59、期間30秒で、TOTP のステップ1は、SHA-1の8桁のコード94287082になります。
同じステップを6桁で見ると287082になります。これは RFC 4226のカウンター1のコードで、8桁の値の末尾6桁です。
よくある質問
秘密鍵やコードは、サーバーに送られますか?
いいえ。コードはお使いのブラウザの中で計算され、ページは秘密鍵やコードを含むリクエストを送りません。何も保存されず、再読み込みすると、どちらも消えます。
実際のアカウントの秘密鍵を、ここに貼り付けてもよいですか?
信頼できるページで、ほかの人が画面を見られない場合だけにしてください。実際のアカウントには、認証アプリが通常の置き場所です。日常的に使う秘密鍵を保管するためです。このページは、ご自身のツールや、一度だけ必要なコードに向いています。
なぜコードは30秒ごとに変わるのですか?
時刻ベースのコード(TOTP)は、Unix エポックからの期間の数を使うため、期間ごとに新しいコードが始まります。残り時間の表示は、現在のコードがあとどれくらい有効かを示します。
コードが、サービスのアプリのコードと一致しないのはなぜですか?
サービスが示す秘密鍵(Base32のみ)、ハッシュ、桁数、期間を確認してください。次に、時刻ベースのコードは時計に依存するため、お使いの機器の時計が正しいかを確認してください。前後のコードは、小さな時計のずれを確かめるのに役立ちます。
どのハッシュを選ぶべきですか?
サービスが示すものを選んでください。SHA-1は RFC 4226の HOTP と otpauth の形式の既定値です。RFC 6238では、TOTP に SHA-256と SHA-512も使えます。
TOTP と HOTP の違いは何ですか?
TOTP は時刻を使うため、コードは期間ごとに変わります。HOTP は、使うたびに進むカウンターを使うため、カウンターが変わるまでコードは同じままです。
otpauth:// のテキストは何をするのですか?
2段階認証の鍵の設定を、Key URI Format で持ちます。通常は QR コードの中にあります。ここに貼り付けると、秘密鍵、ハッシュ、桁数、期間、カウンターが入力されます。
出典
- RFC 4226:HOTP、HMAC ベースのワンタイムパスワードのアルゴリズム(英語)
- RFC 6238:TOTP、時刻ベースのワンタイムパスワードのアルゴリズム(英語)
- RFC 4648:Base16、Base32、Base64のデータ符号化(英語)
- Google Authenticator:Key Uri Format(英語)
- MDN:SubtleCrypto.sign()(英語)
数値と文章の最終確認日:2026年11月10日火曜日。