音频指纹是一种浏览器追踪技术,利用 Web Audio API 在内存中渲染一段静默信号,并测量输出中微小的浮点数差异——这些差异对你的硬件和软件环境来说是唯一的。全程不播放声音,不访问麦克风,也不需要任何权限。你现在就可以在 whatsmy.fyi 上查看你的浏览器指纹(包括音频信号)。
简短总结
音频指纹在浏览器内存中创建一个微型音频渲染任务,然后读回数值结果。由于每种CPU、操作系统音频栈和浏览器引擎处理浮点运算的方式略有不同,最终结果是一个能唯一标识你设备的稳定数字——在无痕模式、清除Cookie甚至切换基于Chromium浏览器的情况下依然有效。
什么是音频指纹?
音频指纹利用 OfflineAudioContext ——一种最初用于超实时音频渲染(处理、混音和导出)的浏览器API。指纹脚本将其重新用于渲染一个数学上确定的波形,无需输出设备,然后测量平台浮点运算对该计算的处理方式。结果是一个单一数字——某台机器上可能是 124.0434488,另一台则是 79.59——用作设备标识符。
与探测GPU二维渲染管线的 Canvas指纹 不同,音频指纹探测CPU的数字信号处理(DSP)管线。两者捕获硬件栈的完全不同层次,联合使用时相互补充。Fingerprint.com等商业指纹平台通常将这两种信号与100多个其他信号结合使用。
音频指纹是更广泛的 浏览器指纹 体系中较难被检测的组成部分之一。由于它不需要存储、不需要Cookie、不需要网络请求,也不需要用户交互,因此在DevTools的网络面板中完全不可见,也不会产生任何警告或权限提示。
音频指纹是如何工作的?
整个过程在后台线程中50毫秒内完成,分四个清晰步骤。
第一步——创建OfflineAudioContext
脚本实例化一个固定声道数、采样数和采样率的 OfflineAudioContext——通常是单声道、44,100 Hz下5,000个样本。"离线"意味着完全在内存中渲染:不涉及音频硬件,不需要输出设备,也不会产生声音。
第二步——生成波形
配置一个 OscillatorNode 在10,000 Hz下产生三角波。这是一个数学上精确的重复波形——输入没有随机性。因此输出中的任何差异完全来自平台的处理链,而非信号本身。
第三步——应用DynamicsCompressor
振荡器信号通过设置了特定阈值、拐点、比率、起音和释音的 DynamicsCompressorNode 路由。压缩器应用非线性增益曲线——数学运算涉及除法和指数运算,而非简单加法。非线性运算会在各平台间叠加浮点舍入误差,这正是使用压缩器的原因:它将CPU架构和音频栈实现之间的微小差异放大成一个可测量的稳定值。
第四步——读取并哈希输出
渲染完成后,buffer.getChannelData(0) 返回5,000个值的 Float32Array。脚本通常对第4,500到5,000个样本的绝对值求和,得到一个浮点数。该浮点数(或整个数组的哈希值)就成为音频指纹。
// AudioContext指纹识别——最小工作示例
async function getAudioFingerprint() {
const AudioCtx =
window.OfflineAudioContext || window.webkitOfflineAudioContext;
// 1. 创建内存上下文——无硬件,无权限
const ctx = new AudioCtx(1, 5000, 44100);
// 2. 振荡器——10 kHz三角波(确定性输入)
const osc = ctx.createOscillator();
osc.type = 'triangle';
osc.frequency.setValueAtTime(10000, ctx.currentTime);
// 3. DynamicsCompressor——非线性数学放大平台差异
const comp = ctx.createDynamicsCompressor();
comp.threshold.setValueAtTime(-50, ctx.currentTime);
comp.knee.setValueAtTime(40, ctx.currentTime);
comp.ratio.setValueAtTime(12, ctx.currentTime);
comp.attack.setValueAtTime(0, ctx.currentTime);
comp.release.setValueAtTime(0.25, ctx.currentTime);
osc.connect(comp);
comp.connect(ctx.destination);
osc.start(0);
// 4. 渲染并读取——在主线程之外运行
const buffer = await ctx.startRendering();
const data = buffer.getChannelData(0);
// 对最后500个样本求和——结果因设备/系统/浏览器而异
// Chrome macOS: ~101.46 | Safari: ~79.59 | Firefox: ~80.95
return data.slice(4500).reduce((acc, v) => acc + Math.abs(v), 0);
}为什么每台设备的音频"声音"不同?
差异根源在于每个平台实现用于音频处理的IEEE 754浮点运算的方式。三个层次共同造成了这种差异:
- CPU架构和SIMD指令:x86处理器使用SSE2或AVX2向量指令;ARM处理器使用NEON。同样的乘法运算在不同指令集上会产生不同的最低有效位。对5,000个样本的渲染进行数千次这样的运算,会产生可测量的不同总和。
- 操作系统音频栈和驱动版本:Chrome在macOS、Windows和Linux上使用不同的内部FFT实现。同一物理设备上的Android 9和Android 10会产生可测量的不同值,因为系统更新改变了音频处理管线。
- 浏览器引擎差异:Blink、WebKit和Gecko都源自Google 2011年的WebKit代码库,但各自的音频处理代码已独立修改超过十年。Firefox在同一macOS硬件上返回的值与Chrome不同。
音频指纹有一个显著特性将其与Canvas指纹区分开来:在基于Blink的浏览器(Chrome、Edge、Opera、Brave)上,同一设备无论使用哪个Blink浏览器都会返回相同的音频指纹。这意味着追踪者可以在同一台机器上跨浏览器——而不仅仅是跨标签页——追踪你,而Canvas指纹无法可靠地做到这一点。
音频指纹有多唯一?
音频指纹单独来看并不是熵值最高的信号,但它在稳定性方面表现出色——而这种稳定性正是它在多信号指纹系统中的价值所在。
| 发现 | 数值 | 来源 |
|---|---|---|
| 音频指纹熵(单独测量) | ~4.8 bits | arXiv 2107.14201 (2021) |
| Canvas指纹熵(对比) | ~5.7 bits | EFF Cover Your Tracks |
| Alexa前10万网站中使用指纹脚本的比例 | ~10% | 学术测量研究,2021年 |
| DynamicsCompressor方法与FFT方法的稳定性对比 | DC方法更稳定 | arXiv 2107.14201 (2021) |
| 组合指纹准确率(100+信号含音频) | 高达99.6% | Fingerprint.com |
| Safari 17噪声注入保护被样本平均法绕过 | 40,000个样本 | Fingerprint.com绕过研究,2023年 |
音频指纹真正的优势不在于熵值,而在于持久性。只有在升级系统、更新浏览器引擎或更换硬件时它才会改变。Canvas和WebGL指纹可能随GPU驱动更新而变化;音频指纹则锚定在栈的更深、变化更慢的层次上。商业平台将其用作"锚定信号",即使高熵信号漂移,也能保持设备标识的一致性。
现实中谁在使用音频指纹?
欺诈检测平台
欺诈防范是最主要的合法用途。Fingerprint.com、DataDome、ThreatMetrix和Sift等平台将音频指纹作为众多信号之一,用于检测账户劫持、凭证填充和机器人流量。未经隐身补丁的Puppeteer、Playwright或Selenium机器人通常使用虚拟化音频栈,返回零值或异常值,使音频输出成为可靠的机器人检测信号。当合法用户设备的音频指纹与系统中记录的突然不符时,系统会将其标记为风险事件。
跨站广告网络
随着主流浏览器弃用第三方Cookie,广告技术公司加快了对指纹识别用于身份解析的投入。音频指纹的吸引力在于它不需要在设备上存储任何内容——从技术上讲,它不在ePrivacy指令第5(3)条关于Cookie的原始条款范围内,尽管欧盟监管机构现在明确将其归类为需要获得同意。2025年2月,Google撤销了自己内部对广告设备指纹的禁令,此举被英国信息专员办公室公开称为"不负责任"。
付费墙执行
出版商使用音频指纹来识别清除Cookie以绕过文章阅读限制的用户。由于指纹是从硬件而非存储数据计算的,它在Cookie删除和私人浏览会话中依然有效。
音频指纹合法吗?
自2020年以来,法律形势已大幅收紧。根据GDPR,能够识别个人的音频指纹构成第4条下的个人数据,无论是否附有姓名。EDPB 2024年指引所阐明的ePrivacy指令第5(3)条,现在明确涵盖设备指纹——而不仅仅是传统Cookie。
法国CNIL于2020年裁定Canvas指纹"等同于Cookie",并对一家未经同意使用的公司处以罚款。比利时和荷兰数据保护机构也做出了类似裁定。在欧盟,广告用途需要获得同意。欺诈检测可能符合第6(1)(f)条的合法利益条款——但仅限于严格必要、在隐私政策中披露且不用于任何次要营销目的的情况。
根据中国《个人信息保护法》(PIPL),音频指纹数据属于个人信息,须依法告知用户并取得同意。在欺诈防范等场景下可主张特定目的,但需在隐私政策中明确披露,且不得用于营销。
如何保护自己免受音频指纹追踪
以下保护措施按效果从最完整到最适合日常使用的顺序排列。
- Tor Browser(最强):Tor完全禁用了Web Audio API(
dom.webaudio.enabled = false)。没有什么可以指纹的。代价是任何合法使用Web Audio的网站——音乐应用、互动媒体、游戏——都会崩溃。 - Brave Browser——Farbling(日常使用最佳平衡): Brave的Farbling 将音频缓冲值乘以从每个会话、每个网站种子派生的微小随机因子。扰动在会话内保持一致,音频播放正常,但在会话之间和网站之间会变化——使跨站和跨会话追踪变得不可靠。Brave严格模式更进一步,用伪随机噪声替换波形。
- Firefox
privacy.resistFingerprinting:在about:config中启用此标志,使Firefox为所有使用该标志的用户返回统一的音频值,目标是统一性而非随机化。默认不启用,可能导致网站兼容性问题。 - Safari 17+隐私浏览:Safari在音频缓冲值中注入小噪声(幅度0.001)。这是最弱的保护——Fingerprint.com通过对40,000个渲染样本取平均值绕过了该保护,消除噪声并恢复了真实的底层指纹值。
- uBlock Origin配合严格过滤列表:在网络级别阻止许多指纹脚本运行。不修改API本身——仅对已知脚本URL有效。
- 标准隐私/无痕模式——无保护:Chrome、Firefox和Edge的无痕模式返回与正常模式相同的音频指纹。无痕模式防止存储,而非防止计算。在 whatsmy.fyi 上查看你的其他暴露信号。
常见问题
音频指纹会使用我的麦克风吗?
不会。音频指纹使用 OfflineAudioContext API,它完全在内存中渲染音频,不访问任何输入设备。不需要任何权限,不产生声音,也不会出现在浏览器权限提示或指示器中。Web Audio API是与控制麦克风访问的媒体捕获API(getUserMedia)完全独立的规范。
在无痕或隐私浏览模式下有效吗?
完全有效。无痕模式阻止浏览器将浏览历史、Cookie和本地数据保存到磁盘——但音频指纹是从硬件和软件特征计算的,而非存储数据。你的CPU和操作系统音频栈在无痕模式下行为完全相同。只有具有主动音频API随机化的浏览器(如Brave或Tor Browser)才会有不同表现。
音频指纹与Canvas指纹有何不同?
Canvas指纹探测GPU的二维渲染管线——显卡、驱动和字体渲染器的差异产生唯一的像素哈希。音频指纹探测CPU的DSP管线——CPU架构和音频栈之间浮点运算的差异产生唯一的浮点数。它们针对完全不同的硬件层次,几乎总是一起使用。关键是,音频指纹在同一设备上具有更强的跨浏览器稳定性:同一台机器上的Chrome和Edge会返回相同的音频指纹,而Canvas指纹可能不同。查看 Canvas指纹指南 深入了解GPU侧的等效内容。
VPN能防止音频指纹追踪吗?
不能。VPN改变你的IP地址并加密你的流量,但对你的浏览器处理浮点音频运算的方式没有任何影响。音频指纹完全来自本地硬件和软件——无论你的请求通过哪台服务器路由,结果都是相同的。使用Brave Browser或开启 privacy.resistFingerprinting 的Firefox来保护音频指纹。你可以在 whatsmy.fyi 上检查你的VPN是否真的在屏蔽你的IP。
音频指纹比WebGL指纹更准确吗?
WebGL指纹产生更高的熵——它可以暴露你的精确GPU型号、驱动版本和支持的扩展列表,甚至可以区分两台硬件配置相同的机器。音频指纹产生更低的熵(约4.8 bits vs WebGL的更高值),但在浏览器更新间的稳定性方面表现出色。实际上,商业系统将两者结合:WebGL用于初始高分辨率识别,音频作为稳定的锚点,防止指纹随时间退化。阅读 WebGL指纹指南 了解GPU侧的工作原理。
为什么DynamicsCompressor使音频指纹更有效?
DynamicsCompressorNode 应用非线性增益曲线——数学运算涉及指数和除法,而非简单加法。非线性运算在数千个样本中叠加浮点舍入误差的程度远超线性运算。一个中间乘法中特定于平台的微小差异,会通过压缩器的处理链级联成一个可测量的稳定且具有区分性的最终值。没有压缩器,简单的振荡器输出产生的平台变化会少得多,使指纹对识别不那么有用。
网站可以在不告知用户的情况下使用音频指纹吗?
技术上可以——该API不需要权限提示,在网络标签页不留任何痕迹,并在后台线程中静默运行。从法律角度来看,在欧盟根据GDPR和ePrivacy指令,在没有事先知情同意的情况下将音频指纹用于广告是违法的。对于欺诈检测,合法利益基础可能适用,但需要在隐私政策中披露。在实践中,执法不一致,许多网站在没有明确同意通知的情况下部署指纹识别。 EFF的Cover Your Tracks 等工具可以测试网站是否在对你进行指纹识别。
相关文章
- 什么是浏览器指纹?网站如何在不使用Cookie的情况下追踪你 ——将所有指纹信号组合成一个设备身份的完整指南
- 什么是Canvas指纹识别?网站如何在不使用Cookie的情况下追踪你 ——GPU渲染差异如何从像素输出创建唯一标识符
- 什么是WebGL指纹?你的GPU如何识别你的浏览器 ——3D图形API如何暴露你的GPU供应商、型号和驱动版本
- 什么是字体指纹?已安装字体如何在线追踪你 ——你已安装的字体列表如何为整体浏览器指纹做出贡献



