モナコインのP2Pに「主要ノード」なるものは存在するか
某匿名巨大掲示板を眺めていたら、モナコインの板にしては珍しく、技術的というかセキュリティ的というか、その手の話を見かけました。
両者の前提認識がすれ違ったままで、あの掲示板の定常運転だなぁという読書感想文ですが。
その椅子の投げ合いの中で興味深い対立があったので、ちょっと調べてみました。
Ⓜ
ちょっと読みづらいので、無職業者BOTの手で対立点を整理すると…。
モナコインのP2Pネットワークには、偏りがあり「主要ノード」が存在する。dnsseed はそのヒントになる。
vs
「主要ノード」なるものは存在しない。時間が経つにつれ接続ノードは変わり、peers.dat で永続化されるから。それが P2P ってものだ。
教科書的には後者のほうが正しそうに思います。
しかしながら、ビットコインにせよイーサリアムにせよ、peer の偏りを積極的に生み出そうという攻撃への対策が、しばしば取られたことも、歴史が示すところでもあるようにも思います。
Ⓜ
こういう対立には「推測するな、計測せよ」の態度を取るのが適切な態度でしょう。幸い、行きがかり上の理由で世界各地に分散させたモナコインのノードが手元にあります。いくつか拾って見てみましょう。
左から、4カラムが、monacoin-cli getpeerinfo の結果から取り出した peer の情報、1〜3カラム目は互いに地理的に十分離れていますが、3〜4カラムは同じデータセンタに存在ます。厳密を期するためには inbound/outbound 等の考慮も必要ですが、今回は荒っぽく、無視します。
今回使ったノードは、Monaparty や Lightning Network の基盤として動作しており、peers.dat が生成されてから短くとも 2 年以上(おそらく3年以上)ほぼ連続動作をしています。P2P の理想通りなら、seed の影響は無視できる程度に消えているはずです。
5 カラム目は dnsseed.tamami-foundation.org が返してきた seed 情報です。tamami-foundation.org は脇山P氏の運用であり、今回サンプルで使ったノードとP2Pネットワーク的に近くなる必然的な要素はありません。
さて、ざっと眺めてみましょう。
朱色で色付けした peer は、dnsseed の一覧にも各ノードの peer info にもあるものを示しています。手元にあった全てのノードで、dnsseed が示したノードへの攻撃を行えば、ここに示した 4 ノードを 1 hop で落とせる可能性が高まります。(「必ず成功する」ではありませんが)
緑色で色付けした peer は、左端のノードの peer info が持つアドレスと peer info を示しています。左から3番めのノードと共通する peer はありません。今回収集したデータで言うならば、dnsseed を使う攻撃よりも速度感で劣る可能性があります。
荒い調査なので断言はできないですが【現在のモナコインの P2P ネットワークには偏りがあり、dnsseed はネットワーク攻撃の起点としての「主要な」ノードを紹介してくれる諸刃の剣である】という示唆は得られたのかもしれません。
Ⓜ
長期運用しているノードで、なぜ dnsseed リストに載っているノードとの結びつきが強めに存在するのか。理由は、正直なところ、分かりません。
dns seeder が捕捉するようなノードは、正しく運用され性能的にパワフルである可能性は高く、結果として peerinfo のリストから外されないのかもしれません。そのようなノードは、仮に一時的にリストから外れても、再度リストに復活する、という仮説も立てる余地はありそうです。サンプルが少ないので、偶然、dnsseed の影響力が高く見えただけ、という可能性も無視はできなさそうです。
ここから先は、時間軸やノード数を増やした上で計測する必要があるでしょう。
正解は保留…というか疲れたので続けるつもりがない…ですが、雑な感じでも、調べてみると色々と見えることはありますよね、ということで。
あと蛇足。
こういう分析が出るたびに、無闇に怖がったり「FUDだ!」と反発したりする読者が出てくるのですが。
真に怖いのは「実際のところがどうなのか、問題が表面化するまで誰も調べていなかった」という状態ですので。そこは履き違いなさいませぬよう。