分散型VPNでのパケットの動きを追ってみよう

mixnetがどのようにコミュニケーション・パターンを保護し、オンライン・プライバシーを実現しているのか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672851/7f1d6565-78c7-3a4f-1e4d-3df0d6d57b68.png)
Nymの焦点は１つです：

mixnetテクノロジーの力を一般の人々の手に届けること。これを実現するために、最初の商用アプリであるNymVPNをローンチすること

しかし、mixnetテクノロジーとは具体的に何で、人々にとってどのような効果があるのでしょうか？

ーーーーーーーーーーーーーーーー

インターネットは広大で素晴らしい場所です。情報、ゴシップ、おしゃべりの巨大なグローバルネットワークで、プロトコルによって構成されたネットワークを通じて小さなパケットに分割され、ルーティングされます：TCP/IP、HTTP、UDP、FTP、TLS、DNS...

これらの共通のプロトコルを使用して、毎分数十億のパケットがインターネットを経由します。しかし、問題があります：パケットが追跡できてしまうということです。内容が暗号化されていても、パケットは誰が誰に話しかけているのか、どれくらい頻繁に、どこから発信されているのかを見ることができます。インターネットの標準プロトコルは、通信のパターンをインターネットの一部または全体を見ている誰にでも完全に見える状態にしています。これにはインターネットサービスプロバイダー、VPNプロバイダー、インターネットエクスチェンジ、自律システム、BGPルーター、さらにはWiFiルーター、LAN、そして有名なNSAや他のセキュリティ機関も含まれます。

では、この問題にどう対処すればよいのでしょうか？

すぐにインターネット全体にカバーをかけ、これらのパケットを保護することが重要です。結局のところ、世界中の主要なコミュニケーション手段の1つが、あらゆる種類の人々や企業、機関があなたの知識なしにコミュニケーションを監視することを許すということはばかげており、これは実際には普通の状態ではありません。

mixnetは「オーバーレイネットワーク」であり、インターネットトラフィックにちょうどそのようなカバーを提供します。

数十年前のmix networkのコンセプトにアップデートを加えたNym mixnetは、トラフィックのパターンを混乱させ、企業や政府の監視を防ぐように設計されています。そして、拡張性、使いやすさ、匿名性が重視されています。

mixnetはパケットを複数のホップを経由して送信し、通信のパターンを追跡することがほとんど不可能になるようにミックスします。では、Nym mixnetの5つのホップを通じてその詳細についてもっと学びましょう。

### 以下は全体の旅のTL;DR概要です：

- Nymクライアント（これはあなたのデバイス上に存在し、mixnetに送信する前にパケットを暗号化します）

- entry gateway（これは最初のホップで、mixnetの魔法の世界への入り口です）

- 3つのmix node（これらはパケットのシャッフルを実行し、通信をミックスします）

- exit gateway（データがmixnetから送信される場所）

- Hello world! あなたのパケットは、あなたへのトレーサビリティを持たないままインターネットに入りました。

# Nym mixnetトラフィックの流れステップ1：Nymクライアント

Nymクライアントはあなたのデバイスに存在します。デバイスを離れる前に、それがmixnetに送信される前に、出力トラフィックを取り込み、各パケットを暗号の層で包みます。パケットは、暗号のプリミティブを使用して構築されたデータの断片です。Nym mixnetはSphinxと呼ばれる特殊な種類のパケットを使用しており、これはTCP/IPパケットとは異なります。Sphinxパケットは、コンテンツや通信の機密性を確保するために設計されています。各Sphinxパケットは他のものと同じように見え、そのバイナリパターンに基づいてネットワーク内で追跡できないようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672851/e7ae8d67-641b-c793-258f-367b0d3af2ea.png)
Nym WebAssemblyクライアントが送信するトラフィックの図式表現

高いレベルでは、Sphinxパケットは2つの独立した部分、ヘッダーと本体/ペイロードで構成されています。

ヘッダーにはパケットをmixnetを通じて受信者にルーティングするために必要なすべてのルーティング情報が含まれています。ペイロードにはたとえば、mixnetを通じて送信したい「Hello World！」メッセージといった、通信の内容が含まれます。ヘッダーとペイロードは独立してレイヤー暗号化（layer-encrypted）されており、ルートの各ホップに対して異なる暗号化レイヤーが存在します。これはまた、クライアントがパケットPのためにmix nodeA、B、Cを選択した場合、他のノードはパケットPを正常に処理できないことを意味します。Nym mixnetを介して送信される各パケットに対して、前のノードはSphinxの確認を受け取りますので、それが到着したことを知っています。

