3 認証技術の標準化動向
3.1. ネットワーク認証プロトコル及び API 標準
3.1.3 ワンタイムパスワード
3.1.3.1 One-Time Password System(RFC2289、STD0061)
RFC2289 ではワンタイムパスワード認証システム (OTP)について規定してい る。
OTP は、S/KEY One-Time Password System から発展したものである。
(S/KEY は、Bellcore の登録商標。S/KEY One-Time Password System は、
Bellcore により公開されている)。
OTPシステム使用は、固定パスワード使用時に問題となった「リプレーアタ ック」の対策として考案され、「パスワード盗聴』や「パスワード漏洩」を無効 にしているが、通信データ保護(暗号化等)は行わない。
ワンタイムパスワード(OTP)はチャレンジ/レスポンス方式を用いている。
すなわち、認証システムは認証する側(サーバー)がチャレンジコードを送り、
認証される側(ユーザー)がそのチャレンジに対するレスポンスを送り返し、
認証する側がそのレスポンスを検証することによって認証している。
つまり、サーバー側は自分が出したチャレンジに対して、どのようなレスポ ンスが返ってくれば正しいのかを検証する手段を持つことにより、ユーザー側 を認証する。
OTPは2つの要素からなる。OTP生成器とサーバーである。ワンタイムパ スワード生成器はユーザーの秘密のパスフレーズとサーバーから送られるチャ レンジとしてのSeedおよびシーケンス番号からハッシュ関数を計算し、ワン タイムパスワードを生成する。生成されたOTPはクライアントのログイン時 のパスワード送信に用いられる。
OTP生成器は外部のカリキュレータにすることも出来るし、またクライアン トのソフトウェアとして実装も出来る。OTPシステムの初期化時に、クライア ントはシーケンス番号の初期値(N)を定め、クライアントが秘密のパスフレ ーズとサーバーが指定するシード(Seed)を結合しOTP生成器への入力とす る。OTP生成器はハッシュ値を計算し、その結果をまた、ハッシュ関数の入力 としてハッシュ値を計算する。これをN回計算し、OTPを表示する。クライ アントはこれを初回のワンタイムパスワードとして、シーケンス番号Nと共に サーバに登録する。
クライアントの通常のログイン認証は、サーバが送ってくるチャレンジとし てのシーケンス番号i(初回のログイン時はN‐ 1、以後ログイン毎に1づつ 減少する)とSeedをOTP生成器に入力し、OTP生成器はハッシュをi回計 算し、これをOTPとしてクライアントに提示する。クライアントはこのOTP をログインのパスワードとして使う。サーバーはこのOTPをハッシュ値とサ ーバーに格納してある前回のOTPと比較してクライアントの認証を行う。
OTPシステムで使われるデータを表 3-1に示す。
表 3‑ 1 OTP システムデータ 内容
ハッシュ関数 H()
暗 号 ア ル ゴ リ ズ ム ( 初 期 化 時 に サ ー バ ー が 決 定 。
[MD5:必須、SHA:推奨、MD4:オプション]) シード(Seed) サーバが指定する1〜16文字のデータ
チャレンジデータ シード+シーケンス番号
シーケンス番号i レスポンスデータ生成時に使うハッシュ関数をかける 回数。初期化時にMAX値(N)を設定。認証が成功す るたびに1つずつ減る
レスポンスデータ ワ ン タ イ ム パ ス ワ ード(OTP)
秘密パスフレーズとシードを結合してシーケンス番号 (i)回数ハッシュをかけたもの。64ビットのデータ。
Hi (PassPhrase||seed) 秘密パスフレーズ
PassPhrase
レスポンスデータ生成時に使用。ユーザーが決定。
ワンタイムパスワード生成時に入力要。サーバー側に流 れることはない。10文字以上63文字以下。
認証強度を測る手段は、ハッシュ関数の強度に依存する。
OTPシステムにおける認証はハッシュ関数が一方向性で逆方向変換ができ ないという特性を生かした認証方法を採用しているからである。この一方向性 関数に問題がある場合にはワンタイムパスワードの推定が可能になる。
サーバーが複数の場合、ユーザーは各サーバーと初期化処理をする必要があ るので、グローバルなシステム上での認証には向かない。
以下にOTPシステムにおける初期化時のシーケンスを、図 3-2に示す。
②初期パスワード生成 S=HN(PassPh||seed)
③ワンタイムパスワード
SNを送付
① チャレンジ
(Seed、N)生成
④SN及び N をユー ザDBに格納
初 期 チ ャ レ ン ジ 送
Sを送付
図 3‑ 2 ワンタイムパスワードの初期化
① サーバーは初期チャレンジとして16文字のSeedおよび初回ハッシュ回 数Nをクライアントに送付
② クライアントは自らの秘密のパスフレーズ(PassPhrase)とシード
(Seed)を結合したものをハッシュ関数の入力とし、結果をさらにハッシュ関 数に入力して、これをN回繰り返す。SN=HN(PassPh||seed)。実際のワンタ イムパスワードとしてはハッシュ値を64ビットに折り返したものを使う
③ クライアントはワンタイムパスワードとしてSNをサーバに返す
④ サーバはシーケンス番号i=NとSNをユーザデータベースに格納する
Nは任意の整数で良いが、通常1000程度に設定する。
用いるハッシュ関数はMD5やSHA-1が用いられる。
ユーザ認証
以下の図 3-3にユーザー認証時のシーケンスを示す。
②ワンタイムパスワード 計算
SI=HI(PassPh||seed)
③ワンタイムパスワード
SI を送付
① i = i– 1としてチャ
レンジ seed + i
④S=H(Si)を計算し、前
回のSiと比較 一致すれば認証
Si と iをDBに格納
チャレンジ送付
レスポンス
ワンタイムパスワードSi
図 3‑ 3 ワンタイムパスワードの認証
① 前回のシーケンス番号(i)を1回減らし(i – 1)seedとともにクライア ントにチャレンジとして送付
② クライアントはワンタイムパスワードをi回、ハッシュを取って計算する SI=HI(PassPh||seed)、ワンタイムパスワードとしてはハッシュ値を折返し、
64ビットの値にする
③ ワンタイムパスワードSI をサーバに送付
④ サーバは前回格納しておいたSとH(SI)を比較して一致すれば認証する。
送られたSI とIをユーザDBに格納保存する
チャレンジはseed+シーケンス番号であるが、実際は用いるハッシュ関数も 指定するように以下のようなコードを用いる。
otp-md5 487 dog2
これはハッシュ関数としてMD5を用い、シーケンス番号が478、シード
(seed)がdog2であることを表している。
シーケンス番号が1となったら再び初期化からやり直す。もちろん任意のシ ーケンス番号i > 1であっても初期化することが出来る。
このRFCではワンタイムパスワード生成器が生成した64ビットの値に2ビ ットのパリティを加えた66ビットの値をワンタイムパスワードとしてマニュ アルで入力するのは間違いやすいので、OTP生成器が計算した値をパスワード として入力するために、11ビットの値に対応する2048の4文字までのワード との対応表を参照し、このワードを6組使ってユーザがマニュアルでワンタイ ムパスワードを入力する支援システムを用意している。
例えば、生成したワンタイムパスワードは以下のようにコード化される。
OUST COAT FOAL MUG BEAK TOTE
この6組の文字はOTPシステムの対応表で66ビットのワンタイムパスワー ド値に変換される。
ワンタイムパスワード(OTP)システムはパスフレーズさえ秘密にしておけ ばクライアントにもサーバーにも秘密のデータを保持することも無く、平文の パスワードがネットワークを流れることもないので盗聴やリプレーアタックを 無効にする。しかし、初期化操作を行わなければならないこと、OTP生成器が 提示する6組のワードをパスワードとして入力しなければならない面倒さがあ り(自動化することも出来る)、またサーバー側はスタティックなパスワードテ ーブルではなく、毎回のログイン時の状態をダイナミックにデータベースに格 納し管理しなければならない問題がある。