「パスワードをそのまま送るなんて怖すぎる!」HTTP Digest認証の仕組みを、郵便配達で解き明かす
こんにちは!ネットワークの世界へようこそ。今日は、Webサイトの「鍵」の守り方についてお話しします。
皆さんは、ホテルのフロントで名前を名乗る時、自分の銀行口座の暗証番号を大声で叫んだりしませんよね?もしそんなことをしたら、通りすがりの誰かに盗み聞きされてしまいます。
実は、Webの世界でも同じことが起きています。「パスワードをそのまま送る」という危ない橋を渡らずに、どうやって本人であることを証明するか。その賢い仕組みが「HTTP Digest(ダイジェスト)認証」です。
—
1. 昔のやり方(Basic認証)は「裸で手紙を送るようなもの」
まず、以前使われていた「Basic認証」を思い出してみてください。これは、パスワードをそのまま文字列にして、いわば「開けっ放しの封筒」に入れて送るようなものです。
途中で悪いハッカーがその手紙を覗き見たら、パスワードが丸見えになってしまいますよね。これでは安心して夜も眠れません。そこで登場したのが、「パスワードを直接渡さず、クイズに答えて本人証明をする」というDigest認証なんです。
—
2. Digest認証の「魔法のクイズ」:チャレンジ&レスポンス
Digest認証は、まるで「合言葉」を使った秘密のやり取りです。具体的にどう進むのか、郵便配達のイメージで見ていきましょう。
手順①:サーバからの「お題」を受け取る(チャレンジ)
あなたがWebサイトの扉を叩くと、サーバは「誰だ!」と突き放す代わりに、ランダムな数字の羅列を渡してきます。これを「nonce(ナンス)」と呼びます。これは「今回限りの使い捨ての鍵」のようなものです。
手順②:計算して「答え」を返す(レスポンス)
あなたは自分のパスワードをそのまま送るのではなく、以下の3つを混ぜて計算機(ハッシュ関数)にかけます。
1. あなたのパスワード
2. サーバから届いた「nonce」
3. アクセス先のURLなど
こうして生成された「ぐちゃぐちゃの文字列」だけをサーバに送ります。これが「ダイジェスト」です。
手順③:サーバが答え合わせをする
サーバ側も同じ計算をします。「送られてきた答え」と「サーバが計算した答え」が一致すれば、「君は正しいパスワードを知っている本人だね!」と認められるわけです。
これなら、途中の悪いハッカーがパケットを盗み見ても、手に入るのは「計算済みの文字列」だけ。元のパスワードはどこにも流れていないので、安全というわけです。
—
3. 実践!Digest認証のやり取りを見てみよう
実際にブラウザとサーバの間でやり取りされるHTTPヘッダーを見てみましょう。
1. サーバからの「お題」(チャレンジ)
WWW-Authenticate: Digest realm=”SecretArea”,
nonce=”dcd98b7102dd2f0e8b11d0f600bfb0c093″,
opaque=”5ccc069c403ebaf9f0171e9517f40e41″
# realm: どのエリアの鍵か
# nonce: 使い捨てのランダム文字列(リプレイ攻撃対策!)
# opaque: サーバが管理する状態保持用の文字列
2. クライアントからの「答え」(レスポンス)
Authorization: Digest username=”taro”,
realm=”SecretArea”,
nonce=”dcd98b7102dd2f0e8b11d0f600bfb0c093″,
uri=”/index.html”,
response=”6629fae49393a05397450978507c4ef1″
# response: パスワードを混ぜて計算した結果のハッシュ値!
- nonce(ナンス)の役割: これが毎回変わるおかげで、もし悪意ある誰かが「過去の通信内容」をそっくりそのままコピーして再送しようとしても(リプレイ攻撃)、サーバ側で「古いnonceだから無効だ!」と弾くことができます。
—
4. でも、万能じゃない?「MD5」という弱点
ここまで聞くと「最強じゃん!」と思うかもしれませんが、実は弱点もあります。Digest認証の多くは、計算に「MD5」というアルゴリズムを使っています。
実はこのMD5、今のコンピュータの計算能力からすると「非常に解読されやすい」ことが分かっています。つまり、昔の技術ゆえに、現代の攻撃手法に対しては少し力不足になってきているのです。
—
最後に:これからのWebインフラのために
今、現場の最前線では、このDigest認証よりも、より強力な暗号化通信である「HTTPS(SSL/TLS)」の上で、OAuthやJWTといったモダンな認証方式を使うのが当たり前になっています。
「なぜDigest認証という仕組みがあったのか?」
「どうすればパスワードを守れるのか?」
この考え方を理解しておくことは、どんなに新しい技術が登場しても揺るがない、ネットワークエンジニアとしての「地力」になります。
まずは、自分のサイトや実験環境でこのヘッダーを眺めてみてください。「パケットが会話している」様子が見えてくると、ネットワークの仕事はもっと楽しくなりますよ!
一歩ずつ、着実に学んでいきましょう。次回もまた、深い技術の世界でお会いしましょう!
コメント