VeilSwap
← All posts
ガイド2026-10-279 min read

リモートノードと自前ノード:ウォレットは何を漏らすか(2026年実測)

公開モネロ端点を 2 台実測しました。8 メソッドが応答し、9 メソッドが -32601 で拒否され、272 KB のブロックが 1,401 バイトで返ってきました。ノードが見えるもの・見えないものと、それを決める Dandelion++ の定数です。

二つの問いが一つに混ぜられ、そこから間違った助言が生まれます。一つ目、ウォレットが接続しているサーバーはあなたの行動を見られるのか。二つ目、ブロックチェーンはあなたが誰かを記録するのか。2026年10月27日18:00 UTC、私たちは一つ目を直接測りました。公開モネロノード node.monerodevs.org:18089 と xmr-node.cakewallet.com:18081 は同じ tip ハッシュ c0268f79、同じ高さ 3,793,455 を返し、8 つの読み取り専用メソッドに答え、9 つには JSON-RPC -32601 Method not found を返しました。この一つの結果が、プライバシーというスローガンより多くを語ります。

すべての RPC 呼び出しは、他人のディスクに残る一行のログです。IP、メソッド名、引数、タイムスタンプ。実測で通ったのは get_info、get_version、get_block_count、get_block、get_last_block_header、get_block_headers_range、get_fee_estimate、get_output_histogram。拒否されたのは get_peer_list、get_connections、get_net_stats、get_transaction_pool、get_transaction_pool_hashes、get_transactions、get_outs、get_coinbase_tx_sum、send_raw_transaction。制限モードはメソッドを隠すだけでなく、フィールドをゼロで埋めます。これが良い手がかりになります。get_info は restricted true、入出力の接続数 0、alt_blocks 0、start_time 0、free_space 18,446,744,073,709,551,615(2^64-1、符号なしの最大値)、version は空文字列でした。ソースでも各フィールドが restricted ? 0 : 値 になっています。 (モネロの手数料の仕組み)

ウォレットはノードに残高を聞きません。ブロックを要求し、ダウンロードし、自分のマシンで view key を使って復号します。だからノードの選択と鍵の保管は別問題です。ヘッダーしか返さない公開端点で同期が終わらない理由もここにあります。高さ 3,793,455 のブロックは 272,341 バイト、38 トランザクションと報告されましたが、get_block が返した blob は 1,401 バイト、0.51% で、ヘッダーと採掘トランザクションだけでした。1,000 ブロック分のヘッダー範囲は JSON で 891,929 バイト。メインネットのデータベースは 295,279,001,600 バイト、275.0 GiB です。削られた端点では同期が終わりません。

境界はこうです。リモートノードが得るのは IP、おおよそのオンライン時間、要求したブロック高、そして broadcast を受け付ける端点なら txid と送信元 IP です。得られないのはアドレス、残高、出力で、view key を持たず、チェーン上の金額はもともと隠れているからです。実際に得られるのは相関です。同じ IP が繰り返し新しいブロックを要求すればウォレット。18:0x に取引を送った IP は、その取引を作った本人である可能性が高い。

自前ノードはその経路から第三者を外します。中継は自分のデーモンが行い、モネロは中継を Dandelion++ で包みます。定数はそのままです。CRYPTONOTE_DANDELIONPP_STEMS は 2(epoch あたり 2 本の stem 送信接続)、epoch は 10 分±30 秒、embargo は平均 39 秒、fluff 確率は 100 分の 20。levin_notify.cpp は 100 未満の乱数とこの定数を比較するので、5 回に 1 回の epoch は stem を使わず即 broadcast します。既定のノードは出站 12 本と anchor 2 本を維持します。

どれもチェーンに残る記録は変えません。自分の入力、交換サイトが発行した入金アドレス、金額、時刻は、どのノードが中継しても結び付いたままです。ネットワーク層も同じで、ISP にはモネロ P2P への長い暗号化接続が見え続けます。その接続へのトラフィック分析は RPC ログとは別の攻撃面です。実際には、自前ノードは IP と取引の結び付きを、見知らぬ運営者から ISP と最初に取引を見たピアへ移すだけです。範囲は狭くなるが、空にはなりません。ネットワーク層が目的なら --proxy socks5://127.0.0.1:9050 で、--proxy-allow-dns-leaks の既定は false です。

