NYM-Mixnetによる誰にも傍受されないプライバシー通信を試してみた

  • 30 April 2022
Post image

 さて、NYMというプロジェクトをご存じだろうか?2022年4月現在、おそらくほぼすべてのインフラエンジニアやネットワークエンジニアがNYMを知らないだろう。一方で仮想通貨トレーダでこのページたどり着いたひともいるだろう。この記事ではNYMへの投資のお話は一切しないのでご注意いただきたい。エンジニア目線でのプライベートネットワークについてあれこれ考察してみたいというのが目的である。

NYMとは

 NYMとは以下のプロジェクトのことだ。
https://nymtech.net/

 詳しい解説は公式の動画等を参考にしてもらいたいが、平たく言うと、通信の秘匿性を高めるネットワークを提供するプロジェクトのことらしい。

 近年ではWebリクエストはHTTPS(SSL)通信が一般的で、“暗号化"されているといわれる。確かにそれは事実だが、エンジニアの諸君はご存じだと思うが、IPHeaderやトランスポートヘッダーなど"暗号化"されていない部分がある。これは、例えばあなたが入力し送信するクレジットカード情報はしっかり暗号化されているが、あなたの家のグローバルIPアドレスと送信先のIPアドレスやポートなどは見えてしまうってことだ。当然、ハッカーや、国家権力、巨大企業でないと、そもそも特定の通信を傍受することは難しいかもしれない。しかし、例えばあなたが如何わしいエロサイトを見ていたとして、国家権力などがそのエロサイトのサーバーをおさえて調べれば当然、あなたが見たということも突き止められるはずだ。(IPアドレス開示で特定される)

VPNやTorではだめか?

 NYMのサイトでは、VPNやTorとNymを比較している。
 VPNはどこかのVPNサーバーやVPN事業者を介して通信する方法だが、VPNサーバーにはあなたが接続した形跡が残ってしまう。そしてVPN事業者がその情報を外に漏らすならまったく秘匿性がなくなってしまう。また、Torも同じで、Proxyサーバが本当にあなたの秘匿性を確保してくれるかどうかは疑わしい。むしろTorは匿名の存在が無償でネットワークを構築しているらしいので、その中に悪徳な人間がいたり、国家権力がTorネットワークを傍受している可能性がある。

 そこでNYMでは、ネットワークのノード提供者にNymトークンの報酬を与え、さらに通信パケットをばらばらにしてMixnetを通す技術によりプライバシー通信を実現しているらしい。これで、ノードの管理者でさえ通信を傍受できない、送信先でさえ送信元の痕跡を残さない通信が可能になるらしい。つまり、このNymMixnetを使うと国家権力や危険なハッカー集団でさえ、あなたの通信を傍受することができなくなるというわけだ。(本当かどうかはわからん)

Mixnetを介してメッセージを送信してみる

 細かいNYMの説明は置いといて、実際に通信してみたい。現在はTestNetのブロックチェーンでしかできないっぽいので、MainNetは使用しない。
 このページからNYMClientをDLする。(今回はUbuntu用を使う)

 そして以下のコマンドで初期化する。id(nymtest)は任意の名前。

chmod +x ./nym-client
./nym-client init --id nymtest

以下の出力

      _ __  _   _ _ __ ___
     | '_ \| | | | '_ \ _ \
     | | | | |_| | | | | | |
     |_| |_|\__, |_| |_| |_|
            |___/

             (client - version 0.12.1)

Initialising client...
Saved all generated keys
Saved configuration file to "/home/~~/.nym/clients/nymtest/config/config.toml"
Using gateway: 6BJqdfWfBnTHc7m5d6WLYizcBTkyFd11ViVAZ
Client configuration completed.

The address of this client is: 7idWkgF4XqDbHXGv4u2QTKDoJFN5KiH3aq5bR2wgSgUC.5KYpMS7Kp27rv4tPqH7uSPMrz9FNZQU1c4wJ4jhEF9dX@6BJq1kv8P7PRMWfBnTHc7m5dBTkyF5yd6WLYizcViVAZ

これだけで初期化され、~/.nymディレクトリに設定ファイルやpemキーなどが作成される。 ここで表示される以下のアドレスが送受信のためのアドレスになる。

7idWkgF4XqDbHXGv4u2QTKDoJFN5KiH3aq5bR2wgSgUC.5KYpMS7Kp27rv4tPqH7uSPMrz9FNZQU1c4wJ4jhEF9dX@6BJq1kv8P7PRMWfBnTHc7m5dBTkyF5yd6WLYizcViVAZ

 あとは以下のようにするとMixnetに接続するWebSocketクライアントを起動できる。

