Digest認証
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Digest認証(ダイジェストにんしょう)とは、HTTPの認証方法の一つで、Basic認証での盗聴や改竄を防ぐために考案された、ユーザ名とパスワードをMD5でハッシュ化して送る認証方法。
[編集] 例
典型的なDigest認証におけるHTTPクライアントとHTTPサーバの間の通信を紹介する。
だいたいの流れは以下のようになる。
- クライアントは認証が必要なページをリクエストする。しかし、通常ここではユーザ名とパスワードを送っていない。なぜならばブラウザはそのページが認証を必要とするか否か知らないためである。
- サーバは401レスポンスコードを返し、認証領域 (realm) や認証方式(Digest)に関する情報をクライアントに返す。このとき、ランダムな文字列(nonce)も返される。
- ここでクライアントは、認証領域(通常アクセスしているコンピュータやシステムの簡単な説明)をユーザに提示して、ユーザ名とパスワードの入力を求める。ユーザはここでキャンセルすることもできる。
- ユーザ名とパスワードが入れられると、クライアントはnonceとは別のランダムな文字列(cnonce)を生成する。これよりユーザ名とパスワードと2つのランダムな文字列などを使ってハッシュ文字列(responce)を生成する。
- クライアントはサーバから送られた認証に関する情報とともに、ユーザ名とresponceをサーバに送信する。
- サーバ側では、クライアントから送られてきたランダムな文字列(nonce、cnonce)などとサーバに格納されているハッシュ化されたパスワードから、正解のハッシュを計算する。
- この値と、クライアントから送られたresponceが一致する場合認証成功として、コンテンツを返す。失敗時は401レスポンスコードを返す。
ユーザ名とパスワードの具体的な計算は以下のようになる。なお、ここでは認証アルゴリズムがMD5の時の計算方法を示す。
クライアントで計算するresponceは以下のようにして求められる:
A1 = ユーザ名 ":" realm ":" パスワード A2 = HTTPのメソッド ":" コンテンツのURI responce = MD5( MD5(A1) ":" nonce ":" nc ":" cnonce ":" qop ":" MD5(A2) )
サーバ側では、MD5(A1) を予め格納しておいてある。nonce,nc,cnonce,qopとHTTPのメソッド(GETなど)とコンテンツのURIはクライアントから送られるのでサーバ側で正解のresponceを計算できる。