[DHT]DHTのセキュリティ考察~その2
今回はDHTにおける完全性対策について提案を行ってみたい。
□完全性に対する脅威
DHTにおいて、情報XはNode_ID=hash(X)というノードに登録される。(これを登録ノードと呼ぶことにしよう)
この方法だけではざっと検討しただけでも以下のような脅威が考えられる。
[脅威1]登録ノードによって登録データが消去される
[脅威2]登録ノードによって登録データが改ざんされる
[脅威3]登録ノード以外の第三者によって登録データが消去される
[脅威4]登録ノード以外の第三者によって登録データが改ざんされる
今回は脅威2~脅威4の対策を説明する。
□電子証明書のノードへの配布
セキュリティ対策の基本的テクニックとして電子証明書を利用することが挙げられる。
例えばDHTの各ノードに電子証明書を配布することにしよう。CRLについてもDHT各ノードに配布、あるいは取得できるようにする。なお、証明書発行ノードがDHTノードとは別途必要である。
電子証明書には氏名(あるいはニックネーム)や発行日等が記載される。ここで提案として各ノードのノードIDを電子証明書に掲載することが考えられる。そうすれば、各ノードは自らのノードIDの正当性証明することができる。もちろんノードIDは証明書発行ノードが払い出しを行う。ノードIDはハッシュ空間を均一に埋めるように発行しなければならない。(ノードIDを電子証明書に格納するメリットは次回以降詳細に説明します。)
各ノードの電子証明書はあるサーバに対して参照できるようにしても良いし、せっかくDHTがあるので、DHTに電子証明書を分散させて格納するのも良いだろう。
□登録ノードへの情報登録
いま、ノードAがXという情報をNode_ID=hash(X)となる登録ノードBに格納したい。
すると次のような手順を行う。
[手順1]ノードAはノードBに電子証明書を提示する。ノードBは電子証明書が有効であることを確認すると同時にノードAが本当に電子証明書所持者と同一か確認する。
確認方法としてチャレンジレスポンス等が挙げられる。
[手順2]ノードAはノードAの秘密鍵S_Keyでhash(X)を暗号化する。これをS_hash(X)としよう。
[手順3]ノードAはX、S_hash(X)をノードBに登録依頼する。
[手順4]ノードBはノードAのノードID、X,S_hash(X)を格納する。
S_hash(X)はXに対する一種の電子署名と考えてもらっても良い。
Xが改ざんされているかどうかはノードAの電子証明書を取得して、その公開鍵を使ってS_hash(X)からhash(X)を復号すればよい。
なお、データの削除手順は以下の通りである。
[手順1]ノードAはノードBに電子証明書を提示する。ノードBは電子証明書が有効であることを確認すると同時にノードAが本当に電子証明書所持者と同一か確認する。
確認方法としてチャレンジレスポンス等が挙げられる。
[手順2]ノードAはX、S_hash(X)をノードBに削除要求をする。
上記手続きにより脅威2~4は防止できる。脅威1については、データを隣接ノードでレプリケーションするので、この部分を工夫すればある程度防止できるかもしれない。今後は脅威1の対策を検討したい。
| 固定リンク
「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)
この記事へのコメントは終了しました。
コメント
「DHTの」セキュリティではない、というのも言いすぎでした。DHT固有の、ではないけれど、「DHTの」セキュリティだと思います。
データとデータに対する署名を組にしておくという手法は電子メールなどでも行われている方法だと思いますが、DHTでもある種の脅威に対して有効だという意味で、論じる価値はあると思います。
注意したいのは、その議論も、ルーティングの結果として信頼できるノードに到達することが大前提だということで、secure routing が (略)
投稿: しゅどう | 2006.08.09 15:44
ごめんなさい。Bは、署名の偽造はできませんね。
投稿: しゅどう | 2006.08.09 15:33
ここで想定している脅威は、DHT に固有のものではない、ということはないですか? もしそうだとすると、「DHTの」セキュリティ、という話ではないことになります。
また、上記プロトコルでは、ノードBが、データXと、データXに対するノードAの署名 (S_hash(X)) の双方をまとめて改竄できてしまいませんか? → [脅威2] に対して安全ではない
もしノードBは信頼できるのだという仮定を置くのなら、ルーティングの結果として信頼できるノードに確実にたどり着くことが必要であり、このあたりは構造化オーバレイ固有の話となります。そのための手法は secure routing として提案されています。
(mixi で御紹介した論文のうち1本がそれです。)
投稿: しゅどう | 2006.08.09 15:20