●Skypeを使用できないケース
Skypeは、80番ポートさえ空いていれば、通話ができる仕組みになっている。つまり、Webサイトが閲覧できる環境であれば通話が可能ということだ。ところが、そのような環境であってもうまくいかないことがある。80番ポートは本来HTTPを通すためのものなので、ファイアウォールの中には80番ポートを通過するパケットがHTTPであるかどうかをチェックしているものがある。そのようなファイアウォールは、HTTPヘッダをつけずに80番ポートを通過しようとするパケットを破棄してしまう。
Skypeのパケットは80番ポートを通過する際も、HTTPヘッダをつけていない(HTTPカプセル化を行っていない)ため、このような機能を持つファイアウォールは通過することができない。そのため、リレーノードを経由した80番を使用するTCP通信をもってしても、Skype通話がうまくいかないのである。
P2P技術により負荷が集中するサーバを持たないSkypeの仕組みでは、理論上、ボトルネックの負荷増大による品質低下は発生しない。こうしたシステムの構造上のメリットのほかにも、さまざまな工夫が高品質通話を支えている。
●音声コーデック
Skypeは音声コーデックに、Global IP Sounds(GIPS)社の「VoiceEngine」を採用している。GIPS社のコーデックは、クライアントにインストールして使うDSPベースのVoIPソフトウェアコンポーネントで、高度なバッファリング技術を備えている。
特徴は、回線の太さやそのときの状態のフィードバックを受けて圧縮率を変更するダイナミックな最適化技術である。これにより、ネットワーク帯域を十分に使える環境では音声を圧縮しすぎることなく、最大限に活用できるというわけだ。VoiceEngineには、そのほかにもエコーキャンセリング、サウンドカードごとの最適化などの機能があり、VoIP統合パッケージとなっている。
●独自の呼制御プロトコル
Skypeでは呼制御にSIPなどの標準プロトコルを使わず、独自に開発したプロトコルを使用している。これは、Global IndexとスーパーノードというSkypeのシステムを最大限に生かすためだと思われる。それによって、チューニングが極められる一方で、既存のVoIPシステムとの相互接続が難しくなるという欠点がある。
●Intelligent Routingと冗長性
Skypeのネットワークは、常に最も効率のよいパスでデータをルーティングする、「Intelligent Routing」という機構を備える。通話中であっても、よりよい状態のパスがあれば動的に切り替えるというものだ。Skype通話において、時間の経過とともに通話品質が向上したら、この仕組みによる可能性がある。
また、Skypeノードは通話中、常に複数のリレーノードと接続を確保している。そのため、現在中継しているノードに何らかの障害が発生した場合も、別の経路がバックアップしているので、通話状態は保たれる。リレーノードは、全体でその数が調整されており、理論的には足りなくなることはないはずなので、システムとしての安心感もある。クライアント/サーバ型のシステムでは、中継するサーバは固定的であり、冗長化のためのフォールバックサーバの数も有限である。ここにもP2Pによる自律性、冗長性が十分に発揮されているといってよいだろう。
Skypeによる音声通話はインターネット経由で行われるため、盗聴を心配するユーザーも多いだろう。ましてやリレーノードを使用した通話になると、音声データが不特定第三者のノードを通過することになるので、プライバシーも気になるところだ。Skypeは、どのような手段で、セキュリティとプライバシーを保証しているのだろうか。
●AESの鍵を各通話ごとに生成
Skypeの通話における暗号には、次世代暗号標準AESが採用されており、現状で最高レベルの暗号化を施している。しかもSkypeでは、通話ごとに毎回一度かぎりの鍵を生成している。つまり、たとえある通話の鍵の入手に成功したとしても、別の通話では再び異なる鍵が使われるということだ。この点から、Skypeによる通話を盗聴するのは非常に難しいということがわかる。
●エンド・ツー・エンドの暗号化
Skype通話における音声データは、各ノードで発信前に暗号化され、相手のノードに届いてから復号される。このようなエンド・ツー・エンドによる暗号化のため、経路の影響を受けずに通話のプライバシーが保たれる(図7)。その一方で、すべてのパケットをリアルタイムでAES暗号化/復号するためには、かなりのCPUパワーを要する。それぞれのPC上でこのような重い処理をさせる実装を見ると、今日のPCのスペック向上がP2Pの技術発展に一役買っていることを改めて感じる。
●PKIを使った鍵の受け渡し
通話の暗号化に使われるAESは「共通鍵暗号(または対称鍵暗号)」と呼ばれており、暗号化と復号に同じ鍵を使うのが特徴である。つまり、Skype通話の際は双方で同じ鍵を持つ必要がある。
Skypeでは通話開始前の鍵の受け渡しのために、PKIベースのRSA鍵による暗号化を利用している(図8)。ここでは詳しく解説しないが、PKIは「非対称鍵暗号」で、暗号化と復号にそれぞれ別の鍵を用いる。通常、各ユーザーは広く公開する公開鍵と自分だけが使う秘密鍵のペアを持つ。
例として、Skypeの通話開始時の動きを考えてみよう。まず、AES鍵を自分のPCで生成し、相手の公開鍵で暗号化して相手に送る。受け取ったユーザーは、自分の秘密鍵で復号してAES鍵を取り出す。秘密鍵は自分しか持っていないので、安全にAES鍵を共有できるというわけだ。そして、取り出したAES共通鍵を使って、通話自体の暗号化を行う。
ロータス、マイクロソフトを経て、2001年アリエル・ネットワークの設立に参加。以降P2Pアプリケーションの設計、開発、開発マネージメントを行う。2004年よりプロダクトマネージャとしてP2Pアプリケーションの企画担当をする傍ら、講演や執筆を通じて、P2P技術およびその応用についての啓蒙活動・コンサルティングを行っている。
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.