Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
34
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@STomohiko

Digest認証の挙動

Digest認証がBasic認証よりどの程度強固なのか確認したく、実験した。

サーバ情報

クライアント:192.168.0.2
サーバ:192.168.0.5
アカウント:admin/admin

実験

1.リクエスト

この時、クライアントは認証ありのページなのか、認証なしのページなのか知らないので、通常のリクエストを送る。
digest_1.JPG

2.401認証エラー

digest認証ありのページだということをクライアントに知らせるため、401を返す。
HTTPヘッダ内の
『WWW-Authenticate: Digest realm="secret", nonce="35BgQjIPBQA=5014d9d750424666921e3e9007bd102dc4d3f2bc", algorithm=MD5, qop="auth"\r\n』
がdigest認証だということを表している。
realmはサーバ側で設定した認証が必要なエリアの名前。
nonceはサーバ側が生成したランダムな文字列
algorithmはハッシュに使う関数
qopは「Quality of protection」の略で、authかauth-initが入る。digestを作る際にbodyを含めるかどうか。
digest_2.JPG

3.アカウント情報の入力

digeset_miss.JPG

HTTPヘッダ内の


Authorization: Digest username="admin", realm="secret", nonce="35BgQjIPBQA=5014d9d750424666921e3e9007bd102dc4d3f2bc", uri="/", algorithm=MD5, response="afb7a95eb81ffe8a3877e968b34db8e9", qop=auth, nc=00000001, cnonce="9c1d4392e7611e41"』
が送信されているアカウント情報。
cnonceはクライアント側で生成したランダムな文字列
ncはカウント、responseは以下の式で導かれる。

A1 = ユーザ名 ":" realm ":" パスワード
A2 = HTTPのメソッド ":" コンテンツのURI
response = MD5( MD5(A1) ":" nonce ":" nc ":" cnonce ":" qop ":" MD5(A2) )

(wikipediaより引用)
digest認証はこのresponseが導き出しにくいことでセキュリティを保っている。

4.間違えたらまた401

digest_4.JPG
この時のnonceに注目。
先ほどは「nonce="35BgQjIPBQA=5014d9d750424666921e3e9007bd102dc4d3f2bc"」だったが今回は「nonce="oN+ZQjIPBQA=385ddf7fda0f6206b9dcb15c2de45d060132eb40"」だ。
つまり、認証画面が出るたびにこの値は変わる。
このため、responseなどの各種値を入手しても次のタイミングには使えない。
もちろん、cnonceも送信するたびに変化する

結果

responseの値が導き出すことはとても困難(MD5のハッシュ値から元に戻す必要がある)だと分かった。
http://md5cracker.org/
などでMD5→元の文字列へ変換できるので、MD5は無効化されたかとも思ったが、そんなことはなかった。

参考文献

wikipedia, Digest認証
http://ja.wikipedia.org/wiki/Digest%E8%AA%8D%E8%A8%BC

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
34
Help us understand the problem. What is going on with this article?