指纹
BotBrowser 音频指纹保护
BotBrowser 如何在浏览器引擎层面控制 Web Audio API 输出,确保跨平台音频信号一致性。
隐私风险
Web Audio API 的处理输出因设备和平台而异,使其成为追踪信号。无需播放声音,也不需要任何权限。输出取决于音频硬件、操作系统音频子系统和浏览器版本。
BotBrowser 的解决方案
BotBrowser 在浏览器引擎层面控制音频处理输出。加载指纹配置文件后,音频信号与配置文件的目标平台匹配。
加载配置文件
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
AudioContext 参数、采样率和处理输出都与配置文件的平台配置一致。
使用噪声种子的确定性输出
使用噪声种子后,音频指纹变为确定性的。相同的配置文件和种子始终产生相同的结果:
chrome --bot-profile="/path/to/profile.enc" \
--bot-noise-seed=12345
跨平台一致性
Windows 配置文件在 macOS 或 Linux 上运行时,会产生与 Windows 音频子系统一致的输出,而非宿主平台的输出。
验证
启动 BotBrowser 后,使用 Puppeteer 验证音频保护:
const { chromium } = require('playwright-core');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-noise-seed=12345',
],
headless: true,
});
const page = await (await browser.newContext()).newPage();
// 验证 AudioContext 采样率与配置文件匹配
const sampleRate = await page.evaluate(() => {
const ctx = new AudioContext();
return ctx.sampleRate;
});
console.log('采样率:', sampleRate);
// 刷新页面并验证稳定性
await page.reload();
const sampleRate2 = await page.evaluate(() => {
const ctx = new AudioContext();
return ctx.sampleRate;
});
console.log('稳定:', sampleRate === sampleRate2);
关键检查项:
- 音频指纹哈希在页面刷新后保持稳定
- AudioContext 采样率与配置文件的平台默认值匹配
- 不同配置文件产生不同的音频指纹
快速开始
- 从 GitHub 下载 BotBrowser
- 使用
--bot-profile加载配置文件 - 使用
--bot-noise-seed实现确定性音频输出 - 使用检查 AudioContext 的指纹测试工具进行验证
#audio#fingerprinting#audiocontext#privacy