← ブログに戻る

AudioContextフィンガープリントとは?音声フィンガープリントがブラウザ環境を識別する仕組み

核心のまとめ:音声フィンガープリントはマイクにも触れず、音も出しません。ブラウザがメモリ上で固定の音声をサイレントにレンダリングし、計算結果に現れる微小な浮動小数点の差をデバイスの署名として使います。CanvasやWebGLと同じ「描画結果型」のフィンガープリントで、IPを変えてもキャッシュを消しても消えず、値はデバイスとブラウザエンジンが決めます。複数アカウント運用の判断基準は2つだけです。同じ環境では長期にわたって安定し、環境が違えば互いに異なる値になること。MostMateのAudioContext設定はリアルとランダムの2段階なので、この2つに照らして選べば十分です。

「スピーカーを切ってマイクの権限も拒否すれば、サイトの音声まわりは手出しできない」——これが音声フィンガープリントをめぐる最もよくある誤解です。実際は正反対で、この検出には最初から最後まで一切の音の出入りがありません。2016年、プリンストン大学の研究チームは百万規模のサイト測定でこの手法を正式に記録しました。以降、主流の検出スクリプトでは標準項目になっています。権限は不要、ミリ秒単位で完了、シークレットモードでも普通に動きます。MostMateはアカウントごとに独立したブラウザ環境を用意する指紋ブラウザで、音声フィンガープリントはまさにこうした製品が扱うパラメータの1つです。この記事では4つの問いに沿って解説します。サイトに何が見えているのか、この数値がなぜ安定するのか、他のパラメータとどう整合するのか、指紋ブラウザではどう設定するのか。

サイトが見るもの:一度も再生されない音声から返ってくるひとつの数値

サイトが最終的に受け取るのは浮動小数点数ひとつです。音も出ず、デバイス型番も分かりません。主流の検出スクリプト(FingerprintJSの実装に代表され、多くのオープンソースライブラリがこれを踏襲しています)の流れは、次の固定5ステップです。

  • オフライン音声コンテキストを作成します(OfflineAudioContext、MDNドキュメント)。モノラル、サンプリングレート44100 Hz、約5000サンプルで、換算すると約113ミリ秒の音声です。最初から最後までスピーカーを経由しません。
  • オシレーターで固定の10000 Hz三角波を生成し、まったく同じ入力信号とします。
  • 信号をダイナミックコンプレッサー(DynamicsCompressorNode)に送ります。パラメータはかなり攻撃的(しきい値-50 dB、ニー40、圧縮比12)に設定し、計算を意図的に非線形領域へ押し込んで、デバイス間の微妙な差を拡大します。
  • startRenderingを呼び出してメモリ上でサイレントにレンダリングします。この段階で聞こえる音は一切生まれません。
  • 出力バッファの終盤約500サンプルを取り出して絶対値の合計を求めると、124.0434のような数値が得られます。

この数値こそが音声フィンガープリントです。計算は再生の前に起こるため、システムをミュートしてもスピーカーが未接続でも結果は変わりません。録音デバイスにもアクセスしないので、マイクの許可はそもそも関係ありません。ブラウザフィンガープリントの総説では、こうしたパラメータは一文で流されがちです。単独で記事にする価値があるのは、値の発生源が特殊だからです。値は計算誤差から来ていて、その誤差がちょうど安定している。これが次のセクションのテーマです。

Ipheyの検出結果ページに表示される音声フィンガープリント

検査サイトが表示するのは、通常この生の値をハッシュ化した16進文字列で、長さはサイトごとに異なります。比較するときは「同じ環境では安定しているか、環境を変えると変わるか」を見ればよく、文字列そのものの形式にこだわる必要はありません。

なぜひとつの数値が指紋になるのか:誤差がちょうど安定しているから

鍵となる仕組みは、音声演算がデバイスごとにビット単位では一致せず、しかもその不一致は再現できるという点です。Web Audio APIの仕様は処理の流れだけを定めており、すべての実装にビット単位で同じ結果を求めてはいません。CPUごとの浮動小数点精度の差、ブラウザエンジンごとのオーディオスタック実装の差が、丸め処理や演算順序にわずかに現れます。1回の演算の差は無視できるほど小さくても、信号はコンプレッサーで繰り返し非線形処理され、数百サンプルを合計した時点で、微妙な差は区別可能な数値まで増幅されています。

プリンストン大の研究は実測規模も示しています。1万8000台超のデバイスの間で、音声フィンガープリントは700を超える異なる値に収束し、区分度に換算すると約5.4 bits——サンプルには限りがあるため、これは下限です。関連付けの検出にはこの桁で十分です。本当に価値があるのは「値がどれだけユニークか」ではなく「値がどれだけ安定しているか」だからです。同じデバイスなら100回再読み込みしても結果は微動だにしません。マシンを変えれば、ブラウザエンジンを変えれば、値はその瞬間に変わります。権限が不要で、消去もできず、再読み込みでも変わらない信号——プラットフォームがデバイスプロファイリングに最も欲しい素材は、まさにこれです。

他のパラメータとの整合:一貫性の3原則