Sphinx暗号は、ルーティングの途中でパケットがそのバイナリ外観を変更するように設計された新しいタイプのオニオン暗号（根菜の小さな芯を保護する光沢のある層から名付けられた）です。オニオン暗号化は”bitwise-unlinkability”（ビット単位のアンリンカビリティ）を保証します。要するに、これは、パケットがmixnodeを通過するときに、そのバイナリの外観を変更することを意味します。ルート上のノードやネットワーク全体を観察しているグローバルな監視アクターも、送信者と受信者をリンクできないようにします。たとえば、entry nodeとexit nodeが共謀しても、彼らはバイナリパターンの変化のために共通のパケットを処理したかどうかを判断できません。従来のTCPやUDPパケットはこのような特性を提供しておらず、それらは「入る」際と「出る」際に同じように見えます。

unlinkabilityに加えて、Sphinxはintegrity protectionも提供します。これは、悪意のあるノードがパケットを歪めようとすると、Sphinxがそれを検知し、感染されたパケットの追跡を防ぐためにネットワーク内でパケットが破棄されることを意味します。さらに、Sphinxプロトコルは、IPなどのネットワークの場所を学習する必要なく、パケットの受信者が元の送信者に匿名で返信するためのツールとしてSingle-Use-Reply-Blocksを提供しています。

要約すると、Nymクライアントはユーザーのデバイスまたはアプリに存在します。Nymクライアントは、選択したgatewayとの安全な接続を管理し、通信を暗号化し、パケットをNym mixnetを通じて送信するのを補助します。また、ユーザーの秘密鍵やNYMトークンの保存なども行いますが、それは別の機会に。

https://qiita.com/pseudonym2/items/107cf005e9cab0b165b6


# mix nodeトラフィックフローのステップ2: entry gateway
entry gatewayはmixnetへの入り口です。これはNymクライアントとmixnetの間のプロキシとして機能し、ユーザーがmixnetを使用するために必要なクレデンシャルを持っているかどうかを確認します（彼らまたは彼らが使用しているアプリが公正な使用のために支払ったかどうか）。

すべてのgatewayはNymコミュニティによって運営され、mixnetシステムの完全な分散を確保します。現在、70のgatewaysが存在し、Nym Explorerでルーティングスコアや信頼性などが表示できます。

gatewaysはいくつかの理由で必要です：

- gatewaysは、特定のユーザーがNym mixnetを使用する権利があるかどうか（つまり、それに対して支払ったかどうか）を確認するために、帯域幅のクレデンシャルを確認します。これは、サービス拒否攻撃やフリーライディングなど、ネットワークに貢献することなくネットワークからリソースを搾取することを制限します。

- 第二に、gatewaysは受信パケットのオフラインストレージとしても機能します。つまり、クライアントがオフラインの場合、gatewaysはこの受信通信をオンラインになるまで保存します。

- そして第三に、gatewaysはNymクライアントからmixnetへの、gatewayでもあります！これはまた、gatewayが潜在的にクライアントのIPアドレスを見る可能性があることを意味します。ただし、パケットの宛先やその内容、メタデータについては何も知りません。

スーパーユーザーの場合、最初のホップにIPを公開したくない場合は、独自のgatewayを実行することも可能です。

https://note.com/koko_crypto/n/nd6e715c26879?magazine_key=mf3c63656251a

# mixnetトラフィックフローのステップ3: ３つのmix nodes
あなたのパケットは今、クライアントによってSphinxで暗号化され、entry gatewayに送信されました。では次は？これが魔法の「ミキシング」が行われる場所です！entry gatewayはSphinxの1つのレイヤーを復号して、最初にパケットを送信するmix nodeを確認します。mix nodeとは何でしょうか？「ホップ」はmix nodeであり、Nymコミュニティの誰かが作成した独立して実行されるサーバーです。すべてのmix nodesはNym Explorerで表示できます。

このホップは地理的な近接性や「アクティブセット」に選択されたmix nodesがどれであるか等を含む、多くの要因に依存します。アクティブセットは単に現在アクティブでトラフィックをミキシングしているノードの量で、常に240です。

この「アクティブセット」は毎「エポック」（現状、1時間）で変更され、ノードのパフォーマンスと評価をチェックする選択アルゴリズムがあります。これにより、トラフィックパスが継続的に変化し、敵対的なノードオペレータによって悪意のあるパスが確立されないようになります。

mixnetの「レイヤー」とは何でしょうか？mixnetはノードを”stratified topology（層状のトポロジー）”と呼ばれるものに配置します。これは、ノードが3つのレイヤーにグループ化され、これらのレイヤーに分散された3つのホップがあることを意味します。これにより、水平スケーラビリティ、効率、設計による匿名性が確保されます。

データパケットが経路付けられると、各レイヤーからランダムにmix nodeが選択され、3つのホップを持つパスが構成されます。こちらをご覧ください：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672851/324d798e-a770-339a-b5ec-fae698bfe3fa.png)



これらのメカニズムだけで、従来のVPNや他の分散型のプライバシー保護技術と比較して、ユーザーの匿名性が大幅に向上します。

