認証の種類や認証の分類

セキュリティ

仕事で認証について教える機会があったのですが、あまり認証のことを理解していないと感じたので、調べてみることにしました。調べてみるとあまり全体的にまとまったサイトがないですね…。書き足しながら完成度を高めて行こうと思います。

いろいろページを調べながら、しっくりきた解釈を記載します。。
「認証」という用語は情報セキュリティ上二つの意味を持っています。ひとつはAuthentication(2者間認証)、もうひとつはCertification(3者間認証)です。図に表わすと次のようなイメージになります。

スポンサーリンク

認証の種類

<Authentication(2者間認証)>

auth2

認証者と被認証者が事前に共有している情報を確認すること。ユーザIDとパスワードによるログインなど。

<Certification(3者間認証)>

auth3

認証局が発行した証明書により持ち主の正当性を確認すること。

Webアプリの認証方式

<Basic認証(Authentication)/Digest認証(Authentication)>

既にたくさんの記事があるので、引用していきたいと思います。まずは、基本情報やHTML5認定試験に出てきそうな言葉の定義は、次のとおりです。

Basic認証とは、HTTPで定義される認証方式の一つ。基本認証と呼ばれることも。Basic認証では、ユーザ名とパスワードの組みをコロン “:” でつなぎ、Base64でエンコードして送信する。このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。
盗聴や改竄を防ぐため、後にDigest認証というユーザ名とパスワードをMD5でハッシュ化して送る方法が考えられた。
(by wikipedia)

どういう通信をして認証をしているかは、次のサイトがわかりやすかったです。

basic_auth1

  1. クライアントからHTTPのリクエストを送信します。
  2. ベーシック認証を行うWebサーバは、クライアントからのリクエストにAuthorizasionヘッダが 指定されていないか確認します。 Authorizasionヘッダが指定されていない場合、サーバは、「WWW-Authenticate」ヘッダを レスポンスヘッダに指定してレスポンスコード401で送信します。
  3. クライアントは、「WWW-Authenticate」ヘッダを受け取ると認証用の入力を要求します。 入力されたユーザー名とパスワードを「Authorization」ヘッダにセットしサーバへ送信します。
  4. サーバは、「Authorization」ヘッダに指定されているユーザー名とパスワードを使用して認証処理をします。 認証に成功すれば、要求のあったページを送信します。認証に失敗すると 2. のの送信を実行します。

(by http://www.bnote.net/linux/basicauth.shtml)

特記事項としては、Basic認証の情報は、HTTP認証のため、ブラウザに記憶されます。(ブラウザを閉じるまで、ユーザ名とパスワードの入力が不要)また、HTTP通信の認証方式でサーバーのファイルディレクトリに対して制限をかけため、そのサーバーのドメイン内でしか効力がない。明示的なログアウト処理が不要。

 

私、Basic認証をあまり知らなかったんですが、Basic認証を使わない理由としては、次のサイトにうまくまとまっていました。

  1. ログアウト機能がないこと
  2. ログインせずに同じページのコンテンツを閲覧するという使い方(ゲストアクセス)ができないこと
  3. サーバ側からログイン状態を無効にする手段が存在しないこと
  4. ホストをまたがったシングルサインオンが実現できないこと

(by http://d.hatena.ne.jp/IwamotoTakashi/20081108/p1)

最後にBasic認証についてよくまとめられているサイトをご紹介します。(このサイトをみたら、自前で書くのを諦めました(笑))


<Form認証>

私は、WEBアプリ開発を長年やっているので、Basic認証よりForm認証の方がお馴染みの方式です。Form認証は、HTMLのフォームタグから認証する方式です。HTMLのソースは次のとおりです。

<form action=”www.formAuthentication.com” method=”post”>
  <input type=”text” name=”txtId”>
  <input type=”password” name=”txtPassword”>
  <input type=”submit” value=”ログイン”>
</form>

Form認証もBasic認証もログインする際のユーザの見た目はあまり変わりませんが、裏の仕組みが異なります。HTTPプロトコルの認証の仕組みを使わずに認証をします。Webアプリケーションの場合は、セッション情報に格納してサーバ側でその情報を管理します。セッションにログイン情報を保持した場合は、サーバと通信が必要になる都度(画面遷移やボタン操作等)に認証情報を確認します。タイムアウトやログアウト処理が行われるまで、永続的にログインした状態になります。

一昔前では、Form認証でもログインに成功したという情報をブラウザのクッキーに保存する方式もあるようです。(個人的には好きではない)


仕事以外で絵を描いたので、時間がかかりすぎました(^^;) 今後、次の認証についてまとめてみたいと思います。観点はWebアプリケーションの認証方法です。

  • SAML
  • OpenID
  • 証明書認証
  • シングルサインオン
  • 多要素認証

今日はここまで。

コメント