Time-based One-time Password Algorithm (TOTP) is an algorithm that computes a one-time password from a shared secret key and the current time. It has been adopted as Internet Engineering Task Force standard RFC 6238,[1] is the cornerstone of Initiative For Open Authentication (OATH) and is used in a number of two factor authentication systems.
TOTP is an example of a hash-based message authentication code (HMAC). It combines a secret key with the current timestamp using a cryptographic hash function to generate a one-time password. The timestamp typically increases in 30-second intervals, so passwords generated close together in time from the same secret key will be equal.
時刻ベースのワンタイムパスワードアルゴリズム(TOTP)は共有鍵と現時刻から一度のみ有効なパスワードを生成するアルゴリズムである。そのアルゴリズムは、Internet Engineering Task ForceのRFC 6238[1] で標準として採択されており、Open Authentication(OATH)の基礎となるとともに、大多数の二要素認証システムにおいて用いられている。
TOTPはハッシュベースのメッセージ認証符号(HMAC)の一つであり、暗号学的ハッシュ関数を用いることで、共有鍵とタイムスタンプを合成して、ワンタイムパスワードを生成する。典型的にタイムスタンプは30秒間隔でカウントアップされるため、同じ共有鍵から生成された直近の時刻のパスワードは一致する。
In a typical two-factor authentication application, user authentication proceeds as follows: a user will enter username and password into a website or other server, generate a one-time password for the server using TOTP running locally on a smartphone or other device, and type that password into the server as well. The server will then also run TOTP to verify the entered one-time password. For this to work, the clocks of the user's device and the server need to be roughly synchronized (the server will typically accept one-time passwords generated from timestamps that differ by ±1 from the server's timestamp).
典型的なツーファクタ認証アプリケーションでは、ユーザ認証は次のように行われます。ユーザがウェブサイトまたは他のサーバにユーザ名とパスワードを入力し、スマートフォンまたは他のデバイスでローカルに実行されているTOTPを使用して、サーバ用のワンタイムパスワードを生成し、そのパスワードをサーバに入力する。次に、サーバもTOTPを実行し、入力されたワンタイムパスワードを確認する。これが機能するには、ユーザデバイスのクロックとサーバのクロックがおおむね同期している必要があります(通常、サーバは、サーバのタイムスタンプとの差が±1以内のタイムスタンプから生成されたワンタイムパスワードを受け入れます)。
A single secret key, to be used for all subsequent authentication sessions, must have been shared between the server and the user's device over a secure channel ahead of time. If some more steps are carried out, the user can also authenticate the server using TOTP.
TOTP is based on HOTP with a timestamp replacing the incrementing counter.
The current timestamp is turned into an integer time-counter (TC) by defining the start of an epoch (T0) and counting in units of a time step (TS). For example:
TC = (unixtime(now) - unixtime(T0)) / TS
TOTP = HOTP(SecretKey, TC), where the HOTP algorithm is defined below.
TOTP-Value = TOTP mod 10d, where d is the desired number of digits of the one-time password.
以後のすべての認証セッションに使用される単一の秘密鍵は、安全なチャネルを通じてサーバとユーザデバイス間で事前に共有されている必要があります。さらに多くのステップが実行される場合、ユーザは、TOTPを使用してサーバを認証することもできます。
TOTPはHOTPをベースにし、インクリメントカウンタの代わりにタイムスタンプを使用します。
現在のタイムスタンプは、エポックの開始(T0)を定義し、時間ステップ(TS)単位でカウントすることで、整数タイムカウンタ(TC)に変換されます。例を示します。
TC = (unixtime(現在) - unixtime(T0)) / TS
TOTP= HOTP(秘密鍵、TC)。 ここで、HOTPアルゴリズムは次のように定義されます。
TOTPの値= TOTP mod 10d. ここで、dはワンタイムパスワードの所望桁数です。
A TOTP draft was developed through the collaboration of several OATH members in order to create an industry-backed standard. It complements the event-based one-time standard HOTP and offers end user organizations and enterprises more choice in selecting technologies that best fit their application requirements and security guidelines. In 2008, OATH submitted a draft version of the specification to the IETF. This version incorporates all the feedback and commentary that the authors received from the technical community based on the prior versions submitted to the IETF.[2] In May, 2011, TOTP officially became RFC 6238
TOTPのドラフトは、業界標準を作るために、数名のOATHメンバーの共同作業によって開発されました。これは、イベントベースのワンタイム標準であるHOTPを補完して、エンドユーザ組織と企業がそれぞれのアプリケーション要件とセキュリティガイドラインに最適な技術を選択する際の選択肢を広げます。 2008年、OATHは、ドラフト版仕様をIETFに提出しました。このドラフト版には、IETFに提出されていた旧版をベースに著者たちが技術コミュニティから受け取ったすべてのフィードバックやコメントが取り込まれています。[2]2011年5月、TOTPは公式にRFC6238になりました。