ホーム

認証のことを、何となく周辺の話題もからめて書いてみる

いろんな概念が時々まじりあってて混乱しているときがありそうなので、ちょっとまとめてみようと思った。

あんまり厳密に書くよりは、大きくハズさない程度で「なんとなく」納得してもらえればいいな、というつもりで書きます。でも内容についてのご指摘等は歓迎です。

最初は、前提になるような知識からはじめます。

「認証」と「承認」

まずは用語として「認証」と「承認」の区別をはっきりさせて、紛らわしくないようにしておくといいみたいです。

一般に、

という感じみたいです。

だから、認証はされたけど、承認はされない、というような事態は、ありえますね。 いくら筆者が自分の名刺を見せたって、しかもそれが紛うことなく本物だった(認証)としても、それでどんな建物にも入れる(承認)わけではないのと同じです。

その逆に、厳密に認証はされてなくても、承認はされる、ということもあると思います。 その具体例の一つは、下のIPアドレス式の利用承認です。

IPアドレスによる利用承認

IPアドレスで利用が承認されるというのは、すぐ浮かぶ例としては、 ○○大学のキャンパス内からのアクセスは自動的にみんな許可される、という感じの、電子ジャーナルなどでよくあるサービスでしょう。

IPアドレスってのは、インターネット上の通信すべてに共通する、「通信先」や「通信元」を表すための番号です。 で、たいていの場合、○○大学ならその大学の中のIPアドレスはその番号の範囲がおおむね決まっているので、それだけを手掛かりに、サービス利用を「承認」することが原理として可能なわけですね。

アクセスしてきた人が正確に誰なのかまでは知らんけど、○○大学の人なことまではまあ確かだろ、という感じになります。わりと大味な「認証」です。

かかってきた電話に出るか出ないかを、ナンバーディスプレイなんかを見て「この市外局番は名古屋市だね。じゃあ出よう」とか判断するのにも例えられるでしょう。

プロキシサーバー

大学などの構成員が、キャンパスの外(自宅・出張先)からそのサービスを利用したいときには、この「IPで判断」方式だと、一見鷹揚なのに却って融通がききにくい、という弱点があります。IPの範囲がその大学からのものじゃなくなりますから、サービス側に「オメー何者だ」という具合に断られてしまうわけです。

そういうときによく使われるのが、プロキシサーバーと呼ばれるような一連の種類のサービスです。大学なら大学の中にこの機能をもったコンピュータを置いておき、利用したいユーザーは、このコンピュータに、お目当てのサービスへのアクセスを取り次いでもらうというわけです。

こいつは便利な方法ですが、このプロキシの仕組みを使うことができるのがちゃんと大学等の構成員に限られているということが、絶対に必要です。もしこの制限をしないときには、サービスの存在を偶然知ったような人にまで勝手に「タダ乗り」されて、多大な迷惑を各所におよぼすことになります。ちゃんと管理されていないプロキシサーバーってのはいろいろな悪い使い道があり、とても怖いものです。

個人IDとパスワードによる認証と利用承認

とてもよく使われる方法で、いまさら説明もいらないほどなのが、この方式です。

そのサービスを使い始めるときに、まずはIDとパスワード(パスフレーズっていうときもある)を入力して、それが正しいと、利用がはじめられるというアレですね。

IDを入力させるのは、使おうとするのが誰なのかを名乗らせるためです。 で、パスワードを入力させるのは、その人である証拠を求めるからです。 パスワードはその人だけが覚えておいて、他人に教えないでくださいね、ということになっているのは、もちろんこのためです。 Aさんしか知らない情報を知っている。ゆえに、こいつはAさんだ、と。 だから、ここでの目的は「認証」ですね。

サービスのほうでは、あらかじめ、それを使う権利がある人を登録しておきます。 登録された人は、たいてい、サービスを使っていいという権限も同時に与えられるものです。たぶん。 (行える操作の種類とかは人によって違うかもしれませんけどね)

つまり、「認証」した時点で、「承認」も同時に行われています。

余談:パスワードを「Aさんだけ」が知っている?

パスワードをAさんだけが知ってるのはウソだね、システムの中の人も、利用者データベースを見たらわかるじゃんか、と考える人がいるかもしれません。このひねくれものめ。

実は、多くの場合は、パスワードはそのままデータベースに入っていません。一方向ハッシュ、通称ハッシュと呼ばれる技術をつかって、スクランブル(かき混ぜ)された形で入っています。暗号化、とは少し違います。この「ハッシュ」ってやつは、もとに戻せないほどグチャグチャにスクランブルするのが特徴ですから。暗号化ってのは、もとに戻せる(復号)ときだけ使う言葉です。

でも、同じデータを、同じ方法でスクランブルする限り、グチャグチャなりに、同じ値になります。偶然の要素はありません。

ですから、サービス側では、受け取ったパスワードをスクランブルして、手元の利用者データベースにある、これまたスクランブルされた値と比べて、これでパスワードが合っているかを判断することまではできます。でも、もとのパスワードはもうサービス側でも知らない、ということが実現できるわけです。

だから、パスワードを忘れたりしたときに、もとのパスワードを教えてもらえないとしても、サービス側がいじわるだからと考えてはいけません。そうするしかないようになっているのです。こうしておけば、ハッカー(俗称)なんかにユーザーデータを盗まれても、パスワードまでは盗まれないということになりますからね。(逆に、もとのパスワードを教えてもらえたとしたら…ちょっとそのサービスは心配だ)

余談:パスワードが自動入力される

一度あるサービスにユーザーID/パスワードでログインに成功したことがあると、次にウェブブラウザを開いたときにその入力内容が最初から入っていて、あとはログインボタンなんかを押すだけになっていることがあります。これはウェブブラウザ側で「便利機能」として提供しているもので、サービス側では特に何もしていません。これがイヤなら、お使いのウェブブラウザの設定のどこかで、パスワードなどを自動記憶する、とかそんな機能をON/OFFできるようになっているはずですから、探しましょう。

余談:パスワードは「盗聴」できる?

パスワードってのは個人で秘密にしておくべきものですから、さっきの「ハッシュ」の例みたいに、みだりに保存などもしないものです。でも、通信内容を途中で眺めることができる人がいるとしたらどうでしょう。インターネットってのは、その動作原理が、いくつものネットワークの「バケツリレー」みたいなものですから、その途中には何らかのイタズラを試みる人がいないとも限りません。

ウェブの通信方式には、暗号化をするものと、暗号化をしないものがあります。パスワードみたいな大事な情報をサービス側にとどけるには、ふつうは暗号化モードで送ることが期待されます。アドレス欄が「https」で始まっていれば、一応暗号化がされていると見てよいです。サーバー証明書とかそういうものを詳しく調べないと、この点も安心できない場合があるんですが、これはいつか別に説明します。

あと、人のパスワードを盗む手段ってのは、そういう「盗聴」みたいな方法だけではないんですけど、ここではこれ以上詳しく触れません。

余談シリーズおわり。

利用セッションという概念

ログイン(利用開始)してから、ログアウト/ログオフ(利用終了)するまでの間が、一般にセッションといわれるものです。

インターネット上のサービス、とりわけWebのサービスは、使う人にとってはボタンやリンクを押したりしながら「ひと続きに」利用しているという気持ちでしょう。さっきの操作が今回の画面に反映されていて…という感じです。

でも、ウェブサーバーにとっては、一回一回のアクセスに何かの連続性があるのか、簡単には判定できません。

ウェブのサービスを使うという場面を、サービスの受付係への「電話」と例えてみると上の件を説明しやすいので、そうしてみます。 ある人がサービスを「連続に」使っているつもりでも、ここでは、電話をかけたり切ったりを繰り返しているものと例えられます。 (なんで電話をかけっぱなしにしないのか、と言われても、これがそもそもウェブの動作原理みたいなものですから・・・)

で、受付係は、いつも一人だけを相手にしているとは限らない。混む時間帯には、十人くらいを同時にさばいているかもしれません。忙しそうですね。 (ここでは、受話器はひとつだけと想定しておきましょう)

で、この混乱を乗り切るため、受付係は、「さっきの電話」と「今の電話」が同じ脈絡のものであることを知るために、はじめて電話してきた人には適当な「受付番号」を教えてあげることにします。 今後電話してくるときは、まず第一声に「受付番号」を喋ってくださいネ、とかそんな感じで。

で、受付係の手元には、その受付番号と、「今、この人との仕事はどうなっているか」というメモを作り、何か変化があるたびに書き換えていくことにします。 これで、電話をかけたり切ったりされても、仕事の脈絡は失われません。 例えば、電話が来て「さっきまでの注文を、確定しておいてくれ」と言われたときに、「さっきまで」ってのが何なのか、ちゃんと把握できていることになります。多人数を相手にするときも、その人ごとにメモが管理されるわけですから、こんがらがりません。

典型的には、この「受付番号+いろいろ」が書かれたメモが「セッション」というものの正体です。

ログインする、というのは、この電話の例でいうと、

というようなやりとりです。

今の例は、ユーザーID+パスワードで認証を行うときです。 これが例えばIPアドレスによる承認の場合は、

といった感じになります。セッションってのは、別にユーザーID/パスワード式に固有のものではありません。

ログアウトする、というのは、

という会話に相当します。 この電話のあと、受付係は、受付番号zzzzzzに相当するメモを破って捨てることでしょう。やりたい仕事そのものは完結しているでしょうし、作業メモのようなものはもういらないのです。

サービスによっては、たとえば30分操作をしないと、ログアウト扱いになってしまうことがあります。 ユーザーが操作に飽きて(または用が終わって)明示的にログアウトせずに利用を終えてしまうときがありますし、このときに、 受付係の手元に、未来永劫、その受付番号のメモを取っておくわけにはいかないからです。 長い間放っておかれたら、受付係は「これ、もう時間切れでいいよね」ってことで、その人用のメモを破り捨てるってことです。

(でも、相当長い間、この「セッション用メモ」を保存するような種類のサービスもあります。 SNSみたいな、ユーザーに長い間居座って利用してもらいたがっているサービスは、一般に、この時間切れの設定が 長い傾向があるよう、な気がします)

ところで、Webブラウザ(利用者側)は、受付係に教えてもらった「受付番号」を覚えておく必要があります。 「クッキー(cookie)」っていう用語を聞いたことがあるでしょうか。これが、ほとんどの場合、この「受付番号」を覚えておく ための機能として使われます。

ブラウザでcookieを使わないような設定をしておくと、さっきの電話の例でいうと

と言っておきながら、利用者がこの番号を実際にはちっとも覚えず、まともな仕事が続けられない、という状況に相当します。

クッキーの有効期限

クッキーには、賞味期限有効期限があります。

さっきの受付係が「この受付番号を覚えておいてくださいね。向こう一か月の間だけ」というふうに利用者(ウェブブラウザ)に伝えることが可能になっているのです。この指定期間が終わるとブラウザはクッキーの中身を捨てて忘れてしまいますから、たとえサービス側で「受付番号」をずっと覚えていても、ブラウザ側でそれを忘れたときにもセッションは無効になってしまうと知っておくとよいでしょう。特に、よくある指定が「この受付番号を、ブラウザが起動している間だけ覚えておいてくださいね」という方式で、この場合は、ちょっとウィンドウを閉じてしまうだけでセッションは失われてしまいます。こういう種類のクッキーを「揮発性」と俗称する人もいますね。知らない人が聞いたらなんだろうと思うでしょうね。揮発性のクッキー。

ところで、この記事の中では、クッキーはセッション管理だけに使われるかのように書いています。本当はもうちょっと使い道があるんですが、今は触れません。

個人認証をするための、その他の方法

ここまで、IPによるおおまかな認証と承認、そして、ユーザーIDとパスワードを打ち込ませることによる個人認証と承認に触れました。

でも、ある個人であることを確かめるための方法はこれだけではないですから、他の色々な方法を目にすることもあるでしょう。とにかく、本人しか知らないはずの情報、本人しか提供できないはずの情報を使うってのが基本です。

個人証明書とか、指紋とかの生体認証とか、そんなものがすぐに浮かびます。個人証明書ってのはウェブブラウザにセットして使ったりするものなのですが、使う例がそんなに多いわけでもないし、筆者もちゃんと使ったことないし、ここでは説明を省略します。

あるサービスでの認証を、他のサービスに引き継ぐ

今まであげた方法のほか、サービスを利用させるための手段には、ほかにもシングルサインオンみたいなやつがあるじゃない、という声があがりそうです。そのとおりで、こういうのを実現するいろいろな技術のおかげで、ユーザーは使うサービスごとにいちいちさっきまでのような認証の手続きを繰り返さなくてよいようになっているのです。どこかでいったん確立した認証が、他のサービスに引き継がれるというのが基本的なイメージです。

実はこの話題に触れたくてこの文章を書き始めたのですが、なんか長くなってきました。記事を改めることにします。

つづき

2012.11.2

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 3.0 非移植 ライセンスの下に提供されています。