今回は、Braveから分散型のVPNネットワーク(VPN⁰)の提案がされ、BAT等トークンを組み込む言及もあったので、設計と課題とトークンについて書いていきます。
distributed VPNについて
Distributed virtual private network(dVPN)は中央集権の主体がいないVPNのことです。dVPNでは、ユーザがVPNクライアント(VPNネットワークにつなぐ側)でもあり、そのリクエストをリレーしたり終わらせるノードでもあります。つまりP2Pな手法をとります。
dVPNは意図せず害のあるトラフィックを流す可能性もあります。実際に、ノード側は気が付かず、dVPNのユーザをノードとして使われたケースもあります。http://adios-hola.org/
前おき
VPNを使った事がある人はご存知かもしれませんが、IPアドレスなどをサーバ側に明かすことなく(正確には別のIPを使って)インターネットに接続することができる解決策です。VPNにつなぐ側が利用するソフトウェアを「VPNクライアント」といい、VPNのネットワークを構築してIPアドレス等の通信のプライバシーを守るための仕事をするサーバを「VPNノード」などと呼ぶことが多いです。本文で使ったので、補足しておきます。
概要
既存のdVPNは、パフォーマンスとプライバシーのトレードオフになっていて、かつプライバシーは上記で書いて通り完璧ではありません。そこでVPN⁰の提案がされています。これはゼロ知識証明を使い、「プライバシーを守りながら認証、検証する手法」です。
(性能的に)ネットワークとして機能するために、VPNのノードはどのトラフィックを伝播・共有するか、例えばあるノードはニュースWebsiteに関連するトラフィックのみ共有したい、などを決めたいわけですが、それを明かすとプライバシーはなくなります。プライバシーを保つために、トラフィックの中身・コンテンツをみたいでそれを実現できる方法が必要です。VPN⁰ ではその両方(性能とプライバシー)のバランスを保って実現できる予定です。
VPN⁰ の設計
ZKP(Zero Knowledge Proof: ゼロ知識証明)を使います。TokenLabでも別の記事で何度か登場しているZKPですが、proverがverifierに対して、情報を開示せずにあるものが正当であると証明する技術です。
VPN⁰ の場合、VPN⁰ クライアント(VPNに接続する側)が、VPN⁰ リレー(ネットワークのノード)に対して、「情報はVPN⁰リレーのホワイトリストにある情報だよ」とか「VPN⁰ リレーがリレーしてもよいトラフィックだよ」ということを証明したいわけです。
つまりVPN⁰クライアント(接続側)がproverで、VPN⁰リレー(ネットワークを構築するノード)がverifierという構成になります。
技術的な内容
ポイント1
VPN⁰は、分散ハッシュテーブル(DHT)という仕組みを利用して、特定のトラフィックに対してそれを運んでくれるVPN⁰ノードをプライベートに見つけます。
これを達成するために、
1.VPN⁰ノードは、ホワイトリストに入っている情報をDHTでアナウンスします。
(ドメイン名のハッシュをキーとして使い、またドメインの公開鍵とIPアドレスを値として使用します)
2.VPN⁰クライアント側は、DHTを活用して、コンテンツを運んでくれるVPN⁰ノードをプライベートに検索します。図1は、アナウンス(ピンク色の破線)と、検索(青い破線)の両方の例を示しています。oZJGiBsW-LcjGIYqb-OsTTTm5OZo5tOVVhFz9UZjexTJL40983FaRXT2VSkhx8YHDfmSo6-nVYTd-34×62-rPvGv0eMbnEj3keQNkTrwL0mOu31DDp45eXzTr24lDq3UeuU91YjQ1138×910
ポイント2:ゼロ知識のトラフィック証明
上の結果、該当のノードが見つかったら、VPN⁰クライアント(VPNに接続したい側)は、「送信しているトラフィックはあなた(VPN⁰リレー)のホワイトリストに含まれているタイプのトラフィックだから、送ってね」と、ホワイトリストに含まれていることを証明する必要があります。ここでゼロ知識を使って証明します。
ここではTLS通信を使って証明を作成します。上の2の部分のDHTルックアップ(検索)の後、VPN⁰クライアントは、VPN⁰リレーのIPアドレスを受け取ります。このVPN⁰リレーとは、対応するトラフィックを取得してくれて、アクセス者の公開鍵(クライアントがアクセスしているWebサイトの証明書に存在するもの)を暗号化してくれるノードです。
この暗号化された公開鍵と証明を組み合わせて、VPN⁰クライアントが、ポイント1のホワイトリスト共有フェーズにおいて適切なノードに接続していることを証明することができます。
※潜在的な攻撃として、リレーとドメインのアナウンス/検索の操作を担当するDHTノード間の共謀があります。
テスト環境と評価、および今後の課題
Braveのブログではテストと評価についても書かれています。VPN⁰の設計が実際の使用をサポートできるように、Mainline(数千万人のユーザーがいるBitTorrent DHT)と、ProtonVPN(人気のVPNプロバイダー)に統合しています。さらにOpenVPNを使用することで、Raspberry Piで最初のVPNパスを実行できるようにしています。これをテスト環境として評価しています。
テストについて
ヘッドレス・ブラウザ(GUIのないブラウザ)がノートパソコン(図でいうとノードS)で実行され、Webサイトにアクセスするとします。
PCからの接続は、ノードSと同じLANにあるRaspberry Pi(ノードX)を介してトンネリングされ接続されます。
新しいWebサイトへのアクセスが開始されるたびに、ノードXはMainlineでDHTクエリを実行します。DHTクエリの入力としてDHTハッシュの1つを使用します。DHT応答を受信すると、ノードXはランダムなProtonVPNサーバー(ノードA)への新しいトンネルを開き、VPNネットワークのセットアップを続行します。一方、ゼロ知識証明はノードSで計算され、ノードAに送信されてゼロ知識証明を検証できます。
今後の課題
このテストで、ゼロ知識証明の計算が、他の処理(VPNネットワークのセットアップやDHT検索)よりも時間がかかっていることが分かっているため、ゼロ知識証明の計算が現在のVPN⁰のボトルネックになっていることがわかっています。ユーザから見たときには、VPN⁰のセットアップ時間は従来のVPNと同じくらい速く、このデモではProtonVPNと同じくらい速度で接続されています。
この分析から、今後の課題/取り組みは潜在的な不正トラフィックの継続時間を最小限に抑えることになっていて、対策としてプロトコルの改善(DHT検索の最適化など)と、ゼロ知識証明の計算のパフォーマンスに良い言語(例: Rust、C ++)に切り替えることが予定されています。
結論
ここにBAT(Basic Attention Token)などのユーティリティトークンに関する一連のインセンティブと組み合わせることができると明記されています。
例えば、トラフィックを運ぶユーザーがBATで報酬をもらい、ユーザーはBATでVPNサービスやサブスクリプションの支払いをするなどです。
ステーキングやバーンというメカニズムを入れることができるかはまだわかりませんが、トークンを組み込むのであれば、トークン支払いでプライバシーが割れてしまうということに注意する必要があると思います(このdVPNの良さが薄れるので)。
TokenLab(会員限定)ではこの他Braveについて複数レポートを配信しています。
- Basic Attention Token(BAT)とBraveの仕組みを見る【Part1】
- Basic Attention Token(BAT)とBraveの仕組みを見る【Part2】
- Brave/BATのフォーク耐性とネットワーク効果を考える
1週間の無料期間がございますので、ぜひお気軽にご登録ください!

- 招待メールが迷惑メールフォルダに送られることもありますので、そちらもご確認下さい。
- 返品・交換・キャンセル等
サービスの性質上、返金はお受けしておりません。 - 中途解約について
月の途中で退会された場合でも、日割りでの返金はできかねます。PayPalで退会処理を行った時点で、Discourseフォーラムでの閲覧が制限されます。 - PayPal決済を使っていますが、PayPalのアカウント持っていない方も、申し込みと同時に登録が可能です。