何年もの間、私たちはあらゆる種類の広告ブロックアプリやブラウザ拡張機能の開発に集中していました。そして2年前、突然のように独自のVPNサービスの開発を決意しました。
実際、いくつかの重要な理由があってのことです:
当初から、AdGuard VPNは競合他社と大きく異なる点を持つべきと私たちは決心していました。
その点は、既製のソリューションから選ぶのではなく、自社でVPNプロトコルを開発して実装することです。
なぜわざわざそのような面倒なことをするのか、と思うかもしれません。
この記事では、なぜ私たちが既存のプロトコルに満足できず、独自のプロトコルを開発したのか、そしてそのロードマップをご紹介します。
(ネタバレ:AdGuard VPNプロトコルは検出が難しく、類似品よりも高速です。)
しかし、その前にいくつかの技術的なことを深く掘り下げて説明する必要があります。
ここでは、あえてインターネットの全体像を説明することはしませんが、その仕組みの基本的な部分を説明します。
さて、インターネット上のすべての通信は、小さなデータ「パケット」をコンピュータからサーバに転送し、またサーバからコンピュータに転送して戻すことで成り立っています。
パケットにはいくつかの種類があり、それぞれに目的があります。
パケットのカプセル化と処理に関する規制を「プロトコル」と呼びます。
IPアドレスという言葉を聞いたことがあるのではないでしょうか?
IPアドレスは、ネットワークデータ転送の主要な仕組みであるIPプロトコルの一部です。
1つのパケットは、
という3つの部分から構成されています。
受け手は誰がパケットを送信したかを知っているので、何らかのデータを送り返すことができます。
“純粋な”IPプロトコルはほとんど使われていませんが、IPプロトコルをベースにしたTCPとUDPという2つのプロトコルは幅広く使われています。
TCPは、インターネットの主要な「仕事馬」です。
ウェブサイトを開くと、データ送信にTCPが使われている可能性が高いです。
TCPのパケットは4つの部分で構成されています。
どのようなネットワークを使用していても、送信したパケットの一部が途中で失われる可能性があります。
TCPプロトコルでは、送信されたパケットが確実に宛先に届くようにするために、受け手は、受信した各パケットに対して、受信確認用の小さなTCPパケットを送信します。
確認を得られない場合は、送り手は受信確認を得るまでパケットを再送し続けます。
UDPはそこまで人気ではありませんが、同じくIPベースのプロトコルです。
IPプロトコルとの唯一の違いは、送信されるパケットの中でデータそのもの、送り手と受けてのIPアドレスに加えて、ポート番号(下記のポート番号説明へ飛ぶ)の情報が含まれることだけです。
下の図をご覧になればわかるように、データパケットのフローはTCPの場合よりも速く、それもそのはずで、UDPには送達確認がないからです。
TCPとは異なり、UDPは何も保証しないということです。
しかし、受信確認のための余分なパケットをわざわざ送り返すこともないので、その分より高速になるというわけです。
誰かに手紙や電子メールを送るとき、内容やヘッダー、署名はなくても送れますが、受信者のアドレスがないと送れないですよね。
インターネットも同じように、データを送るためには必ずIPアドレスが必要です。
Webサイトにアクセスすると、あなたのIPアドレスがWebサイトに表示されます。
IPアドレスがわかれば、ユーザーの位置情報を把握することもそれほど難しくありません。
VPNを利用すると、あなたのデータは暗号化された接続を通じて、あなたの自宅・職場やスマートフォンから、インターネット上の別の地点(おそらく別の国)に送られ、そこからはじめて公のインターネット上に出てくるようになります。
覗き窓の出口に続く穴に潜り込んでよその目を避けるウサギのように。
暗号化の結果として、あなたのデータは自宅や職場の住所ではなく、トンネルの反対側(出口)のIPアドレスが割り当てられます。
これで、あなたがサイトのウェブサーバーに接続したとき、ウェブサーバーが目にするのは、あなたの自宅のIPアドレスではなく、VPNエンドポイントに属する他人のIPアドレスです。
したがって、ウェブサイトにアクセスしても、あなたのデータが開示されることはありません。
上記のことはすでにご存知の方も多かったかもしれませんが、念のためおさらいしておいて損はないかと思いました。
では、実際の技術的な詳細を説明したいと思います。
VPNが機能するためには、あなたのデバイスからVPNサーバーまでの間でデータを転送し、暗号化する必要があります。
このデータを送信・暗号化するための規制をVPNプロトコルといいます。
最も一般的なVPNプロトコルは、OpenVPN、WireGuard、IPSecです。
これらのプロトコルはどれもほぼ同じ働きをし、機能的には非常によく似ていますが、細部(暗号化と接続の確立)に工夫が凝らされています。
その仕組みを見てみましょう。
例えば、あるウェブサイトにアクセスしたいとします。
あなたがVPNを有効にしている場合、VPNサーバーがあなたとウェブサイトの間を仲介します。
最初に、暗号化されたIPパケットがVPNサーバーに送信されます。
VPNサーバーはそれを解読し、「送り手のアドレス」(つまりあなたのIPアドレス)を変更して、パケットを受けて(つまりWebサイト)に送ります。
これは通常、UDPをトランスポートとして使用して行われます。UDPは確認を待つ必要がないため、一般的に「より高速」です。
(※) VPNサーバーからウェブサイトへ転送される「元のIPパケット」には、元のIPアドレスが変更されているため、サイト側によって元のユーザー情報を特定することはできません。
すべての一般的なVPNプロトコル(OpenVPN、WireGuard、IPSecなど)は、2つの欠点を持っています。
VPNの使用を「隠す」ためには、データフローをTCP接続で「包む」ことが多く、さらに暗号化して通常のWebサイト接続のようなトラフィックとして見せることもあります。
残念ながら、この方法には欠点があります。TCPを使用しているため、受信確認を追加で行う必要があります。
(※) VPNサーバーからウェブサイトへ転送される「元のTCPパケット」には、元のIPアドレスが変更されているため、サイト側によって元のユーザー情報を特定することはできません。
そのため、一般的なVPNプロトコルを使用する場合、「速いけど検出されやすい」と「遅い」のうちのどれかを選ばないといけない、というトレードオフになります。
※VPNサーバーからウェブサイトへ転送される「元のデータを含むIPパケット」には、元のIPアドレスが変更されているため、サイト側によって元のユーザー情報を特定することはできません。
AdGuard VPNプロトコルを開発したのは、これまでのプロトコルの欠点を知り、それに対処しようとしたかったからです。
では、AdGuard VPNプロトコルの強みは何でしょうか?
既存のVPNプロトコルの中にも、暗号化の課題を達成するものがあり、それらも (VPNが使用されているという事実を) 検出されにくい。
しかし、これは通常、速度の低下という代償を伴います。
いくつかの解決策のおかげで、AdGuard VPNプロトコルは暗号化と速度の両方を保つことができます。
まず最初に、サーバーとの通信にHTTP/3とQUICのプロトコルを使用するように切り替えようと考えています。
HTTP/3は、HTTPの最新・最先端バージョンです。新しいプロトコルは、接続が安定しているときには速度に影響を与えませんが、モバイル機器や公共のWi-Fiに接続しているときなど、接続が悪いときにはそのメリットが現れます。
また、新プロトコルには、パケットの再送やHead of Line Blocking (HoLB)キューが発生しないこと、接続の移行が可能になることなど、いくつかの明らかなメリットがあります。
技術的なことは抜きにして、主な利点は、すでに述べた非理想的な環境での接続品質の向上です。
TCPとその上で動作する他プロトコル(TLS、SSL、HTTP /1.1、HTTP/2)は、しばらく前から存在しており、その機能は素晴らしいものですが、スムーズに動作するためには完璧に近い状態が必要という欠点が一つあります。
つまり、家庭内のWi-Fiネットワークなど、安定した高品質な接続環境であれば問題なく動作します。しかし、モバイルネットワークの外の世界に出ると、電波の弱さや回線の遅さなど、パケットロスを防ぐことができません。
このようなパケットロスは、上記の再送とHoLBに繋がります。
5Gも全能ではなく、エレベーターや駅間の長い地下鉄区間では接続がどうしても悪くなる場合があります。
VPN over HTTP/3を使えば、魔法のようにこの問題が解決します。エレベーターに入っても、その他の理由でネットワークが変わっても、VPN接続が切れることはありません。
現在、この新しい実装のプロトタイプをテストしています。数ヶ月後に完成する見込みでございます。
長い間AdGuardに慣れ親しんでいる方は、当社の製品の多くがオープンソースであることをすでにご存知かと思います。
オープンソースソフトウェアのコンセプトは、私たちにとって身近なものです。なぜなら、このようなプロジェクトは人々を助け、テクノロジーの発展に貢献するものだと信じているからです。
しかし、私たちのアプローチはプライバシーに配慮しているため、可能な場合にのみ製品をオープンソース化しています。
将来的には、AdGuard VPNプロトコル実装を公開する予定です。残念ながら、今ではまだプロジェクトの準備に十分な時間がありません。
今年末までには十分な時間を確保し、サーバーとクライアントの両方の実装のコードを公開したいと考えています。
私たちのプロトコルは、AdGuard VPNの全アプリ(iOS/Android/Windows/Mac)で使用されています。
あなたのデータを最も安全な方法で保護しているいずれ(または複数)のアプリをぜひダウンロードしてお試しください。
また、下のコメント欄やSNS・フォーラムで、ご意見などをご共有いただければ嬉しいです。