認証-ワンタイムパスワード方式による認証3つ
1回だけの使い切りのデータを用いて認証を行う認証方式。
- ○1回だけの使い切りなので、盗聴されても安心
- ○リプレイアタックも防げる
- ×クライアント認証で使う場合、サーバー認証の機能はないのでサーバーのなりすましは防げない。
次の3つの方式がある。
- チャレンジ/レスポンス方式
- S/Key
- 時刻同期方式
チャレンジ/レスポンス方式
「チャレンジ+パスワード」のハッシュで認証する方式。チャレンジが変われば値も変わる。
- サーバーが「チャレンジ」と呼ばれるランダムな文字列を送付
- クライアントが「チャレンジ+パスワード」のハッシュをサーバーに送付
- サーバーは1で送付したチャレンジとパスワードからハッシュを生成し、2と比較。
- →同じであれば確認OK
S/Key
「パスワード」のハッシュで認証する方式。何回ハッシュ関数にかけるかをサーバーが指定し、回数によって送付する値が変わる。
- サーバーにて初期化処理をおこなう。
- パスワードを作成し、利用回数分(100とする)ハッシュ関数にかけた値をサーバーに登録。
- サーバーは、「現在の利用回数(初回なら99)」をクライアントに送付する。
- クライアントは入力されたパスワードを「現在の利用回数」回、ハッシュ関数にかけた値をサーバーに送付する。
- サーバーはクライアントから渡された値をハッシュ関数に1回かけ、登録された情報と同じか評価する。
- →同じ場合は認証成功。
- 評価後、クライアントから送られた値をサーバーに登録し、「現在の利用回数」を1つ引く。
弱点
- ×利用回数を使い切った後に、再度初期処理が必要。
- ×初期化処理は安全に行う必要がある。ここで漏洩すると意味がない..。
時刻同期方式
時刻にあわせて規定のパスワードを出力する装置を使う。
- トークンと呼ばれるパスワード生成器をあらかじめ配布
- トークンはその時の時刻に応じたランダムなパスワードを生成する。
- クライアントはユーザー名とパスワード生成器が作成したパスワードをサーバーに送付。
- サーバーはトークンが生成するパスワードを知っているので、認証できる。
弱点
- ×サーバーとトークンの時刻同期が必要。
- ×トークンがパスワードを変更する期間は同じパスワードになる。(一般的には1分くらいらしい)長くすれば安全性は高まるが、使い勝手は悪化する。
参考: