今回は,Web上で情報を公開する際の,アクセス・コントロールについて考えてみます。ここで言うアクセス・コントロールとは,あるページに誰がアクセスできるのかをコントロールする,という意味です。

 Web上に情報を公開するということは,その情報を世界中からアクセス可能な状態にする,ということと大体同じ意味です。しかし情報の中には,一部の人しかアクセスしてほしくない情報もあります。例えば個人情報が含まれるデータを,インターネットを使って共有したい,といったとき,許可された人以外がそのデータにアクセスできては困るわけです。そこで,何らかの方法で,許可した人にしかその情報にアクセスできないようにすることになります。

 最もよく使われているアクセス・コントロールの方法は,パスワード認証でしょう。パスワード(とユーザー名)を使った認証の仕組みを用意して,認証を通過できた人にだけ,その情報にアクセスする権限を与えるという,よくあるあれです。けれど今回は,パスワード認証について(だけを)考えてみるのではなく,パスワード認証を使わない別のアクセス・コントロールの方法についても考えたいと思っています。

知っている人だけがアクセスできる

 今回この話題を取り上げたのは,「Googleカレンダー」に用意されている「非公開URL」という機能を見たからです。Googleカレンダーでは,標準ではカレンダーは「非公開」,つまり自分以外は内容を見られないように設定されます。しかし,この「非公開URL」にアクセスすると,特に認証が無くても,つまり誰でも,カレンダーの内容を閲覧できるようになっています。

図1●「非公開URL」を使えば非公開のカレンダーにもアクセスが可能


 なぜこんなものが用意されているのでしょうか。

 理由の一つは,他のスケジュール管理ソフトや携帯電話やPDAなどのデバイスとの同期を取りやすくするためでしょう。GoogleカレンダーはiCalendarという標準フォーマットに対応しており,異なるツールからその情報を読み込んでカレンダー情報を同期させることができます。情報を取得するのにログインが必要になってしまうと,自動的にデータをダウンロードしようとするそうしたツールからデータ取得するのが難しくなってしまいます。

 もう一つの理由は,知り合いにだけデータを見せたい,といった場合に便利だからでしょう。非公開URLさえ知らせれば,パスワードなどを知らせなくても見てもらうことが可能だからです。

 ただし,非公開URLが,簡単に類推されてしまっては意味がありません。なるべく複雑なURLを用意しておく必要があります。例えば,Googleカレンダーの非公開URLは以下のようになっています。

http://www.google.com/calendar/embed?src=35emv4rf2f44ej95dn7bguat40%40group.calendar.google.com&pvttk=ddc6ef2ab5c6ecc563fbe0e38ed925c4

 このURLには二つのクエリ・パラメータがつけられています。一つ目のsrcは,カレンダーごとの固有のIDです。そしてpvttkが,URLを類推不能にするためにつけられたトークンです(pvttkはおそらくプライベートトークンの略でしょう)。このトークンは,いわばサービスによって自動的に割り当てられるパスワードのようなものです。32桁の16進数になっていますから,10の38乗通りの可能性があるわけで,それを見破るのはかなり困難になっています。

 このトークンの値は,「非公開URLをリセット」という機能を使うと,明示的に変更できます。逆に言うと,それを行わない限り変更はされないのですが,もし知られたくない誰かに非公開URLを知られてしまった場合などには,リセットをかけてトークンを変更することで,再び誰にも知られていないURLにできるわけです。

 この手法はいわゆる「ワンタイムURL」と呼ばれる手法の一種です。ワンタイムURLは,何らかのデータを一時的にダウンロード可能にするために,一定期間だけ有効なURLを用意するとか,パスワードを忘れてしまったユーザーに,一定期間アクセス可能な「パスワード変更用ページ」を用意する,といった「一定時間だけアクセスを許可する」という時限付きURLに利用されるのが一般的です。しかしGoogleカレンダーでは,それを時限付きにせず,利用者が自由なタイミングで変更できるようにすることで,アクセス・コントロールに利用できるようにしているわけです。

 これは面白い使い方で,初めて見たときに「なるほどなあ」と思いました。しかし便利だなあ,と思う半面,どこか「セキュリティ的には大丈夫なんだろうか」みたいな不安も感じました。そのメリットや注意点を一度きっちり考えてみよう,ということで今回取り上げてみました。