任何浏览器都会把自己所在这台机器的几百条小事交给网站:屏幕尺寸、字体列表、显卡、音频部分。这些凑在一起,足以把那台机器认出来,以至于从这台机器登录的第二个账号也会被当成同一个人。指纹浏览器存在的意义,就是让每个环境看起来像另一台机器。具体怎么做到的,才是各家产品之间的全部差别,而这恰恰是多数产品页跳过的部分。
免费开始值在页面脚本运行之前就用 C++ 写好,不是事后往 Chrome 上注入。
量宽度、按名字查、本地字体 API,三条路都从同一份列表作答,所以互相对得上。
带认证的 HTTP 和 SOCKS5,旁边不漏 DNS,时区取自代理所在的国家。
屏幕、核心数、内存和显卡都来自同一台量过的机器,绝不拼凑。
同一个环境每次打开都画出同一个 canvas。会漂移的指纹比没有还糟。
在同一台机器上和真实 Chrome 对着量出来的,不是从设计上推出来的。
指纹浏览器在一台电脑上跑很多个浏览器环境,并给每个环境一份自己的身份:自己的指纹、自己的 Cookie、自己的代理、磁盘上自己的文件夹。彼此之间什么都不共用,所以看到环境 A 的网站没有办法把它和环境 B 连起来。
指纹不是一个值。它是浏览器对任何页面都能提的那些问题给出的一整套回答:User-Agent 怎么写、屏幕多大、报了几个 CPU 核心、哪些字体查得到、显卡驱动返回什么字符串、canvas 画出来的每一个像素是什么样。SigoLogin 为每个环境写十五个这样的表面,正是识别时最吃重的那几个。
危险不在某一条回答,而在组合。一台机器在 User-Agent 里说自己是 macOS,WebGL 渲染器报的却是 Direct3D 驱动,这是一台根本不存在的机器;而一台不存在的机器,比一台普通机器要好认得多。
代理换的是请求从哪个地址过来。浏览器里面它什么都不换。走两个不同代理的两个账号,报的仍然是同一块屏幕、同一份字体列表、同一张显卡、同一批 canvas 像素,这些就足够把它们串到一起。
反过来也一样。一个环境报的是雅加达时区,地址却在美国,这在任何人读到指纹之前就已经自相矛盾了。SigoLogin 的时区和语言直接取自代理所在的国家,两者没法对不上。
大多数指纹浏览器就是普通 Chrome,往每个页面注入 JavaScript 去覆盖 navigator、canvas 和 WebGL。这样做便宜,也能过掉简单的检测。它同样会留下痕迹。
我们这条路的代价值得直说:我们编译的是整个浏览器,所以跟上一个新的 Chrome 版本要花几天而不是几分钟,内核下载量大约 2 GB,而不是几兆。
每个环境的指纹都由一个种子生成,所以同一个环境每次打开都完全一样。指纹在两次会话之间漂移,比完全不伪装还可疑。所有值都取自同一个真实机型,字段绝不会在不同机器之间拼凑。
已安装字体列表是页面能读到的最强信号之一,页面会从三条路去数它:量文字画出来有多宽、按名字要一个字体、通过本地字体 API。三条路都在内核里过滤,所以三个回答互相一致。
Windows 环境声明大约 300 个字体,是在真机上量的,不是从哪份列表抄来的。macOS 的字体集用同样办法量下来大约 1,185 个。这里有一条硬限制,我们宁可说出来也不藏着:内核能藏起一个字体,造不出一个字体。把操作系统一定会装的字体藏掉,就等于编出一台没人拥有的机器,所以这份列表是量出来的而不是猜出来的。
canvas、音频和文字矩形的读数都会加上由环境种子推出来的确定性噪声:同一个环境每次画出的像素都一样,换一颗种子画出来的就不一样。WebGL 和 WebGPU 报的是同一张卡,因为页面可以两边都问一遍再对比。这项检查是我们撞见一个版本之后加的:那个版本里 WebGL 报的是 GeForce RTX 3060,WebGPU 适配器报的却是开发机上的 Intel 芯片。
屏幕尺寸、可用高度、像素比、CPU 核心数、报出来的内存、触摸点数,还有麦克风、扬声器和摄像头的名称,全都取自同一个机型。定成败的是小细节。在 macOS 上,Chrome 报的是物理核心数而不是线程数,报出来的内存上限在不同 Chrome 版本之间变过。这两处只要错一处,描述出来的就是一台没人卖的电脑。
WebRTC 是那个经典的泄漏口:即使走了代理,它也能把真实的本地地址报出去。有代理的环境上那条路是关掉的,真实地址没有地方出来,我们是把泄漏口堵上,而不是给它套一件代理的外衣。没有代理的环境如实作答,而不是装样子,因为关掉 WebRTC 的真机极少,关掉本身就是一个标签。时区和接受语言跟着代理所在的国家走,而不是跟着机器的设置。
握手发生在 HTML 的第一个字节到达之前,页面脚本够不着它,正因如此它值得改,也正因如此靠注入 JavaScript 的工具碰不到它。这一块正在做,当前版本里还没有。我们宁可在这里写明它没做完,也不愿让你以为已经做好了。
我们不想让你只凭设计就相信。每个表面都在同一台机器上和真实 Chrome 对着量,环境也拿去跑公开的检测站点。
对不上的地方,要么改掉,要么写下来,不抹平。这页上你不会看到的是分数:那些站点报的数字在两次访问之间会变,彼此也对不上,在这里印一个数就等于替别人的算法许诺。它们真正管用的地方,是帮我们找出自己的缺陷。
量也是抓我们自己错误的办法。字体过滤第一次发布时,一个检测站点翻了脸:本来读作可信的环境开始读作可疑。原因是过滤器把 Windows 11 自带的十一个字体也藏掉了,于是这个环境描述出一台不可能存在的 Windows 机器。把列表改对就没事了。这件事光靠推理找不出来,只有真的跑一遍才会露出来。
指纹只是众多信号中的一个,把其余的说清楚,比给一个我们守不住的承诺更值钱。
这个软件是一个浏览器,在自己的电脑上跑多个浏览器环境,这件事本身不违法。有规矩管的是你拿它做什么:你所在地的法律,以及你访问的网站的条款。我们不协助欺诈或冒充他人,我们的条款里写明了这一点。
不算。Chrome 的环境会分开 Cookie 和历史记录,最明显的那条关联是去掉了,但每个环境报的仍然是同一块屏幕、同一批字体、同一张显卡、同一批 canvas 像素,因为它们都跑在同一台机器上。存储分开不等于身份分开。
代理或 VPN 换的是请求从哪个地址过来,仅此而已;浏览器描述的还是同一台电脑。两者是互相补充,不是互相替代。SigoLogin 要求每个环境配一个代理,并从那个代理所在的国家取时区和语言,让它们不会和地址相矛盾。
3 个环境免费,用的是和付费套餐同一套指纹引擎。免费套餐限的是环境数量,不是保护程度。付费套餐提高环境数量,也提高可激活的设备台数。
环境是你自己磁盘上的文件夹,里面的 Cookie、保存的登录信息和历史记录都留在那里。应用会上传一小组管理用的字段,好让你在这个站点上看到自己的环境,另外还有一份错误日志。把环境共享给队友是唯一的例外,因为对方坐在另一台机器前。隐私页把每一个字段都列了出来。
Windows 10 和 11,以及 macOS 13 及以上,64 位。Intel 和 Apple silicon 都有对应版本。Linux 还没开始做。平台页写明了哪些已经有、哪些还没有。
在 Windows 上安装,打开应用,按下把它登录到这里的那个按钮。内核只下载一次。
起个名字,挂上一个代理。指纹由一颗种子生成,从那以后就固定不变。
每次打开都用同一个身份。把环境共享出去,队友在自己机器上打开的就是同一台设备。