プロジェクトを横断して通用する識別機能 |
Last modified 10:07 PM UTC, February 09 2005
|
BOINC は「第三者によるリーダボード」ができることを
支援し、かつ奨励します。 このリーダーボードとは、
つまり、BOINCを使ったプロジェクト群からのデータを使い、
統計情報を表示するウェブサイトのことです。
これらのウェブサイトは、生のデータをXMLの形で得ることが
できます。
リーダボードのサイトは、BOINCを使ったいくつものサイトからのデータを
使って、統計情報を表示するかもしれませんから、参加者や計算機ごとの功績
(credit)を、参加している全部のプロジェクトに渡って合計して見せたいと思うかもしれません。
プロジェクトを横断して通用する計算機の識別方法
それぞれの計算機では 内部的な、プロジェクトを越えた IDを生成しています。
その値は、計算機のドメイン名、IP アドレス、ディスクの空き容量、
そしてタイムスタンプをつなぎ合わせて、MD5 でハッシュした結果です。
この値は計算機が参加しているプロジェクトに通知されます。
プロジェクトでは、それを
計算機の持ち主の E-mail アドレスとあわせてハッシュをかけ、
外部的な プロジェクトを越えた ID に変換します。
(この変換は、なりすましを防ぐことを意図しています)。
この外部 ID が統計情報ファイルに入れられて、外部に提供されます。
プロジェクトを横断して通用する参加者の識別方法
異なるプロジェクトにある別々のアカウントが、
同じメイルアドレスを持っていれば、それらは同じものだと見なすことができます。
(その他の同等性の概念を考えても見ましたが、どれも極端に複雑なことになってしまいます)。
しかし、プロジェクトは、メイルアドレスを統計情報のファイルで見せてしまうわけにはいきません。
メイルアドレスは個人の非公開のものです。
さらに、ハッシュしたメイルアドレスの値でも、
外に見せることはできません。 なぜなら、スパムメイルを送る輩なら、
あり得るメイルアドレスの値を[自動]生成して、ハッシュされた値との間で
比較することもやりかねないからです。
BOINC ではそのようなやり方ではなく、次のような仕組みを使います。
-
各々のアカウントには、「内部 プロジェクト横断 ID (CPID)」
(internal cross-project identifier)を、アカウント生成時に与えます。
それは、無作為に生成した長い文字列です。
-
スケジューリング・サーバが RPC に返事をするときには、
そのアカウントの CPID と E-メイルアドレスのハッシュ値、
そして作成時刻を返事に含ませます。 これらの値は、クライアントの
状態ファイルに格納されます。
-
その BOINC クライアントが RPC 要求をスケジューリング・サーバに投げるときには、
その E-メイルアドレスと同じものをもつアカウントがないか探し、
もっとも作成日時が古いアカウントとともに格納してあった CPID
を送信します。
-
BOINC のクライアントは、その CPID と E-メイルアドレスのハッシュ値とを、
その計算機が連結しているプロジェクトのアカウントごとに保存します。
BOINCのクライアントがスケジューリング・サーバに
RPC の要求を投げるときには、同じE-メイルアドレスと組みになっている
CPID のうちで一番大きいもの(大小の決定には文字列比較を使います)
をその要求に含ませます。
-
もし、スケジューリング・サーバがそのデータベースに憶えていた
CPID とは違ったものを受信したならば、その新しい CPID で、
データベースの記憶を更新します。
-
[統計表示の生データを運ぶための]
XML ダウンロードファイルの中の user 要素には、
(E-メイルアドレス, CPID)の対についてのハッシュ値が
入っており、この「外部」CPIDとでも呼べる値が、
そのE-メイルアドレスをもつ全てのアカウントの間での
一意の識別子として使えます。
(この最後の部分の説明で、E-メイルアドレスでハッシュを
かけていることにより、他人のふりができないようにしています。 )
この方式は、E-メイルアドレスを基礎に、プロジェクトを越えた識別を
可能にしていますが、そのE-メイルアドレスを導きだせるような
情報は一切、公開しないですみます。