P2P上のSNSでマイミクをどう表現するか?
◇はじめに
MixiでSNS on P2Pコミュニティというものがある。これはP2PでSNSを実装するために各種の検討をするためのコミュニティである。(個人的にはSNS over P2Pと言ったほうがしっくりくるけども。)
かなり以前となるが、MixiのP2PコミュニティでP2PでSNSは構築できるのか?という話題があった。私がその際に考えたのはFOAFを使ってマイミク情報を記述することである。
今回SNS on P2Pコミュニティに加入することによって改めてFOAFを使うことの利点と課題を考えてみたので、SNSでP2Pを実現したいと考えている方は参考にして欲しい。
◇FOAFとは?
FOAFは簡単に言うと自分に関する各種プロフィールをXMLで記述する方式である。この各種プロフィールには友達リストを書くことが出来る。すなわち、ユーザAがFOAFで友達リストを書き、そのFOAFが信頼できるのであれば、ユーザAのマイミクが誰なのか簡単にわかることになる。詳しくは
P2Pと認証、P2PでのSNS
をご覧下さい。
DHTを使った場合を少し書いておこう。ユーザAのユーザIDをID_Aとすれば、Hash(ID_A)となるノードIDを管理するノードがユーザAのFOAFを保有することになる。つまりFOAFを保有するノードにアクセスすれば、ユーザAのプロフィールや友達リストを入手できる。なおFOAFは電子署名をつけることが可能なので、これを用いれば改ざんは防止できる。(ただし、わざとFOAFをロストさせる攻撃は可能である。この攻撃に対抗する手段として、レプリケーションを使うことが考えられる。)
◇マイミクのマイミクを探す
Mixiではあるユーザがマイミクのマイミクだと、その旨を表示することができる。これをFOAFを使って実現してみよう。
今ユーザAのFOAFとユーザBのFOAFがあるとする。ユーザAのFOAFにある友達リストとユーザBのFOAFにある友達リストを照らし合わせ、共通の友人がいればユーザAとユーザBはマイミクのマイミクであることがわかる。
◇提案方法の課題点
FOAFを使うとマイミクの繋がりやマイミクのマイミクを簡単に判定することがわかった。しかし大きな問題点がある。それは友達関係の非対称性である。
ユーザAはユーザBをマイミクだと思っていても、実はユーザBがユーザAをマイミクだと思ってない場合も考えられる。すなわちユーザAはFOAFの友達リストにユーザBを掲載しているが、逆にユーザBはユーザAを友達リストに載せてない場合がある。
この友人の非対象関係を検証する簡単な方法はユーザAとユーザBのFOAFをつき合わし、ユーザAが友達リストにユーザBが書いてあり、且つユーザBが友達リストにユーザAが書いてあるときのみ、ユーザAとユーザBはマイミクだと認めるとすることである。この方法は簡単だが、DHTへのアクセス回数が増える懸念がある。すなわちユーザAの友達リストに100人いた場合、マイミクの検証をするにはDHTに100回以上アクセスする必要がある。友達リストの検証をどのタイミングで行うか、あるいは検証自体を実施しないのか、実装をする上で検討が必要であろう。最後にマイミクのマイミクを検証するときにはDHTへのアクセス数が膨大になる可能性があることを指摘しておこう。
◇コミュニティの管理
FOAFを使うとコミュニティの管理も楽である。コミュニティと「特別な人」(これをユーザPとしよう)として考え、コミュニティの参加者はユーザPの友達リストに掲載することになる。ユーザPのFOAFはコミュニティの管理人が電子署名する。これによって、ある人が本当にコミュニティに参加しているかどうか判定することができるし、コミュニティ情報(たとえばトピックなど)に関する閲覧制御も「ある程度」可能である。
「ある程度」というのは、コミュニティ情報を管理するノード(レプリケーションをしているノードを含む)が能動的な攻撃をすればコミュニティ参加者以外も情報を閲覧できるという意味である。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント