Closed5

Digest認証のresponseの計算方法を確認する。

🤨🤔😑😨😱🤨🤔😑😨😱

サーバーからブラウザに

return new Response("Unauthorized", {
    status: 401,
    headers: {
        "www-authenticate":
            'Digest realm="secure", nonce="eDmmDwlwU4itz_99", algorithm=MD5, qop="auth"'
    },
});

を返す。

ユーザーとパスワードをuser, passを入力する。

🤨🤔😑😨😱🤨🤔😑😨😱

このときブラウザから

{
  username: 'user',
  realm: 'secure',
  nonce: 'eDmmDwlwU4itz_99',
  uri: '/',
  algorithm: 'MD5',
  response: '70fc3373f29aa1b4678fc145048d518e',
  qop: 'auth',
  nc: '00000002',
  cnonce: '8132d2a595d21aa2'
}

が帰ってくる。
パスワードからハッシュ関数を用いて計算されたresponseを用いて認証を行う。

この記事ではresponseの計算方法を確認したい。

🤨🤔😑😨😱🤨🤔😑😨😱

基本的にwikipediaに書いてある。

https://ja.wikipedia.org/wiki/Digest認証

BashのMD5を用いる。

$ HA1=`echo -n "user:secure:pass" | md5`   
$ HA2=`echo -n "GET:/" | md5`
$ nonce=eDmmDwlwU4itz_99
$ nc=00000002 
$ cnonce=8132d2a595d21aa2 
$ qop=auth 
$ echo -n "${HA1}:${nonce}:${nc}:${cnonce}:${qop}:${HA2}" | md5
70fc3373f29aa1b4678fc145048d518e

いい感じに一致している。

🤨🤔😑😨😱🤨🤔😑😨😱

Basic認証はパスワードがBase64で変換されてネットワークを流れるので元に戻せてしまう。
Digest認証ならパスワードは毎回異なる文字列と組み合わせてハッシュ化されるので安全と言われている。

ただ、httpsではないので中間者攻撃が出来てしまうので安全ではないような気が。。。

このスクラップは2022/07/09にクローズされました