しかし、それだけではありません。さらにパケットを「追跡」することを非常に困難にする2つの非常に重要な機能があります。それらは、”timing obfuscation（タイミングのぼかし）”と”cover traffic（カバートラフィック）”です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672851/93b7ae79-b516-1109-3e86-498de6ea522f.png)

タイミングのぼかしは、３つの各mix nodeによってパケットの順序が入れ替えられ、再配置されることを意味します。これにより、監視者が受信パケットと送信パケットを関連付けることがほぼ不可能になります。これらの間隔は、人間にはほとんど感知できません。

さらに匿名性を向上させるために、実際のデータパケットはすべてカバートラフィック（cover traffic）と混在させられます。これらは実際のデータパケットと同じサイズの空のデータパケットです。これらはプライバシーに役立ち、ネットワークを監視している者には役立たない偽の通信の中で通信パターンを覆い隠します。

# Nym mixnetトラフィックフローのステップ4: exit gateway
あなたのパケットは今、その旅の最後のホップに到達しました：exit gatewayです。exit gatewayはパケットの最終目的地を復号化し、サービスプロバイダと協力して、パケットをどのclearnetのウェブサイトやアプリに接続するかを決定します。

gatewayは最終目的地を見ることができます。ただし、データは各パケットごとに経路付けられます。つまり、悪意のあるexit gatewayが設定され、アクティブセットに選ばれた場合でも、あなたのトラフィックのごく一部しか見えません。さらに、gatewayは平文を見ません。コンテンツは依然として元の送信者によってエンドツーエンドで暗号化され、受信クライアントによってのみ復号されます。

# Nym mixnetトラフィックフローのステップ5: Hello world!
あなたのパケットは今、mixnetの保護カバーを通過し、世界の残りに到達しました。あなたのトラフィックのパターンは保護され、データはエンドツーエンドで暗号化され、スヌーパーはもうあなたのパケットを見失っているでしょう。しかし、この旅は送信されるパケットのためだけのものです。返信の場合はどうなるのでしょうか？そして、アプリがmixnetを介して情報を取得したい場合はどうなりますか？

NymはSingle Use Reply Blocks、またはSURBsと呼ばれるものを使用しています。これにより、アプリケーションはmixnetを介して他のアプリケーションと匿名で対話できます。

クライアントアプリケーションが他のオンラインサービスや他の人のマシン上のP2Pアプリケーションと対話する必要があるとします。gatewayやclientキーを明らかにせず、（そしてmixnetを介した匿名性のポイントを無効にすることなく）SURBsは匿名の対話を可能にします。

SURBは、元のアプリケーションのアドレスで終わる返信パスを詳細に示すSphinxヘッダーの層ごとに暗号化されたセットです。これらは送信者のクライアントによって暗号化されており、受信サービスやアプリケーションは誰に返信しているかを知らずに、その応答を添付してSphinxパケットを送り返すことができます。

ファイル等の大きな匿名の返信の場合、mixnetは「MultiSURBs」と呼ばれるものを使用します。これは、単一ではなく複数のデータ容量を処理するためのSURBの束を作成します。

オンラインでのプライバシーと匿名性の権利は残念ながらしばしば攻撃されます。これは、オンラインセキュリティの向上の基盤であるにもかかわらずです。exit gatewayを運営するTorの友人は、exit gatewayが押収される経験をしています。この理由から、Nymオペレーターコミュニティは、世界中でのベストプラクティスの共有を開始するための法的フォーラムを設立しています。

# 参考リンク

- [Nym公式サイト](https://nymtech.net/)
- [Nymのミキシングネットワーク - Wikipedia](https://ja.wikipedia.org/wiki/Nymミックスネット)
- [Nymホワイトペーパー](https://nymtech.net/nym-whitepaper.pdf)
- [分散型VPN と中央集権型VPN:違いの全て](https://note.com/koko_crypto/n/n71fe7e92b68a)
- [ミックスネットとは何か？ VPNによる比類なきオンラインプライバシー](https://note.com/koko_crypto/n/n302e7516f691?magazine_key=m0129d65e3526)
- [Sphinx暗号-Nymを支える匿名データフォーマット](https://qiita.com/pseudonym2/items/107cf005e9cab0b165b6)
- [ココナッツ認証（Coconut Credentials）とは？- プライバシーを保護するゼロ知識証明技術](https://qiita.com/pseudonym2/items/b2739ae32f4fb29de0b6)


# コミュニティ

- [Nym日本コミュニティ - Telegram](https://t.me/nymjapanese)
- [Nym日本コミュニティ - Discord](https://discord.com/invite/nym)
- [Nym日本コミュニティ - LINEオープンチャット](https://line.me/ti/g2/0YGYYq4EoQZ8fL5FYQmqU4O9SRuE_a6YX19GtA?utm_source=invitation&utm_medium=link_copy&utm_campaign=default)
- [Nymプロジェクト日本語アカウント - X](https://x.com/nymproject_jp)