浏览器音频指纹使用Web Audio API来处理合成信号并读取数值结果。 网站可以将这些值转换为 AudioContext 哈希值。 然后,它可能会将哈希值与 Canvas、WebGL 和其他信号结合起来,作为更广泛的 浏览器指纹 的一部分。
此过程通常不会访问您的麦克风或记录麦克风输入。 它也不同于用于识别歌曲的声学指纹。 目标是浏览器环境,而不是音频内容或说话的人。
简单来说,页面为浏览器提供相同的音频处理任务并比较它们的答案。
浏览器音频指纹与声学指纹识别
该术语有两个既定含义。 浏览器音频指纹测量音频处理环境。 声学指纹识别从录音中提取特征,以便 Shazam 等服务可以识别内容。
| 区域 | 浏览器音频指纹 | 声学指纹识别 |
|---|---|---|
| 目标 | 浏览器和处理环境 | 歌曲、剪辑或录音 |
| 典型输入 | 合成信号或 API 属性 | 录制的音频内容 |
| 常用 | 浏览器识别、风险分析、跟踪 | 音乐识别、版权匹配 |
| 麦克风 | 通常不需要 | 取决于样本的捕获方式 |
| 结果 | 浏览器信号或特定于工具的哈希 | 内容签名与数据库匹配 |
声纹也不同。 它分析人的声音特征以进行说话人识别。
AudioContext 指纹识别如何工作?
一个常见的测试为浏览器提供了相同的可预测音频图。 微小的输出差异可以揭示有关处理环境的详细信息。
基本过程有五个步骤:
- 该页面创建一个
OfflineAudioContext或AudioContext。 - 它使用
OscillatorNode或其他源生成波形。 - 它通过
DynamicsCompressorNode或AnalyserNode等节点传递信号。 - 它读取渲染的样本、频率数据、属性或计时值。
- 它对选定的值进行求和或散列,并将它们与其他浏览器信号组合。
离线渲染到 AudioBuffer
许多测试使用OfflineAudioContext。 根据 MDN,它将音频图渲染到内存中的 AudioBuffer 中。 它不会将结果发送到物理音频硬件。 该脚本直接读取缓冲区。 它的值可能会因浏览器、操作系统、CPU 架构、数学库和数字信号处理实现而异。
属性和时序信号
页面还可以检查采样率、通道数、延迟、分析器时序或渲染量子大小。 Web Audio 规范 列出了其中几个字段作为可能的指纹识别表面。 浏览器可能会对它们进行舍入、限制或标准化。
网站可以读取哪些音频信号?
| 信号 | 它可能表明什么 | 重要限制 |
|---|---|---|
| 缓冲样品 | 浏览器、操作系统、CPU 和 DSP 差异 | 不是硬件序列号 |
| FFT 值 | 所选图表的频率输出 | 取决于图形和分析仪设置 |
| 采样率 | 音频上下文配置 | 通常取自少量常见的采样频率 |
| 通道数 | 输出配置 | 浏览器可能会限制或标准化它 |
| 延迟和计时 | 实现或硬件相关的行为 | 可能因系统负载和浏览器策略而异 |
| 哈希值或样本总和 | 所选值的摘要 | 不是每个网站都使用的通用 ID |
该哈希值属于创建它的测试。 一种工具可以对整个缓冲区进行哈希处理。 另一种可能会添加短范围的样本或使用 FFT 箱。 他们的结果不需要匹配。 这些输出通常不会泄露一个人的姓名、麦克风内容或声卡序列号。
音频指纹是唯一的还是稳定的?
音频指纹足够稳定,可以添加有用的信息。 不保证它是唯一的或永久的。
2022 年的一项 Web 音频浏览器指纹研究 测试了 2,093 名用户,观察到了 95 个不同的音频指纹。 与该样本中的其他几个指纹表面相比,音频结果的多样性较差。 当与其他信号结合时,他们仍然添加信息。
这是判断AudioContext数据的实用方法。 匹配缩小了可能性,但并不能证明两次访问来自一台设备。 改变的结果并不能证明新设备的出现。
该值可能会在以下情况后发生变化:
- 浏览器、操作系统或数学库更新
- 音频配置或CPU架构更改
- 隐私设置或指纹保护
- 不同的音频处理节点图、采样范围、计时方法或哈希算法
检查稳定性时,请在相同的配置文件中使用相同的测试。
音频指纹是否使用您的麦克风或播放声音?
通常的 AudioContext 指纹不需要麦克风权限。 它会创建自己的合成信号,而不是记录房间中的声音。
离线测试也不需要声音播放。 它将数据渲染到内存中并读取生成的缓冲区。 使选项卡静音或调低扬声器音量通常不会改变该计算。
麦克风捕获使用不同的浏览器路径,通常通过 getUserMedia,并且通常需要权限。 实时音频图并不能证明页面正在录制麦克风。
音频、画布、WebGL 指纹识别
音频、Canvas 和 WebGL 测试遵循类似的模式。 页面分配固定任务,读取输出,并将其与其他结果进行比较。 API 和变异来源不同。
| 表面 | 主要API | 典型结果 | 主要影响 |
|---|---|---|---|
| 声音的 | 网络音频 | 样本、FFT 值、属性、哈希 | 浏览器、操作系统音频实现、CPU、数学、DSP |
| 帆布 | 画布 2D | 像素缓冲区或图像哈希 | 字体、浏览器、操作系统、2D 渲染 |
| 网页GL | 网页GL | GPU 元数据、功能、渲染像素 | GPU、驱动程序、图形堆栈、浏览器 |
WebGL 指纹 可能会泄露图形供应商信息和渲染行为。 AudioContext 专注于音频处理输出和相关属性。 Canvas 通常反映字体和 2D 渲染。
风险系统可以收集所有这三者以及标头、网络数据、帐户历史记录和行为。 在Bot 检测中,信号之间的关系比一个音频哈希更有用。
浏览器音频指纹有什么用?
安全系统可以在欺诈检查、帐户接管检测、浏览器识别或自动化分析中使用 AudioContext 数据。 熟悉的组合可能会支持回归会话。 突然的变化可能会导致另一个验证步骤。
跟踪系统可以使用相同的信号,而无需仅依赖 cookie。 Cookie 隔离 控制存储的数据,而不是页面可以再次计算的值。
AudioContext 代码本身并不能证明指纹识别。 游戏、音乐工具、可视化工具、会议软件和音效也使用该 API。 读取缓冲区、创建散列并将其发送进行比较的脚本是指纹识别的更有力证据。
如何测试音频指纹
普林斯顿 AudioContext 指纹测试显示 AudioContext 属性、压缩器输出、振荡器结果、样本总和和哈希值。 它对于检查在一个浏览器设置中保持稳定的内容非常有用。
使用受控比较:
- 在同一浏览器配置文件中运行测试两次。
- 记录属性、样本总和和哈希值。
- 完全关闭浏览器,重新打开配置文件,然后再次测试。
- 更新或隐私设置更改后,在同一页面上重复此操作。
将浏览器版本、操作系统、配置文件和测试工具保留在笔记中。 不要比较来自不相关站点的哈希值,就好像它们遵循一个标准一样。
| 结果 | 通常意味着什么 | 它没有证明什么 |
|---|---|---|
| 重复测试时相同的哈希值 | 所选输出在该设置中稳定 | 该设备全球独一无二 |
| 重启后哈希值不同 | 保护或环境改变了输出 | 追踪是不可能的 |
| 跨配置文件具有相同的哈希值 | 测试看到相同的选定值 | 个人资料肯定是链接的 |
| AudioContext 不可用 | API 被阻止、禁用或不受支持 | 其他指纹表面消失了 |
测试页是可见性和可重复性检查。 它不是匿名分数或无法识别浏览器的证据。
浏览器如何减少音频指纹?
- 标准化使得更多的用户返回相似的值。
- 确定性随机化会跨站点或会话更改选定的输出。
- 跟踪器阻止会阻止来自已知指纹识别服务的请求。
- 限制网络音频会删除部分表面,但可能会破坏有用的应用程序。
Brave描述了一种用于网络音频输出的称为farbling的随机化方法。 Firefox 118 将网络音频计算移至跨系统的同一数学库,以提高指纹保护下的匿名性,如 Firefox 发行说明 中所述。
隐私浏览主要改变存储和本地历史记录。 AudioContext 保护取决于浏览器及其当前设置。
VPN 或代理更改网络路由和公共 IP,而不是音频缓冲区计算。 通过 WebRTC 泄露 测试单独检查网络暴露情况。
MoreLogin 中的 AudioContext 设置
MoreLogin 在配置文件级别提供 Noise 和 Authentic 选项。 当前的 配置文件设置文档 表示,Noise 会为同一台计算机上的配置文件生成不同的音频上下文。 Authentic 使用计算机的实际音频上下文。
禁用音频播放是一个单独的控件。 这并不意味着 Web Audio API 不可用,也不应该将其视为 AudioContext 指纹防御。
与操作系统、用户代理、Canvas、WebGL 和媒体设备一起查看 AudioContext 值。 一种设置不能保证每个检查器都有相同的结果。
音频指纹常见问题解答
AudioContext 指纹识别会记录我的麦克风吗?
普通方法则不然。 它在 AudioContext 内生成合成信号并读取输出。 麦克风捕获使用单独的 API,通常需要用户的许可。
音频指纹对于一台设备来说是唯一的吗?
未必。 许多环境可以返回相同的值。 当系统将音频数据与 Canvas、WebGL、浏览器属性、网络详细信息和行为相结合时,音频数据会变得更加有用。
AudioContext 指纹可以改变吗?
是的。 浏览器和操作系统更新、隐私保护、音频配置、CPU 或数学更改以及测试设计都会影响输出。
隐身模式是否会停止音频指纹?
不是靠它自己。 隐身模式限制保存的历史记录和站点存储。 它不会自动更改每个网络音频结果。 结果取决于浏览器内置的指纹识别保护。
为什么两个音频指纹测试显示不同的哈希值?
每个测试可以使用不同的波形、音频图、节点设置、样本范围、归一化规则或哈希算法。 比较同一工具的重复结果,而不是匹配不相关的哈希值。
要点
音频指纹是浏览器信号,而不是录音或永久硬件 ID。 将其与其他浏览器信号放在一起读取,将网络检查分开,并使用相同的方法比较结果。 这告诉你的不仅仅是一个哈希值。

ZH
