TOTP 2FA QRコードの解説

otpauth:// URIフォーマット、base32シークレット、RFC 6238 TOTPの計算方法に関する技術的な詳細解説。

TOTPとは

TOTP (Time-based One-Time Password、RFC 6238) は、Google Authenticator、Authy、1Password、Bitwarden、その他すべての認証アプリの基となるアルゴリズムです。共有シークレットと現在のUnix時刻を元に、30秒ごとに変化する6桁のコードを生成します。

otpauth URI

otpauth://totp/Issuer:account@example.com?secret=BASE32SECRET&issuer=Issuer&algorithm=SHA1&digits=6&period=30

URIスキームは otpauth://、タイプは totp(もう一つの選択肢はカウンターベースの hotp)、次にラベル、そしてクエリパラメータが続きます。認証アプリはこのURIを解析し、1回のスキャンでユーザーのバウルトに追加します。

ラベル

任意の形式:Issuer:account@example.comIssuer プレフィックスはクエリパラメータ issuer と重複しますが、ほとんどのアプリは両方を認識します。

シークレット

Base32エンコードされたバイト列(A-Zと2-7、パディングなし)です。最低128ビットが推奨されており、ほとんどのサーバーは160ビット(32文字のbase32)を使用します。シークレットはURLエンコードしないでください。そのままbase32形式で使用してください。

アルゴリズム、桁数、周期

algorithm:SHA1(デフォルト、すべての環境で対応)、SHA256、またはSHA512。digits:6(デフォルト)または8。period:30秒(デフォルト)または60。理由がない限りデフォルト値をそのまま使いましょう。一部の認証アプリは非デフォルトのオプションに対応していません。

コードの計算方法

30秒ごとに、認証アプリは次を実行します:HMAC-SHA1(secret, floor(unix_time / 30))、HMACの下位4ビットを動的オフセットとして取得、そのオフセットから4バイトを読み取り、31ビットにマスクして、106のモジュロ演算で6桁のコードを生成します。

Abundera QRで生成する

TOTPジェネレーターを開き、発行者(ブランド名)、アカウント(ユーザーのメールアドレスまたはユーザー名)、base32シークレットを入力します。アルゴリズム・桁数・周期のデフォルト値は、ほぼすべてのサーバーで正しく機能します。PNGをダウンロードして、ユーザーにメールやSMSで送付するか、登録フローに組み込んでください。

プライバシーについて

TOTPシークレットはサーバーとユーザーの間の共有された認証情報です。Abundera QRはこれを一切受け取りません。すべてのエンコードはブラウザ内で行われます。プライバシーポリシーの全文はこちら