音声フィンガープリントはIPとはまったく関係がなく、純粋にデバイス側のシグナルです。CanvasやWebGLと同じく「描画結果型」のパラメータで、サイトは決まった計算問題をブラウザに投げ、実際のデバイスがその場で答えを算出するのを待ちます。環境の設定が妥当かどうかは、次の3点で検証します。

  • 単一環境での安定:同じ環境なら毎回同じ結果になること。「これは正常なデバイスだ」と判断する前提です。値が急に変わるのは、パラメータが手でいじられた証拠であり、むしろ不審に映ります。
  • 環境間での差異:10個の環境が同じ音声値を報告するのは、関連マップ上で自分から丸を描くようなものです。逆に「全パラメータを満点まで調整する」のも間った方向です。ランダム化のリスクは、指紋のランダム化がなぜ危険なのかの記事で詳しく分解しました。
  • ブラウザエンジンとの一致:オーディオスタックはブラウザエンジンが実装しており、値はエンジンとバージョンに応じて変わります。環境が名乗るUAやOSが実際のエンジンと一致している必要があり、ブラウザのメジャーアップデートの後は値も自然に更新されます。手動の介入は不要です。

3原則をひと言でまとめると、音声フィンガープリントに求められるのは「本物のデバイスらしさ」であって「最高」ではないということです。MostMateはこの考え方を4つのデザイン原則として固めました。全体像は4つのデザイン原則の記事で解説しているので、ここでは音声の1項目だけに絞ります。

自分の音声フィンガープリントの調べ方:2回の比較で問題を見抜く

検出にプラグインは一切不要です。検査サイト1つと、再読み込み2回があれば足ります。

ステップ1:好きな検査サイトを選び、音声フィンガープリントの項目を探します。BrowserScanもIpheyも、この値を独立した項目として表示します。Ipheyのトラストスコアの読み方は実践編で詳しく扱っているので、Iphey 検証実践ガイドの記事と併用すると便利です。

ステップ2:同じ環境で2〜3回再読み込みし、数値を見続けます。値が安定して変わらないことが合格ラインです。再読み込みのたびに値が変わるなら、その環境の音声パラメータが毎回再計算モードに設定されている証拠で、「このデバイスは操作されたことがある」とプラットフォームに垂れ流しているのと同じです。

ステップ3:別の環境で再測定し、2つの値を比べます。環境が違えば音声値も違うはずです。完全に一致するなら、同じ指紋テンプレートを使い回していないか、遡って確認してください。テンプレートの使い回しは、複数アカウントの関連付けで最も気づきにくい発生源です。

環境の異なる検出結果の比較

MostMateでの設定:リアルとランダム、どちらを選ぶか

MostMateの環境作成フォームでは、AudioContextが指紋設定エリアに独立した項目として並び、リアルとランダムの2段階から選べます。右側の指紋プレビューパネルが現在の値をリアルタイムで表示するので、保存前に確認できます。判断基準はシンプルです。日常のメイン環境にはリアル——値はこのマシンの計算結果から直接来るので自然に安定し、「単一環境での安定」の原則にぴったり合います。環境をまとめて新規作成するときにはランダム——各環境がそれぞれ異なる、内部では安定した値を得られ、「環境間での差異」を満たします。

音声パラメータにはカスタム設定が用意されていません。この設計自体に意味があります。音声フィンガープリントの価値は安定にあるので、手作業で固定値を組み立てると、かえって意味を失うからです。リアルにするかランダムにするかで本当に考えるべきは、この一群の環境をどう生成したかであって、項目ごとのパラメータ調整ではありません。同系統のCanvas、WebGLイメージ、ClientRectsも同じ発想で判断でき、仕組み全体の分担はMostMateとはのページで説明しています。

MostMate指紋ブラウザの指紋設定エリア

よくある質問

音声フィンガープリントにマイクやスピーカーの権限は必要ですか?

必要ありません。音声はすべてメモリ上でオフライン レンダリングされ、スピーカーを経由せず、録音デバイスにも触れません。ミュート状態でも、音声デバイスを持たないマシンでも、普通に収集されます。

Cookieの削除やシークレットモードで音声フィンガープリントを避けられますか?

避けられません。Cookieはローカルに保存されるため削除できますが、音声フィンガープリントはデバイスがその場で計算して生み出すものです。まったく別の2つの仕組みなので、キャッシュ削除は何の影響も与えません。

AudioContextを無効化するか固定値にしたほうが、安全ではありませんか?

方向が逆です。普通のブラウザのほとんどは音声演算を実行できるので、「無効」も「誰もが同じ固定値」も、それ自体が目立つ特徴になり、普通の値よりもむしろ拾われやすくなります。

音声フィンガープリントはいつ変わりますか?

デバイスの変更、ブラウザエンジンの変更、ブラウザのメジャーアップデートが起きると値は変わります。実在のデバイスで自然に起こる進化です。同じ環境での日常利用では長期にわたって安定しているはずで、頻繁に変わるのはむしろ異常なシグナルです。

おわりに

音声フィンガープリントの論理は、ひと言にまとめられます。サイトは音を出さなくてもデバイスを測定できる。その支えになっているのが、マシンごとに安定して現れる微小な計算の差です。これが分かれば、よくある做法の多くに説明がつきます。なぜミュートでは防げないのか、なぜ満点パラメータがかえって危険なのか、なぜ量産環境の値は互いに異なる必要があるのか。MostMateはこうしたパラメータをリアルとランダムの2段階に整理し、指紋プレビューパネルと合わせて、設定したその場で結果を確認できます。自分の環境の音声フィンガープリントを一度手で確かめたいなら、MostMateをダウンロードして、無料版で2つの環境を作り、値を比べてみてください。認識の盲点は、たいていこの一回で晴れます。

MOSTMATE

安全な複数アカウント管理を、もっと簡単に

最初のアカウントから、MostMate でより安全でスマート、効率的な複数アカウント運用を始めましょう。

  • 独立したプロファイル。一貫した識別情報。
  • AI 自動化 · アカウント健全性 · チーム運用
MostMate をダウンロード