ブラウザが教えてくれたすべての情報を表示するWebページ
(sinceyouarrived.world)- このページは、訪問直後の最初の数ミリ秒のあいだにブラウザが渡したデータだけを使って、位置情報、デバイス、ブラウザ、言語、GPU、バッテリー、フォント、ユーザーの設定などを表示し、エクスプロイトやハッキングは行わず、公開され文書化された標準機能のみを使用している
- すべてのリクエストヘッダーに含まれる IPアドレス を ip-api.com · Free tier · CC-BY-SA に送り、都市名とインターネットプロバイダー名に変換しており、照会結果は保存せず、画面には一部のオクテットだけを表示するが、残りも把握できると明記している
- フォントフィンガープリント はレンダリングされたテキストの幅からインストール済みフォントを検出し、Electronic Frontier Foundation · Cover Your Tracks はブラウザの固有性を確認するツールを提供しており、2014年のPrinceton研究では上位100,000サイトの5%で キャンバスフィンガープリント が見つかっている
- ページ上では実行していないが、単一のユーザージェスチャーで最後にコピーした内容の読み取りを要求できる Clipboard API、バッテリー残量と放電時間から最大30分追跡できる可能性を示した「The Leaking Battery」、faviconでログイン済みサイトを検出する手法が存在する
- サーバーへ送られたのは 到着 と 完了 の2つの匿名イベントだけで、
cookies,localStorage,sessionStorage,IndexedDB, サービスワーカーのキャッシュには何も保存せず、タブを閉じると訪問者を忘れると明記している
ブラウザが到着直後に渡した情報
- taken. のすべての観測は、訪問直後の最初の数ミリ秒のあいだに訪問者のブラウザから得られたデータであり、エクスプロイト・脆弱性・ハッキングなしに、公開され文書化された標準機能だけを使っている
-
位置情報
- すべてのリクエストヘッダーに含まれる IPアドレス を ip-api.com · Free tier · CC-BY-SA に送り、都市名とインターネットプロバイダー名へ変換している
- 照会は一時的なもので、どちら側にも保存されず、画面にはIPの最初と最後のオクテットのみを表示するが、残りも分かると明記している
- GDPRでは、IPアドレスは追跡に使われる場合に個人情報と見なされ得るが、taken.は追跡・保管・ログ記録を行わない
-
ブラウザAPI
- 画面、ブラウザ、言語、GPU、コア数、バッテリー、フォント、ユーザー設定といったデバイスの観測値は、MDN Web Docs · Mozilla · CC-BY-SA 2.5 で公開・文書化されている標準JavaScript APIから取得している
- これはブラウザの設計どおりに可能な動作であり、「問題は設計そのものだ」という結論につながる
-
フォントとキャンバスフィンガープリント
- レンダリングされたテキストの幅からインストール済みフォントを検出する フォントフィンガープリント 手法は2010年から文書化されており、Electronic Frontier Foundation · Cover Your Tracks はブラウザがどれほど固有かを確認するツールを提供している
- ほとんどのブラウザは、クッキーがなくてもオープンWeb上で追跡できるほど固有であり、フォントの組み合わせはその中でも最も強いシグナルの1つである
- Princeton University · Web Transparency & Accountability Project の2014年研究は、キャンバスフィンガープリント を実際のWebで初めて文書化し、上位100,000サイトの5%で発見した
- キャンバスフィンガープリントは、訪問者のブラウザに隠し画像を描画させたうえで、レンダリングされたピクセルを識別子として読み戻す方式であり、taken.はこの手法を実行していないが、ブラウザは対応している
-
クリップボードとバッテリー
- MDN · Clipboard API specification によれば、クリックやタップのような単一のユーザージェスチャーによって、ページは最後にコピーした内容の読み取りを要求できる
- 最後にコピーした内容は、パスワード、住所、下書きメッセージかもしれず、taken.は要求していないが、機能自体は最新ブラウザに存在する
- Olejnik、Englehardt、Narayananによる2015年の論文「The Leaking Battery」は、バッテリー残量と放電時間の組み合わせだけで、クッキーやアカウントなしに複数のWebサイトをまたいで最大30分間、訪問者を追跡できることを示した
- Firefoxは2016年にこのAPIを削除したが、ChromeとEdgeは依然として公開している
実行しなかった手法と残さなかったデータ
-
ログイン済みサイトの検出
- taken.は実行していないが、ブラウザに特定サービスのfavicon URLを読み込ませ、成功・失敗を観測することで、どのサイトにログインしているかを検出する手法は、文書化されており、合法で、広く流通している
- ログイン状態とログアウト状態で異なる画像が返る差を利用し、許可なくFacebook、Google、X、GitHub、Reddit、LinkedInなど複数サービスへのログイン有無を知ることができる
-
ブラウザ内で計算したバーコード
- カウントの下に表示される 16本の線 は、GPU、フォント、画面サイズ、言語、タイムゾーン、OS、ブラウザ、色深度から導かれた高さで構成される
- 同じデータは同じバーコードを作り、異なる訪問者は異なるバーコードを見ることになり、計算はブラウザ内でのみ行われ、送信されない
- まったく同じフィンガープリントを持つ人がいれば同じバーを見るが、その可能性は低い
-
文章の生成方法
- すべての文章はMattが自分で書いており、実行時に言語モデルが文章を書いたり修正したりはしない
- コードは、ブラウザが返した値に応じて、あらかじめ書かれた文章テンプレートの1つを選び、人間が書いた文章で扱えない条件であれば何も言わないように作られている
-
サーバーへ送ったもの
- サーバーへ送られたイベントは 到着 と 完了 の2つの匿名イベントだけで、クッキー・識別子・保存されたIPはない
- サーバーは各リクエストの本文を破棄し、何も返さず、リクエストがあったというトランスポート層の記録は、ホスティング事業者の標準保存期間である通常数日間、ログに残る可能性がある
- ほとんどのサイトは広告事業者、フィンガープリント収集者、セッションリプレイツール、タグマネージャーに数百の追加ビーコンを送るが、taken.は自前のサーバーへ2つだけ送り、その事実を知らせている
-
デバイスに保存したもの
cookies,localStorage,sessionStorage,IndexedDB, サービスワーカーのキャッシュには何も保存しない- 画面に表示されたデータはブラウザ内で計算され、IPジオロケーション照会と2つの匿名イベントを除けば、デバイスの外へ出ない
- タブを閉じるとtaken.は訪問者を忘れ、ソース公開とともに「ほとんどのページはそう言えない」と締めくくっている
-
シリーズの文脈と制作
- Vol. Iは訪問者が滞在しているあいだに世界で起きたこと、Vol. IIは見逃した空、Vol. IIIは足元にすでにあったもの、Vol. IVは訪問者自身へと徐々に絞り込まれていく構成を持つ
- ページは Matt が Rise Up Labs で制作し、その後のエディションは X と Bluesky に掲載予定である
2件のコメント
Lobste.rs の意見
年を取って皮肉っぽくなったのかもしれないが、ここで示されているものに意味のある新しさはない。「hot singles in your area」ミームも、もうほぼ20年は経っている気がする
どの情報をブラウザが公開すべきか疑問に思うものもあるが、一部はフィンガープリンティングに使われる一方で、基本機能にも必要だ。たとえば、Webサイトが自分のダークモード嗜好を知っているほうがよいし、タイムゾーンに合わせて日付や時刻が表示されるのも便利だ
このサイトは実質的な情報を与えるというより、フィンガープリンティングを扇情的に見せているだけに近く、フィンガープリンティングが気になるなら EFF の https://coveryourtracks.eff.org のほうがはるかに良い資料だ
プライバシーは重要だと思っていて、追跡をある程度減らそうとする対策もしているが、フィンガープリンティングを制限することが実際に役立つとはあまり思えない。フィンガープリントをなくそうとすればブラウジング体験は極端に不便になり、その中間段階はむしろさらに独特なフィンガープリントを作る可能性が高い
それに、ここで追跡しているものの多くはあまりに一般的だ。みんなが同じフォントを使い、明るいテーマを好み、同じ地域に住んでいるなら、どうやって各人を非常に固有に区別するプロフィールを作れるのか?
美しいデモで、アニメーション効果で時間とともに情報を明らかにしていくやり方は気に入った。ただ、分析や文章は自分の好みには少し 感情先行 すぎる
たとえば、このページがブラウザについて「理解した」としている情報の多くは、Firefox が実際のデバイス状態と無関係にハードコードされた値として出しているものだ。フィンガープリンティングを行う側はその違いに気づかないだろうが、Firefox は CPU 数や画面解像度のようなデバイス固有情報では一貫性を優先している
Firefox では、このページは自分の GPU 情報がブラウザによって「隠された」と言いながら、同時にブラウザが GPU 情報を渡したとも言っている。単なる雰囲気なのか?
別の話として、他のWebページで追跡可能性を見るときは普通 エントロピー を測ったり、どれだけ固有かを見ようとしたりするが、そのアプローチにも残念ながら欠陥がある。ブラウザによっては「CPU がいくつか」より細かく取得できる API にランダム性を加えるからだ
たとえば Firefox は Canvas フィンガープリンティングには常に固有に見えるので怖く見えるが、実際には毎回 異なる 固有フィンガープリントを持つ。通常モードとプライベートモード、あるいは異なるコンテナでフィンガープリントのテストページを開けばわかる
はは、その通り
インターネット初期には「あなたのコンピュータは IP アドレスを放送しています!!!」みたいな文句のバナー広告があった。このサイトはその時代を強く思い出させるし、アクセスしたWebサイトが自分の使うデバイスや接続について何かを知っていることが、漠然としていて言葉で説明しにくい形で危険だという発想もよく似ている
外に出れば人は自分の顔を見る。店に入れば他の客は自分がどの棚を見ているか分かる。卵を1パック買えば、店はタイムスタンプ付きの販売記録を残すだろうし、誰かが店の外で出入りを記録していれば、ゴミ箱からレシートを見つけて自分が卵を買ったことも分かるかもしれない
常に起きている恐ろしいプライバシー侵害に怯えてブラインドを閉め、家に引きこもって Tor で買った Monero だけで世界と関わることもできるし、これは人類が存在して以来ずっと人生の一部であり、サイトが自分の ローカルタイムゾーン やコンピュータの CPU を知っているからといって大きな害が生じるわけではないと受け止めることもできる
そして「それが人生なんだから受け入れるか森で暮らせ」と言うのは、この世界のどんな問題を解決するにも良いアプローチだとは思わない
だが彼らがただちらっと見るだけでなく、全員が近寄ってきて自分の顔をスケッチし、時計を見て時刻を書き留め、着ている服や場所を記録するとしよう。どこへ行くのか尋ねるかもしれない。私たちが急速に向かっている世界では、政府発行の身分証のコピーまで作るかもしれない
自分が通り過ぎた後、その何百人もの人々はノートを巨大企業や政府の何百万人もの職員がいる大きな建物へ持ち帰り、そこで街のすべての人についてのスケッチや記録を几帳面に分類する。犯罪ものの刑事のように巨大なボードに貼り、赤い糸でつなぐ
彼らは毎日これをやって、自分を 知る ために動いている。これが本当にそんなに 漠然としていて言葉で説明しにくいこと なのか?
「あなたのデバイスが最初に送ったのが IP アドレスだったので、私たちはこれを知っています。残りのことも分かっています。私たちは表示しないことにしました。たいていのページはそんな選択をしなかったでしょう。」
最初の段落が少し鼻につき、技術知識の少ない人を狙った 恐怖マーケティング のように感じる。Web サーバーが自分の IP を知っているのは当然だ
「私たちは表示しないことにしました。たいていのページはそんな選択をしなかったでしょう」という文も変だ。自分の IP アドレスを自分に見せることの何が問題なのか分からないし、「たいていのページ」が実際にそうしようと選ぶとも思えない。意図された要点を取り違えているのかもしれない
「あなたの IP アドレス — 88.xxx.xxx.231 — は、デバイスが最初に送ったものでした。残りのことも分かっています。私たちは表示しないことにしました。たいていのページはそんな選択をしなかったでしょう。」
こんな雑で InfoWars みたいな文句 から始めるのは思い切った選択だ。自分にとってはそれだけでページ全体の信頼性が一気に下がったし、むしろ「雰囲気を決定づけた」と言うべきかもしれない。残りも同じくらい微妙だったからだ
この記事にはもっと 説明的なタイトル が必要に思える
「画面は 375×812 ピクセルで、3 倍密度でレンダリングされています。これはほぼ間違いなく最近の高級ディスプレイを意味します。」
うーん、この iPhone 13 mini は 2021 年に出た、もうほぼ5年前の機種なので、そこまで新しいとは思わない。それでもページ自体は興味深い
「あなたは明るいインターフェースを好みます — OS がそう教えてくれました。」
それなのに、この Web サイトは自分の好みを無視している。Web サイトがこうしたデータポイントをたいてい ユーザー体験の改善 に使っていないことを示している
Chrome を使っていると大変そうだ
今 Munich で 5G 接続 を使っているのに、サイトは自分が London にいると思っている
Hacker Newsの意見
その都市にはいない。かなり大まかに見ても、Linuxっぽいものの上でChromeっぽいものを動かしている程度で、私がいつ働いていつ寝ているかなんて誰にも推測できない。自分でもわからない
最新の高級ディスプレイというのも5年前にスーパーで買った安物タブレットの画面だし、それでもブラウザーフィンガープリンティングはうっとうしい。ライトモードを検知できるなら、その設定も尊重してくれないのか?
「English · Chinese」と表示して、ブラウザの主要言語と追加言語から育った場所や居住地、同居人までわかるかのように言っているが、英語と中国語の入力言語があるからといってそんなことはわからない。「携帯電話でインターネットを見るという事実は、携帯電話でインターネットに接続できる人だということを明らかにする」と言っているのと大差ない。技術は相互作用するもので、それが技術の動作原理だ。オーウェル的ではあるが、ロシアや中国、北朝鮮のような監視国家よりもっとオーウェル的かは別問題だ。位置共有で携帯・車・機器を探したり、オンライン活動で犯罪者を特定したり、犯罪や警察の説明責任が問われる事件を記録したりもできる。技術の過剰な侵害を災厄のように見るのは認知的な選択だが、私たちの技術が私たちについて何を「知っている」のかを認識するのはよいことだ
ライトモードの話には本当に共感する。30代半ばだが、こういうダークモードのサイトのいくつかは自分を80代半ばのように感じさせる。このサイトは本当に何も見えない
プライバシー擁護派には、せめて一度くらい普通に話してほしい。ブラウザがタイムゾーンにアクセスすることを邪悪な行為のように演出しても、誰も説得できない
情報が正確かどうかは本質ではない。クッキーなしでも私を識別する手段になることが本質だ。より良いサイトを探したら、EFFのものが有益だった
私のブラウザーフィンガープリントは、過去45日の訪問者の中で一意だと出た: https://coveryourtracks.eff.org/
JavaScriptなしで訪れると、「JavaScriptが無効だと、このページはブラウザが何を公開したかを伝えられません。データは依然としてあります。公開も依然として起きています。止まるのは伝えることだけです。」と出る
こういう大げさなLLM文体は非常に鼻につくが、おかげで完全に無視してよいという合図になっているので、その点だけはありがたい
私が年を取ったからなのか、インターネットソフトウェアをほぼ30年やってきたからなのかわからないが、ここにあるどれも驚きでも心配でもない
誰かが接続を受けるサーバーを立て、誰かがそのサーバーに接続要求を送る。そこには何の合意もなく、期待もルールも定められていない。サーバーがすべての接続要求を受ける必要もないし、誰かがそのサーバーに接続要求を送る必要もない。サーバーが何を返し、クライアントがそれをどう処理するかは各自の自由だ
この合意、あるいは合意の不在は、双方に当てはまると感じる。Webサイトが接続要求の情報を好きなように使うことにユーザーが怒るべきではないと思うし、Webサイトも私が受け取ったデータを好きなように処理することに怒るべきではない。つまりWebサイトは私のIPアドレスや要求の詳細を好きなだけ記憶でき、私は返ってきたものを好きに扱える。広告をブロックしたり、サイトが指示した後続リクエストを拒否したり、レスポンスを望む形で表示したりできる。私がデータを要求し、向こうがデータを送ってきたのだ
私について知られたくない情報があるなら、要求に載せて送るべきではない。広告を表示するときだけデータを与えたいなら、データを送る前にそう同意させるべきだ。もちろん現実には、ほとんどの人はブラウザが何をしているのか知らず、ブラウザが送る内容について実質的な選択肢も多くなく、インターネットはもはや生活の選択肢ではない。DDoSのようなもののせいで、完全な「何でもあり」構造も非現実的だ。それでも、インターネット要求をするときに双方にあまり多くを期待すべきではないという直感がある
現実のブラウザは、誰か別の人の代理人だ。Web開発者のために働き、開発者の生活を楽にするあらゆるものを提供する。広告主のために働き、追跡の手がかりやフィンガープリンティングを提供する。ブラウザ開発者のために働き、計測値やテレメトリー、そのほか何だかわからないデータを集める。だがもう本当の意味で私のためには働いていない。私は車に乗ったただの乗客だ
IPアドレスはブラウザが制御できるものではなく、Webサイトに接続するには避けられず明らかにしなければならないことは理解している。しかし、VPNなしのデフォルト状態でIPアドレスが国、州・県、ときには都市にまで安定してマッピングできるのは恐ろしい設計上の欠陥だ。IPの割り当て方における大きな設計問題だ。もっと良い世界なら、IPアドレスだけで誰かの地理的位置が明らかになるべきではない
クライアントが言語ヘッダーや対応フォント一覧を送るのは、サーバーに「このデータでやりたいことを全部やれ」と言う意味ではなかった。私たちが標準を作ったときには実際の理由があった。Webサイト提供者、より具体的には広告ネットワークがそれらを別の目的に使うと決めたのは、その暗黙の合意を破ることだ。もちろん、私が期待しすぎているのかもしれない
私の携帯のバッテリー残量を把握していたし、デバイスについての推測も当たっていた。ジャイロスコープやタッチスクリーン操作を正確に読み取り、これらがどう識別や推論に使えるかも示していた。座っているか、立っているか、横になっているかのようなことまで可能だ。最初は退屈だが、後半になるほど面白かった
互いに何も負っていないというやり方は、たいていが善意の行為者だと仮定しても大体成立していた昔にはうまく機能した。だがインターネットの金と権力が現実になると、関係はより敵対的になった。信頼の前提と責任の不在は、一方が他方の善意を利用しやすくする。Webのサーバー・クライアント構造に内在する技術的・権力的な非対称性のため、濫用も一方向に流れやすい
サイトはきれいで、大げさな文言も面白いが、もっと良いフィンガープリンティングのデモはいくらでもある
ここで見せているデータポイントの数は少ない。確認できるものはもっと多いし、そのかなりの部分は間違っているように見える。明示的に「withheld」と検知したのは1つだけだが、実際にはいくつか隠されていて出力が歪んでいるようだ。品質管理が必要だ
EFF Cover Your Tracksをバイブコーディングしたようなものだ。これがトップページに上がったことのほうが中身より怖い
ここで見られるものはもっと多い。スーパークッキーやフィンガープリンティングについての先行研究も多い
https://coveryourtracks.eff.org/
https://amiunique.org/
わあ、ChatGPTを使っている誰かがブラウザーヘッダーという概念を発見して、妙に「私たちはお伝えしないことにしました」みたいな文句を付けたようだ
本当にブラウザが何を送っているか知りたいなら、ここを見ればいい:
https://browserleaks.com/
https://coveryourtracks.eff.org/
「私たちはあなたの位置を要求していません。あなたの住所はあなたより先に届きました」はナンセンスだ。私のIPアドレスをキーに位置情報API/サービスへ照会したのだから、私の位置を要求したことになる
それにインターネット通信が動作するにはIPはほぼ必須だ。隠してくれるサービスを使う方法もあるが、そうするとそのサービスが私の情報を持つことになる
辞書があるなら、会話相手に聞いた単語の意味を必ず相手に尋ねなくても辞書で調べられる。単語が複数の意味を持っていたり口語だったりして、間違って推論するかもしれない。その不正確さを正すには、会話の文脈のような別のデータポイントが必要だったり、相手に直接確認を求めたりする必要がある
そして当然、住所が先に届く。そうでないと要求したデータを返せないからだ