2011-05-30

OATHによるワンタイムパスワードの仕様 - 2

By Taro Yamazaki  |  22:00 No comments

前回はワンタイムパスワードの基本的な仕組みについて説明しました。サーバー側とクライアント側で、それぞれ共通のルールに基づいてパスワードを生成させる必要があることを取り上げましたが、今回はOATHが規定しているその生成ルールについて具体的に説明します。


ワンタイムパスワード生成方法のキホン

OATHでは後述する2つの方法が規定されていますが、基本的な仕組みは同じです。



ワンタイムパスワードを生成するために必要なデータは2つ、(1) ユーザーが決めたパスコード(一般的なパスワードと同じもので、「シークレット」とも呼ばれます)と、(2) 回数や時刻などのカウンタです。これらをサーバーとクライアントの両方で共有しておき、この2つのデータから決められた方法で計算した結果をワンタイムパスワードとして生成します。

OATHで規定している2つの生成方法は、(1) は共通で、(2) の部分だけが異なります。では、それぞれの方法について説明しましょう。

[1] HOTP : 利用ごとに生成する(生成回数ベース)

利用者がトークンのボタンを押すなどしてパスワードを生成するたびに、新しいワンタイムパスワードを生成します。この方法は最も基本的な方法で、OATHの規格では HOTP (HMAC-Based OTP Algorithm) として規定されており、RFC 4226としても規定されています。

カウンタとして使用されるのは「今回のパスワード生成が何回目のパスワード生成か」を示す値です。この値は生成するたびに1つずつカウントアップされますが、サーバー側 (HOTP validator) とクライアント側 (HOTP generator) でこの値を共有していなければなりません。クライアント側はパスワードを生成した回数(何回目の生成か)、サーバー側は認証処理を行った回数(何回目の認証か)を持つことになります。

しかし、このカウンタはサーバー側とクライアント側で同一値になる保証がありません。例えば、パスワードは生成したがそのパスワードを使って認証処理を行わなかった、という場合には値がずれることになります(生成回数 > 認証回数となるため)。そのため、サーバー側にカウンタを再同期 (resync) させる機能を備えておく必要があります。

[2] TOTP : 現在の時刻に応じて生成する(時刻ベース)

一定時間ごとにワンタイムパスワードを生成します。OATHでは TOTP (Time-based One-time Password Algorithm) として規定されており、規格はドラフトとして公開(2011年4月現在)されています。仕組み上は、前述したHOTPの応用といった位置付けになります。

カウンタとして使用されるのは「現在の時刻(UnixTime)」です。ワンタイムパスワードの基準が時刻であるため、サーバー側とクライアント側のそれぞれのデバイス(PC、スマートフォン、トークンなど)の時刻が正確でなければなりません。認証の仕組みを作る際にはある程度の時刻のずれは考慮しますが、当然ながら時刻が大幅にずれていると正しく認証できませんから、NTPやGPSなどを使って定期的に時刻が補正されているデバイスが望ましいでしょう。

では、次回は実際のワンタイムパスワードの算出方法を解説しましょう。

Author: Taro Yamazaki

0 コメント:

© 2015 yamata::memo | Distributed By My Blogger Themes | Created By BloggerTheme9
TOP