[P2P]VoIPとセキュリティ
NETWORK MAGAZINEの今月号(2004年11月号)に興味深い記事が載っている。128Pから「ここが危ないIP電話」と題して特集を組んでいる。P2PやSkype、VoIPに興味がある方は要チェックな記事だ。
VoIPでもっとも気になるセキュリティ事項といえば、おそらく盗聴であろう。盗聴を防ぐにはEnd-to-Endで暗号化を行う事が真っ先に頭に浮かぶ。一般に音声の通信はRTPというプロトコル(基本的にはUDPの上位)を使うのだが、これを暗号化するためにSRTPというものが使われる。また、End-to-EndではMIKEYという鍵交換プロトコルが使われる。両者については、いずれ噛み砕いて説明する予定だが、これらについて知りたい場合には以下のサイトが役に立つだろう。
The SRTP and MIKEY pages
rfcやドラフト、プレゼンなどを見る事が出来る。
ところで、このサイトを良く見ると携帯で有名なエリクソンのページである。いずれは携帯をフルIP化することも視野に入れているのかもしれない。
さて、シスコのVoIPソリューションもこの雑誌で紹介されているのだが、これも面白い。というのはX.509証明書を使ってSIP Proxyと認証を行うのだ。これによって、SIP Proxy及びユーザがそれぞれ不正なノードでないことを証明できる。
IP Call to Action
では、今度は私がP2P勉強会で提案したDHTでのVoIPの話に戻そう。このDHTを使ったVoIPではどうすればEnd-to-Endの暗号化が可能であろうか?DHTでまず通話すべきノードのルックアップをし、IPアドレスがわかる。グローバルアドレスのあるノードを一旦は介して、その後UDP hole punchingを使えばダイレクトに互いに通話が可能である。一番簡単なのはDiffie-Hellmanを使う事である。しかしこれだと中間侵入攻撃を受ける事になる。
このベストな解決法はPKI的なアプローチを取る事だろう。つまり、DHTネットワークに公開すべき証明書を保持しておく。エンドノードの確認はこの証明書を元に行う。
簡単に認証を行うのであれば、次のようなことが考えられる。
今、AとBが相互認証したいとする。最終的にはA⇔B間で暗号化したい。
1)AはBの証明書をDHTから入手する。それをもとにBの公開鍵を得る。
2)Aはチャレンジレスポンスと同じ考えで認証を試みる。すなわち、AはチャレンジコードCをBに投げる。
3)BはCを秘密鍵で暗号化し、(これをC'とする)Aに返す
4)AはC'を公開鍵で復号化し、Cと一致することを確認する。これでAはBを認証
5)BがAを認証するのも同様な手続きなので省略。
6)相互認証後、どちらかの鍵を使って通信を行いAとBの共通鍵を生成。これをもとにA⇔B間を暗号化。
こんな感じだろうか。
雑誌の話にもう一度戻そう。特集ではVoIP以外に次世代TCPの最新研究・開発動向についても書かれている。それには遠距離での広帯域通信を効率よく行う方法などが書かれている。いずれP2P的なアプローチがワールドワイドで行なわれば、このような研究も重要となるので、こちらもぜひ読んでほして欲しい。
| 固定リンク
| コメント (2)
| トラックバック (0)