Webサイトでの認証技術であるベーシック認証とダイジェスト認証を知る。
- 前回の勉強内容
- 勉強のきっかけになった問題
- HTTPの認証機能を使用することで、Webサイトにアクセスできる権限を持っているかを確認します。
- ベーシック認証は、ユーザ名とパスワードの組みをコロン ":" でつなぎ、Base64でエンコードして送信します。
- ダイジェスト認証は、パスワードをハッシュ値にして送信します。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
HTTPの認証機能を利用するクライアント側の処理として,適切なものはどれか。
HTTPの認証機能を使用することで、Webサイトにアクセスできる権限を持っているかを確認します。
会員サイトなどのWebサイトを特定の人々だけ見れるようにするには認証機能を使用します。
認証機能を使用することでWebページを見られる人かを確認します。
ベーシック認証は、ユーザ名とパスワードの組みをコロン ":" でつなぎ、Base64でエンコードして送信します。
- 別名:基本認証
- 利点:多くのWebサーバが対応しています。
- 欠点:盗聴や改竄が簡単にできます。
認証の流れは、
1. クライアントがページをリクエストする
2. WebサーバがWWW-AuthenticateヘッダでHTTPステータスコード401を返す
- HTTPステータスコード:Webサーバがレスポンスの意味を表す3桁のコードです。
- 別名:レスポンスコード
- 401(Unauthorized):「認証が必要だよん」とWebサーバは言っている。
WWW-Authenticate ヘッダーは 401 Unauthorized 応答と共に送られます。
例
WWW-Authenticate: Basic realm="Access to the staging site", charset="UTF-8"
WWW-Authenticate - HTTP | MDN
3. クライアントがBase64エンコードしたユーザ名とパスワードをAuthorizationヘッダに指定して送る
例
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Authorization - HTTP | MDN
4. Webサーバが認証する
ダイジェスト認証は、パスワードをハッシュ値にして送信します。
- 英語:digest authentication
- 別名:HTTPダイジェスト認証
- 利点:ベーシック認証で防げなかった漏洩やら改ざんができます。
- 欠点:対応していないブラウザがあります。
認証の流れは、
1. クライアントがページをリクエストする
2. WebサーバがWWW-AuthenticateヘッダでHTTPステータスコード401だけではなく「認証領域」や「認証方式」、「ランダムな文字列」を返す
- ここの
- 認証領域は、realm
- 認証方式は、Digest(ダイジェスト認証だよと知らせる)
- ランダムな文字列は、
- nonce(認証要求ごとに生成される一時的なデータでチャレンジともいう)
- opaque(ランダムに生成されるデータ)
- といいます。
3. クライアントがランダムな文字列を生成して、ユーザ名・パスワードと「2つのランダムな文字列」を使ってハッシュ文字列を生成する
4. クライアントは「2つのランダムな文字列」と「ハッシュ文字列」を送信する
MD5は、文字列から128ビットの値のハッシュ値を生成するハッシュ関数です。
- 正式:Message Digest 5
- 規約:RFC 1321
- 特徴:
- 同じ入力値は必ず同じ値になる
- 少しでも異なる入力値は全然違う値になる
- 不可逆な一方向関数を含むのでハッシュ値から効率よく入力値を割り出すことはできない
- 欠点:入力値がハッシュ値より長い場合、複数の異なる入力値なのに同じハッシュ値になってしまう「ハッシュ値の衝突」が起こる
# MD5でハッシュ値を生成する $ echo 'tarou' | md5 961ed3c18a02b9b87bcd3efa9eb2a0a9 # ちょっと違う文字だとぜんぜん違うハッシュ値が生成される $ echo 'taroo' | md5[f:id:ponsuke_tarou:20181005164602j:plain] e11337e5c8ce85a437712f57c63249e8 $ echo 'tarou' | md5 26223ea272f3f0e42cf872c01b9ba8ec
- 前回勉強したメールの認証:CRAM-MD5でも使っています。