./nym-client run --id nymtest
      _ __  _   _ _ __ ___
     | '_ \| | | | '_ \ _ \
     | | | | |_| | | | | | |
     |_| |_|\__, |_| |_| |_|
            |___/

             (client - version 0.12.1)

 2022-04-30T11:12:20.163Z WARN  nym_client::commands::run > The mixnode binary has different version than what is specified in config file! 0.12.1 and 0.12.0
 2022-04-30T11:12:20.163Z INFO  nym_client::commands::run > but they are still semver compatible. However, consider running the `upgrade` command
 2022-04-30T11:12:20.164Z INFO  nym_client::client        > Starting nym client
 2022-04-30T11:12:20.173Z INFO  nym_client::client        > Obtaining initial network topology
 2022-04-30T11:12:22.555Z INFO  nym_client::client        > Starting topology refresher...
 2022-04-30T11:12:22.555Z INFO  nym_client::client        > Starting received messages buffer controller...
 2022-04-30T11:12:23.363Z INFO  nym_client::client        > Starting mix traffic controller...
 2022-04-30T11:12:23.363Z INFO  nym_client::client        > Starting real traffic stream...
 2022-04-30T11:12:23.363Z INFO  nym_client::client        > Starting loop cover traffic stream...
 2022-04-30T11:12:23.363Z INFO  nym_client::client        > Starting websocket listener...
 2022-04-30T11:12:23.363Z INFO  nym_client::websocket::listener > Running websocket on "127.0.0.1:1977"
 2022-04-30T11:12:23.363Z INFO  nym_client::client              > Client startup finished!

 “127.0.0.1:1977"でWebSocketを待ち受けしている状態だ。このクライアント起動によりNYMのMixnetに接続して通信できるようだ。それでは、別のネットワークに接続した2台のPCで上記のNYMクライアントを起動してメッセージを送信してみる。

 WebSocket通信はシンプルな「Browser WebSocket Client」というChromeの拡張を使用する。クライアント起動に表示された待ち受けポートを指定して接続する。(ws://127.0.0.1:1977)

 そして、以下のJSONを送信してみる。

{
  "type": "send",
  "message": "これは秘密の情報です",
  "recipient": "7idWkgF4XqDbHXGv4u2QTKDoJFN5KiH3aq5bR2wgSgUC.5KYpMS7Kp27rv4tPqH7uSPMrz9FNZQU1c4wJ4jhEF9dX@6BJq1kv8P7PRMWfBnTHc7m5dBTkyF5yd6WLYizcViVAZ",
  "withReplySurb": false
}

 すると以下のメッセージが受信されます。

"これは秘密の情報です"

 これでMixnetにより完全に秘匿された通信ができている!!のか??少しわかりやすく、このメッセージを"hello"にしてみて、受信側の受信メッセージのバイナリを見てみる。

# 受信メッセージバイナリ
00000000: 0100 0000 0000 0000 0005 6865 6c6c 6f

 確かに16進数の"68 65 6c 6c 6f"の部分が「hello」を表している。それ以外は開始、紹介という実行コードを表す。そもそもソケット通信では、このようにメッセージ部分だけの通信になるが、Mixnetを介して別のクライアントにメッセージを送信することができた。

この技術は不倫などを隠ぺいするためだけに使いましょう

 今回はメッセージをやり取りするだけを試したけど、このNYMネットワークを使用できるメッセージアプリKeybaseなどもあるそうだ。ただ、このNYMは犯罪者がメッセージのやり取りをするためにも使用される可能性がある。人々のプライバシーを守ることは大事だが、犯罪が横行してほしくはないものだ。
 不倫を隠すためとかその程度の使用目的にしてほしい。(NYMでは不倫を隠ぺいすることはできない)

You May Also Like

ENSとfleek(IPFS)でWeb3.0なWebサイトを作成してみた

ENSとfleek(IPFS)でWeb3.0なWebサイトを作成してみた

 2020年ごろから巷で「web3.0」みたいな言葉が流行っている。また、もっと前から仮想通貨のブームもあり、システム業界ももしかしたらどんどんと「分散型」のweb3の時代に突入していくのかもしれない。 私は仮想通貨なんかを少し嗜む程度でweb3の世界のDAOなどのシステムを構築した経験はない。なの …

WindowsでもMacのUS配列キーボードが最強なわけ

WindowsでもMacのUS配列キーボードが最強なわけ

 コードを書く人間なら、キーボードにこだわりたくなるものだ。ノートPCをメインにしている場合はキーボードを変えることは難しいが、それでもJIS配列かUS配列など一度は考えたことがあるはずだ。 このサイトで何度も書いている通り、プログラミングのほとんどは試行錯誤の繰り返しで作り上げてい …