TOTP 【Time-based One-Time Password】
概要
TOTP(Time-based One-Time Password)とは、ワンタイムパスワード(OTP)の生成手法の標準の一つで、秘密鍵と現在時刻からハッシュ値を求め、これを6桁程度の数値列に変換してパスワードとする方式。ワンタイムパスワードはパスワード認証の一種で、毎回異なるその場限りの数字や文字列を用いて認証を行う方式である。通常は4~6桁程度の数字を用い、固定のパスワードなど他の認証方式と組み合わせて二段階認証を構成する。
TOTPはワンタイムパスワードの生成方式の一つで、利用者の操作するクライアントはが「HMAC」(Hash-based Message Authentication Code)と呼ばれる認証コードを認証サーバに送信する。HMACの生成に用いられる情報は、サーバとクライアントの間であらかじめ共有された秘密鍵と、認証を有効にしてから現在までの経過時間の2つである。
クライアントは秘密鍵と現在までの経過時間を組み合わせてハッシュ関数にかけ、固定長のハッシュ値を得る。これを一定の計算手法で6桁以上の指定された桁数の数字に変換し、サーバに送信する。サーバも同じ秘密鍵と経過時間を知っているため、同様の計算を行って値が一致すれば認証成功となる。
経過時間は実際には一定時間(システム側で決定しておく)経過ごとに切り替わるカウント値を用いる。クライアントとサーバで秘密鍵を共有して認証を有効にした時刻を「0」とし、指定時間(デフォルトでは30秒)が経過するごとに値を1ずつ増やしていく。生成したパスワードは次のカウントに進むまで有効となる。時間切れになったら再生成して送信し直す必要がある。
TOTPの仕様は「HOTP」(HMAC-based One-Time Password)を元に作成された。これは経過時間ではなく認証試行回数を用いてハッシュ値を生成する手法で、それ以外の仕組み自体はほぼ同様である。HOTPではハッシュ関数としてSHA-1を用いるが、後発のTOTPではSHA-2(SHA-256、SHA-512)も利用できる。TOTPの規格は2011年にIETFによってRFC 6238として標準化されている。