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はHMAC(Hash-based Message Authentication Code)の一つの例であり、一度限りのポスワードを生成するために、暗号額的ハッシュ関数を使い、秘密鍵と実時間のタイムスタンプを組み合わせる。タイムスタンプは通常30秒毎に更新されるので、同じタイムスロット内で、おなじ秘密鍵から生成されたパスワードは同一である。
TOTPはハッシュベースメッセージ認証符号(HMAC)の1例である。秘密鍵と暗号学的ハッシュ関数を用いるタイムスタンプを結びつけワンタイムパスワードを生成する。タイムスタンプは普通30秒間隔で増加し、秘密鍵から同時に結びついて生成されたパスワードは同一のものになる。
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).
1) ユーザーは、ウェブサイトや他のサーバーにユーザー名とパスワードを入力する。
2) ユーザー名とパスワードが入力されたスマートフォンや他の端末装置は、装置内で機能するTOTPを使い、一度限りのパスワードを生成し、それをサーバーに入力する。
3) サーバーは、サーバー内で機能するTOTPを使い入力された一度限りのパスワードを検証する。
この認証方式では、ユーザー側の装置のクロック信号と、サーバー側のクロック信号の概略同期を取る必要がある(通常サーバー側は、入力された一度限りのパスワードのタイムスタンプが、サーバー側のタイムスタンプの前後1秒以内であればそのパスワードを受付ける)。
ユーザーはユーザー名とパスワードをウェブサイトやサーバーに入力し、スマートフォンや他の端末上でローカルに起動している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はHOTPをベースにし、インクリメントカウンタの代わりにタイムスタンプを使用します。
現在のタイムスタンプは、エポックの開始(T0)を定義し、時間ステップ(TS)単位でカウントすることで、整数タイムカウンタ(TC)に変換されます。例を示します。
TC = (unixtime(現在) - unixtime(T0)) / TS
TOTP= HOTP(秘密鍵、TC)。 ここで、HOTPアルゴリズムは次のように定義されます。
TOTPの値= TOTP mod 10d. ここで、dはワンタイムパスワードの所望桁数です。
現状のタイムスタンプは、各エポック タイム(T0)と、unixタイムを計算する為のタイム ステップ(TS)を定義することにより、整数時間カウンターとなる。次に例を上げる。
TC = (unixタイム(実時間) – unixタイム(T0)/TS
TOTP = HOTP(秘密鍵とTC)
HOTPアルゴリズムは以下のように定義される。
TOTPの値 = TOTP/(10のd乗)。dは一度限りのパスワードに求められる長さ。
現時刻のタイムスタイムスタンプは、エポック秒の開始時刻(T0)と、タイムステップの単位時間(TS)を定義することで、整数型のタイムカウンター(TC)に変換される。
例えば、
TC = (unixtime(現時刻) - unixtime(T0)) / TS
のようになる。
後述するHOTPアルゴリズムを用いて、TOTPにより生成される暗号は、TOTP=HOTP(SecretKey,TC)と記述される。
また、dを所望のワンタイムパスワードの桁数として、TOTP-Value=TOTP mod 10dとして計算される。
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
申し訳ありません。最後の方の、
「HOTPアルゴリズムは以下のように定義される。」と
「TOTPの値 = TOTP/(10のd乗)。dは一度限りのパスワードに求められる長さ」
の部分をそれぞれ下記に変更してください。
「TOTPアルゴリズムは以下のように定義される。」
「TOTPパスワード = 上記の式で得られたTOTPを10のd乗で割った余り。dは一度限り有効のパスワードに必要なパスワード長。」