![]()
![]() ノーツの匿名性の限界 ( 20040307 ) 唐突かもしれないが今回はノーツのセキュリティについてディープな議論をしてみたい。たまには情報技術についての専門的なエッセーも書いておかないと単なる人文科学好きの会社員と勘違いされないからだ。ただディープといってもノーツをつかったデータベース開発の経験が数年あれば、誰でもわきまえているはずの内容なので、あまり期待しないで欲しい。テーマはノーツデータベースの機密性だ。以下、できるだけノーツの専門用語を使わないようにして議論を進めていきたい。 まずノーツのもつ情報セキュリティ機能について、一般的に大きな誤解があるようなので、その誤解を最初にといておきたい。ノーツはたしかに高度な情報セキュリティ機能を持つといわれるが、それはアクセス「制限」ではなくアクセス「制御」についての機能である。もう少しかみくだいて言えば、ノーツの強みは「情報にアクセスさせない」ためのセキュリティ機能ではなく、決められた人にだけ「情報にアクセスさせる」ためのセキュリティ機能にある。 その最大の理由が、ノーツのセキュリティにとって利用者の特定が必要不可欠の基盤であるということにある。ノーツは原理的に、Webアプリケーションのようには匿名性を確保できないのだ。ノーツはあくまで個々の利用者が誰であるかを識別した上で、その後に、利用者の一人ひとりに対してどこまでアクセスを許すかという考え方のしくみになっている。ノーツが情報セキュリティを確保するためには、個々の利用者をまず特定する必要があるのだ。 したがってノーツをつかったシステムでは、匿名の利用者に対して情報アクセスの制限をかけることはできない。なぜならそもそも匿名の利用者はノーツを利用できないからだ(ここではノーツをつかったWebアプリケーションの匿名ログインは除くことにする。これは実際にはノーツアプリケーションとは言い難く、Webアプリケーションの開発に、たまたまノーツを基盤として流用したという特殊な場合にすぎないからだ)。逆に、ノーツを利用するためにIDファイルを使ってログインした利用者については、どうあがいても匿名性を確保することはできない。 したがってノーツをつかった非Webアプリケーション、つまり、クライアント・サーバ型のアプリケーションで、例えば「匿名アンケート」のようなノーツデータベースを開発することは、原理的に不可能なのである。 ノーツを使った匿名アンケートが不可能であることを論じる前に、Webを使った場合でも匿名アンケートが基本的に無意味であることを記しておきたい。仮に匿名性がほんとうに確保されたとすれば、同一人物がアンケートに何度も回答することを防げない。このように行われたアンケート結果は、回答者数が、たとえば数千人や数万人など、十分に大きくない限り、一定の傾向を知ろうとするアンケート結果としてまったく意味をなさない。したがって、数百人程度の集団に対して、同一人物がぜったい重複回答できないような条件を確保しないまま匿名アンケートをおこなっても、ほとんど意味のある結果は得られないのだ。 さて、本論にもどろう。ノーツをつかった非Webアプリケーションで、なぜ「匿名アンケート」が原理的に不可能なのか。この問題を考えるには、「匿名アンケート」データベースに対して、回答者にどんなアクセス権を与えればよいのかを考えるとよい。ご存知のようにノーツデータベースに対して利用者が持てるアクセス権には、「管理者」「設計者」「編集者」「作成者」「読者」「投稿者」「権限なし」の7種類がある。 まずノーツでアンケートといえば、ノーツ開発経験者がすぐ思い浮かべるのは「投稿者」だろう。データベースにデータを作成できる権限のなかではこの権限がもっとも低いからだ。しかしここでの課題はアンケートの回答の匿名性を確保することである。したがって、利用者が作成したデータから、利用者のユーザ名を削除する方法を考えなければならない。 一つの方法として、利用者がデータを作成して、それを保存しようとした瞬間にプログラムを自動的に起動し、そのプログラムでいま作成されたばかりのデータから作成した人のユーザ名を削除する方法がある。削除したユーザ名のかわりには、そのアンケート結果を分析したい利用者のユーザ名やロール名を書き込んでおけばよい。 ところがこの方法には二つの欠点がある。一つは、作成中のデータを途中で保存することができなくなってしまうことだ。「投稿者」権限の場合、自分で作成したデータであっても、いちど保存してしまうと編集できなくなる。もう一つの欠点は、同一人物が何度でも回答できてしまうことだ。「投稿者」のパターンで、回答者の匿名性を確保しようとすると、いちど保存されたデータについて、作成者のユーザ名を削除してしまう必要がある。これはデータを保存した瞬間にプログラムを起動することで実現できるが、そこから、同じ人物が何度でもアンケートに回答できてしまうという欠点が生まれてしまう。この二つの欠点を考えると、利用者を「投稿者」権限にするという選択肢は現実的ではない。「使えない」アンケートシステムが出来上がるだけになってしまう。 「投稿者」がダメだとすると、次に権限の高い「作成者」ではどうだろうか。ちなみに、さらにその上の「編集者」は論外ということで、この時点で除外しておいていいだろう。というのは「編集者」という権限では、他の人が作成したデータまで編集できてしまうため、まったくアンケートの体をなさなくなるからだ。それより上の「設計者」「管理者」権限はいうまでもない。「設計者」はプログラムの変更までできてしまうし、「管理者」はアクセス権限そのものを変更できてしまう。したがってアンケートを実現しようとする場合、「投稿者」がダメなら、残された選択肢はもう「作成者」しかないと考えてよいだろう。 ということで、回答者に「作成者」権限を与えた場合、匿名アンケートを実現できるかどうかを検証してみよう。まず上述の二つの欠点を解決できるかどうかがポイントになる。一つは、作成中のデータを途中で保存し、後で続きを編集できるようにすること。これは「作成者」であれば実現できるが、それでもひと工夫が必要になる。先ほども書いたように、データを保存した後にそのデータから作成者のユーザ名を削除してしまう必要があるのだ。しかしいったん作成者のユーザ名を削除してしまうと、どれが自分の作成したデータだったか区別がつかなくなり、続きを編集することが不可能になる。したがって作成者のユーザ名を削除するにしても、これで完成という最後のぎりぎりの瞬間までは削除するわけにいかない。 そういうわけで「作成者」権限の場合、回答の入力が完了するまでは、どうしても作成中の回答データに作成者のユーザ名が残ったままになる。これは、回答の完成直前まで、回答データの匿名性が確保されないという問題を残す。ただ、回答の入力が完了したら「完了ボタン」をクリックして下さいというしくみにすれば、「完了ボタン」のクリックでプログラムを起動し、完成した回答データから作成者のユーザ名を削除することでデータの匿名性は確保される。このあたりが限界だが、完成した回答データについては匿名性が保たれるということで我慢することにしよう。 次に、「作成者」権限によって二番目の欠点を解決できるかどうか考えてみる。つまり、同一人物が何度も回答することを防げるかどうかを考えてみよう。上述のように、「作成者」権限の場合は、回答者が回答を完成するまでは回答データにユーザ名が残るので、重複回答を防ぐことができる。しかし回答が完成し、回答データからユーザ名が削除されると、同じ人がもう一度回答を作成しはじめることができてしまうのだ。これでは重複回答を許すことになってしまう。さて、どうすれば重複回答を防げるか。 これには実はただ一つの方法しか残されていない。回答が完成した瞬間に、その利用者のユーザ名を書き込んだ白紙のデータを別に作成するという方法だ。つまり回答者が「完了ボタン」をクリックした瞬間に、回答データに書き込まれていた回答者のユーザ名を削除するとともに、まったく別のデータを一件生成して、そちらの方に回答者のユーザ名を書き込んでおくのだ。そうすれば、回答データの方は匿名性が確保される一方で、この別データの方には回答済みの利用者のユーザ名がちゃんと残る。これで同じ人物がもう一度回答しようとしても、重複回答かどうかのチェックをかけることができるようになる。 なんだ、回答者に「作成者」権限を与えて、回答が完了した瞬間にユーザ名を記名した別データを起こすという方法をとれば、ノーツでも匿名アンケートが実現できるじゃないか。みなさんはここまでの文章を読んで、そう思ったかもしれない。ところが中途半端な経験しかないノーツ開発者には気づかない落とし穴が隠されているのだ。 まず、回答者に「作成者」権限を与えているということは、他の回答者が作成中の回答はすべて読めてしまうということになる。完成した回答については、作成者のユーザ名を削除したあとに読者フィールドに特定のユーザ名を書き込んでしまえば、たとえ「作成者」権限を持っていてもその特定のユーザにしか読めなくなる。しかし完成前の回答データは、ノーツのしくみ上、他のすべての回答者に読まれてしまう。この現象を回避するには、回答用のフォームを開く直前に起動されるプログラム(イベントプロシージャ)にユーザ名の一致をチェックする機能を組み込むという、かなり込み入った仕掛けが必要になる。 それ以上に大きな弊害は、「作成者」権限のある利用者は、データベースを丸ごと自分のパソコン(ローカル)にコピーできてしまうということだ。ご存知のようにノーツデータベースはローカルにコピーしてしまうとアクセス権限の設定がまったく効かなくなる。こうすることで、たとえ完成後の回答データの読者フィールドに特定のユーザ名を書き込んでいたとしても、それが読めてしまうのだ。このデータベースのローカルコピーというのは、ノーツのセキュリティを考えるときに盲点になりやすい操作だ。この点だけを見ても、ノーツが情報の制限よりも、情報共有に重きを置いたしくみであることがわかる。そもそもグループウェアという分野のソフトウェアは、情報の機密性を高めるためではなく、情報を流通させるために生み出されたのだから、当然といえば当然の限界である。 それでも、完成後のデータからは作成者のユーザ名は削除されてしまっているので、回答データの匿名性は確保できる。「匿名アンケート」という当初の目標に関する限り、無事達成したことになりそうである。ところが、まだ落とし穴があるのだ。匿名性を確保しつつ重複回答を防ぐためには、別データを生成する方法をとらざるをえなかったことを思い出そう。その別データは、回答が完成した瞬間と同時に生成する必要がある。回答の完成と、別データの生成に時間差があると、その時間差のあいだに同一人物が重複回答してしまう余地ができるためだ。 そしてその別データには、回答者のユーザ名を書き込まなくてはならない。別データも匿名にしてしまったのでは、重複回答をチェックできなくなってしまうからだ。回答の方は匿名にする代わりに、この別データを記名式にする。それによって回答データの匿名性の確保と、重複回答の防御を実現していたことを思い出そう。そして回答データと別データは、同時に完成される。 勘の良い方はそろそろお気づきだろう。匿名の回答データと、記名式の別データが「同時に」完成されるという点が、最大の落とし穴なのだ。「同時に」ということは、回答データ、別データそれぞれの「最終更新日時」を調べれば、匿名の回答データと、記名式の別データを厳密に一対一でヒモづけることが可能なのだ。ご存知のようにノーツに保存されるデータにはすべて、強制的に作成日時、最終更新日時が記録されてしまう。この「最終更新日時」を使うのである。しかもこの「最終更新日時」は、ノーツデータベースの中のデータのプロパティを参照すれば、ふつうの利用者が知っているごく一般的な操作で参照できる。調べたいデータをビューの上で選択して、プロパティボタンをクリックするだけの簡単な操作だ。 ならば回答者からビューを隠してしまえばよさそうだが、これを避けることも難しい。というのは、一般の利用者がこの「匿名アンケート」データベースに対して、メニューから「未読文書の検索」を実行すると、「作成者」権限を持っている限り、未読文書、つまり他人の作成した回答や、別データをすべて一件ずつ読んでいくことができる。しかも「未読文書の検索」を実行したあとに、開いたデータを閉じると、デフォルトのナビゲータが現れて好きなビューを開くことができるようになる。 このようにして、「作成者」権限をつかえば実現できたかに見えたノーツの「匿名アンケート」も、一般の利用者が実行できる操作で、比較的かんたんに破られてしまう。つまり、ちょうど出張先で社内のノーツデータベースを参照したいときのように、ローカルに「匿名アンケート」データベースをコピーし、未読文書を検索してビューを表示させ、ビュー上で一件ずつ「最終更新日時」を調べていけば、すべての回答を回答者のユーザ名とヒモづけることができる。しかもこれらの操作を行うのに、ドミノデザイナーなど特別なツールはまったく必要ない。一般のノーツ利用者が、ふつうにノーツのメニューから実行できる操作ばかりである。 随分と入り組んだ議論になってしまったので、ノーツの知識のない方には追いかけにくかったかもしれない。しかしそもそもノーツは匿名性を確保できるような仕組みになっていないのだ。なぜならノーツの情報セキュリティは、利用者が匿名でないということによって実現されているからだ。匿名性を確保しつつ、情報セキュリティも確保するというのは、ノーツにとってはお門違いな要求であり、そもそもそんなことをノーツを使って実現しようとすること自体が間違っているのである。 もう少し突っ込んだ議論をすれば、匿名性と重複回答の防止を同じ仕組みの中で実現するというのは、そもそも不可能なことなのである。このことは選挙の投票を考えてみればわかる。選挙にも匿名性の確保と重複回答の防止が求められる点で、「匿名アンケート」とまったく同じ要件をそなえている。匿名性と重複回答の防止を本当の意味で同時に実現しようと思えば、投票用紙という物理的な実体を、一度だけ交付するという手段によるしかないのである。将来、選挙は電子化されるようだが、電子化された選挙で匿名性と重複回答の防止を同時に実現するには、たとえば電子投票のために必要なICカードであるとか、電子投票所に入るための入場券など、どうしても物理的な実体を「一度だけ」交付するという段階を踏まざるをえないのである。しかもその物理的な実体は、かんたんに複製できるようではいけない。投票用紙は投票所に出向かないと交付されないので、複製することは事実上不可能である。選挙という仕組みは、よく考えられているのだ。 まとめると、ノーツを使って「匿名アンケート」が実現できるというのは、あさはかな考えであり、ノーツの生い立ちを考えればそもそも実現不可能であることは予測できる。不可能なことを実現できると考えるのは、ときには困難な状況を乗り越えるための力になるかもしれないが、それが単なる自信過剰に堕してしまうとき、より重大な他の局面で負の結果を生み出さなければよいが、というのは僕の考え過ぎだろうか。 無断転載禁止
![]()
|