Cancel

HLS A/Bセグメント方式のフォレンジック電子透かしを、2セッション分の音声だけで相殺します。

透かしの解析と除去手法の検証のために作った非公式ツールです。透かしを埋め込んでいる 配信元とは無関係で、いかなる提携もありません。 ファイルはどこにも送信されません。すべてブラウザ内で処理されます。

同じ楽曲の配信を 2 セッション分 ダウンロードして、両方を投入してください。 2 本の系列が食い違う epoch では A版と B版の両方が揃うので、平均すれば透かしが 相殺されます。一致する epoch は変種が 1 つしかないので手を付けません。

ファイルを選んでください。

制約と、その中でできること

この方式は配信を 4.096 秒の epoch に区切り、各 epoch を A版・B版どちらで 配信したかの並びでユーザーを識別します。検証器は 3 つの層を見ています。

さらに層どうしの整合性を見る改竄検出が入っています。時刻層が完璧なのに 識別層だけが大きく壊れていれば、それは自然な劣化ではありえない。透かしを派手に消す手法は ここで tampered と判定されます。

このツールが使うのは 2 セッション分の音声だけで、epoch ごとに変種を 選び直すこと(mix-and-match)はしません。できるのは、正当に取得した 2 本に対する 信号処理だけです。

2 本の系列が食い違う epoch では A版 = x + w と B版 = x − w の 両方が手元にあるので、平均すれば w が相殺されて原音 x が残ります。 一致する epoch は変種が 1 つしかないので触りません。

実測では 2 本の系列が食い違うのは 25〜41% でした。記号の出現確率が epoch ごとに偏っているため、偶然の 50% より少なくなります。それでも相殺した分だけ スコアが閾値を割ります。

手法score閾値erasure判定
無加工5.7164.4480.000特定される
デシンクロ ±0.30%(1ファイル)5.1344.4480.048特定される
2セッション相殺(食い違い 29%)3.9774.5650.111検出なし・特定不能
2セッション相殺(食い違い 29%)3.6994.5680.127検出なし・特定不能
2セッション相殺(食い違い 41%)3.1144.5700.095検出なし・特定不能

相殺した epoch のうち実際に erasure になるのは一部で、比率は 0.10〜0.13 に収まります。 改竄検出はこの水準では作動しませんでした(派手に消す手法では 0.24 で作動します)。 時刻層は 1.000 のまま無傷です。

やってはいけない設定

実測して分かった、逆効果になる操作を挙げておきます。

使い方

  1. 配信サイトでセッションを 2 つ作り、それぞれの音声をダウンロードする
  2. 2 つのファイルをこのページに投入する
  3. 「相殺する」を押す。2 本を epoch ごとに比較して食い違う箇所を判別し、そこだけ平均する
  4. 出力された WAV をダウンロードする

A版/B版のラベルは要りません。同じ epoch で 2 本を比べれば、変種が違えば差は信号比 −22 dB 付近、同じなら再エンコード雑音だけで −36 dB 以下と桁が違うので、音声だけで 判別できます。

音質について

相殺は原音の推定であって劣化ではありません。A版も B版も知覚的に等価な 同じマスターなので、その平均は元音源そのものに近づきます。触るのは食い違う epoch だけで、 残りは元のデータのままです。実測で 1 本目との差は −30 dB 程度、 これは透かし成分が消えた分です。

出力は 32bit float WAV。元音源は復号時点でフルスケールを超えることがあり、 整数PCMだとクリップするためです。16bit を選ぶとピークに合わせて自動的に音量を下げます。

コマンドラインで使う

セッションの発行からダウンロード・相殺・検証まで全自動で行う実装もあります。

python3 scripts/two_session_attack.py --out out.wav