
時間ベースワンタイムパスワード(TOTP )は、現在時刻を一意性の源として使用してワンタイムパスワード(OTP)を生成するコンピュータアルゴリズムです。HMACベースワンタイムパスワード(HOTP)アルゴリズムの拡張として、インターネット技術タスクフォース(IETF)標準RFC 6238として採用されています。[ 1 ]
TOTPはオープン認証イニシアチブ(OATH)の基盤となる技術であり、多くの二要素認証(2FA)システムで使用されています。
OATH の複数のメンバーの協力により、業界が支持する標準を作成するために TOTP ドラフトが開発されました。これは、イベントベースのワンタイム標準 HOTP を補完し、エンド ユーザー組織や企業が、アプリケーション要件やセキュリティガイドラインに最適なテクノロジーを選択する際の選択肢を増やします。2008 年、OATH は仕様のドラフト バージョンを IETF に提出しました。このバージョンには、IETF に提出された以前のバージョンに基づいて、著者が技術コミュニティから受け取ったすべてのフィードバックとコメントが組み込まれています。[ 2 ] 2011 年 5 月、TOTP は正式にRFC 6238になりました。 [ 1 ]
TOTP認証を確立するには、認証を受ける側と認証する側の両方が、HOTPパラメータと以下のTOTPパラメータを事前に設定しておく必要があります。
認証者と被認証者の両方がTOTP値を計算し、その後、認証者は被認証者から提供されたTOTP値がローカルで生成されたTOTP値と一致するかどうかを確認します。一部の認証者は、わずかな時計のずれ、ネットワーク遅延、およびユーザーの遅延を考慮するため、現在時刻より前または後に生成された値を許可します。
TOTPはHOTPアルゴリズムを使用し、カウンターを現在時刻に基づく非減少値に置き換えます。
TOTP値( K ) = HOTP値( K , C T )
カウンター値を計算中どこ
otpauth://URIスキーム
スマートフォン向けのTOTPの実装の中には、ユーザーがQRコードをスキャンしてHOTPトークンとTOTPトークンを認証アプリに追加できるものがあります。これらのQRコードには、スキームのUniform Resource Identifierotpauth:// (URI)が含まれています。[ 3 ]
TOTP otpauth://URIは、ラベルとシークレットで始まりotpauth://totp/、必ずそれらを含める必要があります。ラベルはパスの一部としてエンコードされ、シークレットはクエリパラメータとしてエンコードされます。URIには、桁数(デフォルトは6)、使用するアルゴリズム(デフォルトはSHA1)、期間(デフォルトは30秒)、発行者名などの他のフィールドをオプションで含めることができます。
秘密情報は、パディングを省略したRFC 4648 Base32形式でエンコードされます。例えば、URIはotpauth://totp/Wikipedian?secret=JBSWY3DPFQQHO33SNRSCC「Wikipedian」というラベルの付いたTOTPトークンを表し、秘密情報Hello, world!はASCII形式でエンコードされます。
パスワードとは異なり、TOTP コードは限られた時間しか有効ではありません。ただし、ユーザーは認証ページに TOTP コードを入力する必要があるため、フィッシング攻撃の可能性が生じます。しかし、TOTP コードの有効期間が短いため、攻撃者はリアルタイムで認証情報をプロキシする必要があります。[ 4 ]
TOTP認証情報もクライアントとサーバーの両方が知っている共有秘密鍵に基づいているため、秘密鍵が盗まれる可能性のある場所が複数存在します。この共有秘密鍵にアクセスできる攻撃者は、自由に新しい有効なTOTPコードを生成できます。これは、攻撃者が大規模な認証データベースに侵入した場合に特に問題となります。[ 5 ]