Tor ミラー監査:.onion の交換サイトは同じサイトか
8つのパスを Tor とクリアネットで二度取得:API はバイト一致、HTML は正確に150バイト差、5組のセキュリティヘッダが消え、2つの解析の片方は今も動く。
測れる約束。 .onion ミラーを掲げるプライバシー系交換サイトは、どれも同じ暗黙の主張をしています——あれは同じサイトだと。マーケティングページは監査できませんが、この主張はできます。2026年11月7日 06:14–06:19 UTC、8つのパスを二度ずつ取得しました。一度は Tor の SOCKS5 ポート経由で名前解決をプロキシに任せ(`--socks5-hostname`、.onion 名はローカルリゾルバに触れない)、もう一度はクリアネットのドメインへ直接です。比較したのはステータス、バイト数、ヘッダ、レイテンシです。 (Torでのスワップは安全?)
バックエンドはバイト単位で同じ。 JSON は両側で完全一致:`/api/currencies` は各経路で 71,655 バイト、1,000 USDT-TRC20 の見積は両側 181 バイト、存在しない注文 UUID は同じ 21 バイトの 404、`robots.txt` 525 バイト、`sitemap.xml` 448,943 バイト。別デプロイや古いコピーの痕跡はありません。ミラーは同じ Next.js オリジンを別経路で公開したもので、それはまさにミラーのあるべき姿であり、だからこそヘッダの差が内容の差よりはるかに重要になります。 (XMR→USDT 出口ルート)
150バイトの差の正体。 オニオン側の HTML はどれも正確に150バイト小さい:ホーム 72,531 対 72,681、`/exchange` 44,775 対 44,925、ブログ 64,617 対 64,767。ホームの最初の分岐は49,874バイト目で、連絡先リンクです。クリアネットは `<a href="/cdn-cgi/l/email-protection#0e7d…">` と `/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js` を配り、オニオンは素の `mailto:[email protected]` を配ります。Cloudflare のメール難読化で、150バイトは全部それです。つまりミラーのほうが書き換え前のオリジンで、二つのコピーのうち正直な側です。
5組のヘッダが消える。 クリアネットは HTTP/2 で `strict-transport-security: max-age=31536000; includeSubDomains; preload`、`x-frame-options: SAMEORIGIN`、`x-content-type-options: nosniff`、`referrer-policy: strict-origin-when-cross-origin`、`permissions-policy: camera=(), microphone=(), geolocation=()`、さらに `nel`、`report-to`、`cf-ray`。オニオンは HTTP/1.1 で `content-type`、`vary`、`date`、`connection` のみ。frame 保護がないので iframe に埋め込めます。nosniff がないので型の誤った応答が古いブラウザでスクリプトとして解釈され得ます。referrer はブラウザ既定に戻り、ページから第三者への遷移で origin だけでなく完全な URL が渡り得ます。HSTS はオニオンでは本当に無意味です——443 番は SOCKS5 接続ごと拒否され、ピン留めする TLS がない——しかし残る四つは違います。
キャッシュ、プロトコル、オリジンが本当に送るもの。 クリアネットの HTML は `cache-control: public, max-age=0, s-maxage=300, stale-while-revalidate=900`。オニオンはキャッシュヒット時に同じ行、コールド時に `private, no-cache, no-store`——CDN のない Next.js オリジンの素の挙動です。`/api/*` の非対称はより明快:クリアネットは `no-store`、オニオンは cache-control を一切返しません。クリアネットには `alt-svc: h3`(HTTP/3)もあり、ミラーは HTTP/1.1 のみ。どれも交換を壊しませんが、二つのコピーが別の層で作られ、その片方だけが設定されていることを示します。
解析は一つ切れ、一つは切れていない。 ページソースの Clarity ローダには明示的なガードがあり、hostname が `.onion` で終われば script タグを作る前に return します。UStat のタグ——`spst2.com/ustat.js`、`afterInteractive` で読み込み——にそのガードはなく、タグはオニオンの HTML にそのまま現れます。配られるものを検査し、スクリプトは実行していないので、これはタグについての記述で、送るペイロードについてではありません。それでも非対称が結論です。「オニオンに解析はない」は二つのスクリプトの片方についてのみ正しく、両者の差はコード一行です。
Tor の代価は秒。 オニオンのホーム5回の TTFB は 1.81–1.90 秒(中位1.86)、クリアネットは 0.053–0.070 秒。見積 API は3回で 2.49–6.03 秒対 0.21–0.58 秒。448 KB の sitemap は端から端まで 4.50 秒対 1.34 秒。ホームは圧縮で 16.6 KB、1.99 秒で完了——問題はペイロードではなく回線です。注文には無関係:見積は約120秒有効、入金枠は30分で、3秒の読み込みは何も変えません。15ペア見て決める立場では、道具と雑用の分かれ目になります。 (Torでのスワップは安全?)
クリアネット側に足りないもの。 Tor Browser は `Onion-Location` ヘッダを見つけるとワンクリックの転送を提案します。クリアネットの応答にそれはなく、すでに Tor 上にいる訪問者は住所を誰かに教わらなければなりません。ミラー自体は行儀が良い:`<link rel="canonical" href="https://veilswap.io">` を保ち、重複として索引されず、`robots.txt` と `sitemap.xml` もクリアネットと同じ 525 と 448,943 バイトです。検索には正しいが、発見可能性は住所が公開されている場所に依存します。 (Torでのスワップは安全?)
どのミラーでも七つの手順、そして当サイトの答え。(1)API のボディをバイト比較。(2)HTML 一篇を diff し、差分を全部説明する。(3)ヘッダを diff、特に nosniff、frame、referrer。(4)配られる HTML で解析ホストを grep。(5)TLS がそもそも存在するか確認。(6)TTFB は一回ではなく五回。(7)クリアネット側の `Onion-Location` を見る。当サイトの答えは、同一バックエンド、150バイトのメール書き換え、5組のヘッダ欠落、2つの解析のうち片方だけ停止、HTTP/1.1 のみ、約1.8秒の追加遅延。執筆時点(2026-11-07 06:1x UTC)、100 USDT-TRC20 は 0.14333064 XMR、1,000 は 1.612097 XMR(2ルート、148bps 優位)、逆方向は 1 XMR = 607.322 USDT。カタログは438資産・65ネットワーク・52ステーブルコイン、うち6種は追加IDが必要。数字は動く、ページのライブ見積が正です。 (XMR→USDT 出口ルート)