システムやサービスを使う上で、利用者が正しいかどうかの判断は当たり前ですが重要です。この判断をする行為のことを「認証」と呼びます。
認証方式には様々な方法がありますが、サービス利用者を守るためにはより強い認証の方法が求められると思います。
今回は認証の一つである「チャレンジレスポンス認証」の仕組みと特徴を解説します。
「チャンレジして、レスポンスを認証する?」ちょっと言葉だけだと意味が分かりにくいので、その辺を分かり易く解説していきます。
利用者認証とは?
まず最初に利用者を認証するための方法は大きく3つあります。
3つの利用者認証
- 知識認証 : 本人のみが知る情報で認証(パスワードやPIN)
- 所有物認証 : 本人のみが持つ物で認証(ICカード、ハードウェアトークン)
- 生体認証 : 本人のみが持つ行動的、生態的特徴で認証(顔認証、指紋認証、署名認証)
日々の生活の中でこれらの認証を使い分けたり、組み合わせたりしていることが分かりますね。
複数要素認証(多要素認証)ということで、ICカードを使いながら、更にパスワードを入力することで、より強固な認証もできますね。
ベーシック認証(Basic認証)
さて、チャレンジレスポンス認証がなぜ必要なのかを説明する前に、知識認証における「ベーシック認証(Basic認証)」というものを理解しましょう。
ベーシック認証とは読んで字のごとく、凄く基本的な知識認証の方式です。
Webブラウザ経由でID、パスワードを入れて、HTTPを使ってサーバへ情報を送って、認証します。
このベーシック認証では、ユーザ名とパスワードの組みをコロン ":" でつなぎ、「Base64」という方式でエンコードして送信します。このBase64方式は可逆式、つまり元に戻す(デコード)ことができてしまいます。
このため、盗聴したり、盗聴してからパスワードを改竄することが可能となってしまいます。
下の図にベーシック認証で盗聴されてしまう流れを記載してあります。
Basic認証は盗聴の危険性が高いため、その対策としてチャレンジレスポンス認証が生み出されました。
チャレンジレスポンス認証とは?
Basic認証を理解した上で、チャレンジレスポンス認証の説明です。
この方式のポイントは「ネットワーク上にパスワードそのものを流さない」ということです。
「チャレンジ」と呼ばれる一度しか使わない乱数とパスワードをハッシュ関数で計算します。その計算結果が「レスポンス」(メッセージダイジェストとも呼ぶ)となり、このレスポンスをネットワーク経由でサーバに渡して照合して、認証結果を出します。
ハッシュ化された値は不可逆式なので、盗聴されても元のパスワードに戻すことができないので、セキュリティが高くなります。
手順として記載すると以下のようになります。
チャレンジレスポンス認証の流れ
- 利用者がサーバにアクセスを要求する
- サーバ側でチャレンジを作成し、利用者側に送る
- チャレンジを受け取った利用者側は、入力したパスワードとチャレンジを使ってレスポンスを生成し、サーバ側へ「レスポンスA」を送る
- サーバ側でもデータベースに格納されているパスワードとチャレンジを使って「レスポンスB」を生成する
- サーバ側で「レスポンスA」と「レスポンスB」を照合する
- 認証結果を利用者側に返す
- 認証結果がOKだったら、サービスの利用が開始される
チャレンジレスポンスの流れを図にすると以下のようになりますね。
チャレンジレスポンス認証の特徴と使われ方
チャレンジレスポンス認証を使うことで、以下のようなメリットを得ることができます。
チャレンジレスポンス認証の特徴(メリット)
- ベーシック認証のように通信を盗聴されても、レスポンス(メッセージダイジェスト)が不可逆式なので、パスワードを解析されることが無い
- チャレンジは一度しか使われないため、ネットワーク上から盗聴したパスワードをそのまま再利用しても、そのパスワードが古くなってしまっているため、使うことができない。これはリプレイ攻撃の対策になる
そして、チャレンジレスポンス認証は様々な認証方式に使われています。
- CHAP(Challenge-Handshake Authentication Protocol): インターネットサービスプロバイダ(ISP)の接続に使うPPP(Point-to-Point Protocol)の認証で使われている
- ダイジェスト認証(Digest認証): サーバ側では無く、利用者(クライアント)側がチャレンジを生成する方式
まとめ
今回は知識認証の一つであるチャレンジレスポンス認証に関して解説してきました。
この方式は大事なパスワードを守るために重要な仕組みでしたね。
パスワードをハッシュ化することで、複合し難くしていることもありますし、一度しか使わない値で認証する、いわゆるワンタイムパスワードなので、これもセキュリティを強くしていることになりますね。
ベーシック認証を使っているシステムでの認証は気を付けましょう。というより、認証方式を変えた方が良いですね。
以上です!