もっと悪い版も見ておく価値があります。ビットコインの electrum.blockstream.info:50002 に認証なしの TLS を 1 本張ると、electrs-esplora 0.4.1、プロトコル 1.4 と名乗りました。鍵もアカウントも握手も不要です。あるアドレスの scripthash を一つ尋ねただけで、67,156 件の履歴、確認済み残高 5,769,022,283 sat(未確認 3,672)、そして更新を押し出す購読が返りました。ビットコインの軽量ウォレットは、自分が持つアドレスを scripthash 単位でサーバーに教える必要があります。モネロのリモートノードはもっと狭い。同じ軽量クライアントでも、渡す情報量は桁が違います。

他人のノードにウォレットを向ける前の 6 項目。第一に get_info の restricted を見る(true は他人の公開端点)。第二に Method not found を不具合ではなく信号として扱う(公開端点が状態変更系とハッシュ照会を隠す方法)。第三に、信頼しない公開ノードで自分の txid を照会しない(IP と txid を結び付ける唯一の呼び出し)。第四に、リモート経由で broadcast するなら初見時刻が残ると仮定する。第五に、デーモンを Tor 経由にするなら --proxy を使い、--proxy-allow-dns-leaks は false のまま。第六に、自分でノードを動かすとき、他人に提供する意図がなければ --public-node を付けない。 (Torでのスワップは安全?)

実際の交換ではこうなります。注文はノードもウォレット接続も要求しません。VeilSwap が必要とするのは売る資産、買う資産、数量、受け取りアドレス、返金アドレスで、入金アドレスは注文ごとに生成されます。ノードの選択が変えるのは、あなたの IP がインフラに何を明かすかであり、注文が明かすものではありません。残りは算術です。2026年10月27日18:0x UTC の当サイト見積もりでは、100/500/1,000/5,000 USDT-TRC20 が 0.14632886/0.80265134/1.62303474/8.18504305 XMR、XMR あたり 683.39/622.94/616.13/610.87 ドル。少額注文は固定費で約 11% 不利です。1 XMR は 581.884075 USDT、0.05 BTC は 6.60798844 XMR(132.15977 XMR/BTC、BTC 換算約 79,699 ドル)、同時点の現物は XMR 599.33、BTC 80,546。表示は動くのでページが基準です。同じ時間帯、1,534 バイトの取引は 20,000 piconero/バイトの下限で 0.00003068 XMR、約 2 セントでした。 (XMR→USDT 出口ルート)

短くまとめます。リモートノードはタイムスタンプ付きの観測者で、鍵の持ち主ではありません。IP と活動、IP と送信を結び付けられますが、金額・アドレス・残高は読めません。自前ノードはその観測者を broadcast 経路から外し、同じ相関を ISP に渡します。Dandelion++ は 5 epoch のうち 4 つで出所を隠します。どちらもチェーンの記録には触れません。漏れるもの基準でノードを選び、残るもの基準でチェーンを選び、信じる前に restricted を確認してください。

Frequently asked questions

リモートのモネロノードは残高やアドレスを見られますか?

いいえ。見えるのは IP、要求したブロック高、中継した取引の txid です。出力は自分の view key でローカルに復号され、チェーン上の金額はもともと隠れています。残高を読める鍵は持っていません。

自前ノードを動かせば XMR 交換は匿名になりますか?

いいえ。第三者のノードを broadcast 経路から外すだけで、入力と入金アドレスのオンチェーン上の結び付きは残ります。Dandelion++ は 5 epoch に 1 回そのまま broadcast するため約 20% は stem 保護なしで、ISP には長い P2P 接続が見えたままです。

公開ノードで get_transactions が失敗するのはなぜですか?

公開端点は閲覧専用のサブセットしか出していないからです。実測した 2 台では get_transactions、get_outs、send_raw_transaction が JSON-RPC -32601 Method not found を返し、高さ 3,793,455 の get_block は 272,341 バイトのブロックから 1,401 バイトだけを返しました。ヘッダーは読めても、ウォレットの同期には足りません。

Keep reading

All articles →

Ready to swap?

No account · No KYC · No email

Exchange now
リモートノードと自前ノード:ウォレットは何を漏らすか(2026年実測) — VeilSwap