fingerprint2 计算浏览器指纹分析

摘要:
画布Hashof画布打印的最大信息熵为15.8,如上图所示,平均每56922个浏览器就会出现相同的值。258528769用户代理共享相同的签名。当然,fingerprintjs2中计算画布的代码更完整。请参考fingerprintjs2的getCanvasFp方法。作者测试了他生成的dataUrl是33.4kb。上面的Fingerprint2调用可以揭示一些信息。所有其他29项,包括UA、ACCEPTHeaders、canvas等,都直接拼接成一个字符串,并传递给Fingerprint2.x64hash128方法。在分析了该方法之后,使用了MurmurHash3哈希算法。作者检查并得知MD5和SHA1是加密哈希算法,MurmurHash3是非加密哈希算法。

介绍

浏览器指纹简单来说就是获取浏览器一些具有辨识度的信息,计算得到的值,以此指纹信息可以对应此用户。辨识度的信息可以是 UA、时区、地理位置或者是你使用的语言等其他的参数,信息越多并且信息的区别度越大,越能决定浏览器指纹的准确性。

直接使用 fingerprint2 库

<script src="https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/2.1.0/fingerprint2.js"></script>
<script>
  requestIdleCallback(function () {
    Fingerprint2.get(function (components) {
      console.log(components) // an array of components: {key: ..., value: ...}
      var values = components.map(function (component) { return component.value })
      console.log(values);
      var hash = Fingerprint2.x64hash128(values.join(''), 31)
      console.log(hash)
    })
  })
</script>

fingerprint2 计算浏览器指纹分析第1张

计算了这么 29 个浏览器指征,能得到一个 32 个字符串(128位)的字符串,据说识别率能有 99.9% 据介绍 我不禁对他是怎么做的感到好奇

分析

信息熵(entropy)是接收的每条消息中包含的信息的平均量,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。

图片摘自 掘金-是熊大啊-浏览器指纹追踪技术简述,下图就是数个特征值的信息熵、重复概率和具体的值:

fingerprint2 计算浏览器指纹分析第2张

可见 UA,ACCEPT Headers,canvas 的熵值都很高,重复率也小。

canvas

Hash of canvas fingerprint 的信息熵最大有 15.8,按上图所示,并且平均每 56922 个浏览器才会出现一个一样的值。

使用 Canvas 绘制相同的元素,但是由于系统的差别,字体渲染引擎不同,对抗锯齿、次像素渲染等算法也不同,canvas 将同样的文字转成图片,得到的结果也是不同的。

获取 Hash 的代码简化如下

function getCanvasFingerprint () {
  var canvas = document.createElement('canvas');
  document.body.appendChild(canvas);
  var context = canvas.getContext("2d");
  context.font = "18pt Arial";
  context.textBaseline = "top";
  context.fillText("Hello, user.", 2, 2);
  return canvas.toDataURL("image/jpeg");
}
getCanvasFingerprint()

我分别再 Chrome 和 Edge 上运行

fingerprint2 计算浏览器指纹分析第3张

fingerprint2 计算浏览器指纹分析第4张

可以再 ,可以点击这里测试一下你Canvas指纹。我测试的结果碰撞率约莫 0.05%。

258 of 528769 user agents have the same signature

当然 fingerprintjs2 计算 canvas 的代码更完善,请参照fingerprintjs2 的 getCanvasFp 方法 ,笔者测试按照他生成的 dataUrl 有 33.4kb。

怎么计算?

上文 Fingerprint2 的调用,能窥见一些信息,把所有的指征包括 UA,ACCEPT Headers,canvas 等其他 29 项都直接拼接成一个字符串传给了 Fingerprint2.x64hash128 方法,

分析其方法,使用了 MurmurHash3 哈希算法,笔者查阅得知我们熟知的 MD5、SHA1 是加密哈希算法,而 MurmurHash3 是非加密的哈希算法。如果数据量小,或者不太在意哈希碰撞概率,甚至希望生成的哈希值更小,都推荐使用非加密的哈希算法。有 128 位和 32 位两个版本,128 位版本的运算速度是 MD5 的十倍,此方法就选了 128 位的。

MurmurHash online 在线计算一下从 Fingerprint2 那边得到的指征拼接字符串

fingerprint2 计算浏览器指纹分析第5张

结果和上文的 Fingerprint2 运算结果一致

思考

这么计算在同一机器的不同浏览器得到的 hash 不一致,那么跨浏览器的指纹识别怎么做,请参照这篇 http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf

参考

掘金-是熊大啊-浏览器指纹追踪技术简述

fingerprintjs2

MurmurHash online

漫谈非加密哈希算法

免责声明:文章转载自《fingerprint2 计算浏览器指纹分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用OpenGL进行曲线、曲面的绘制Debian7.6安装过程中遇到的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

指纹识别器评估

评估指纹识别器可靠性的等级有三个:1. 拒识率。是指实际匹配,但匹配器觉得不匹配的情况。实际上存在匹配时匹配器确定没有匹配的情况,当安全性不太重要,重要的是仅通过一次测量便可顺利登录时,用户需要较低的拒识率。2. 误识率。是指实际不匹配,但匹配器误以为匹配的情况。实际上不存在匹配时匹配器确定存在匹配。当真正重要的是确信存在匹配时,您需要极低的误识率。 3....

Python机器学习(1)——决策树分类算法

1、决策树算法 决策树用树形结构对样本的属性进行分类,是最直观的分类算法,而且也可以用于回归。不过对于一些特殊的逻辑分类会有困难。典型的如异或(XOR)逻辑,决策树并不擅长解决此类问题。 决策树的构建不是唯一的,遗憾的是最优决策树的构建属于NP问题。因此如何构建一棵好的决策树是研究的重点。 J. Ross Quinlan在1975提出将信息熵的概念引入决策...

金融系列6《借贷记交易流程》

1.应用选择 终端发送SELECT命令给卡片,获取卡片支持的应用信息。这些信息由发卡行设定,包括应用优先权、应用名称和首选语言等。命令数据中可以包含PSE名(使用目录选择方法)、DDF名或请求的AID(AID列表选择方法) //选择PSE文件 Send:00A404000E315041592E5359532E4444463031 --->:611C...

从决策树到随机森林

这里仅介绍分类决策树。 决策树:特征作为决策的判断依据,整个模型形如树形结构,因此,称之为决策树 对于分类决策树,他们可以认为是一组if-then规则的集合。决策树的每一个内部节点有特征组成,叶子节点代表了分类的结果。父节点和子节点之间是由有向边连接,表示了决策的结果。 在这里,有必要解释一下,为什么决策树的学习过程变成了三个步骤:特征选择、决策树生成和剪...

Winow7安装指纹登陆

1、计算机 右键 -》属性 -》设备管理器 -》 安装好插件。 2、win7 内置administrator不能直接添加指纹。提示:E7210005 操作系统策略不允许操作。 1). 计算机上点右键,选择 管理 -- 本地用户和组 -- 用户,在 Administrator 用户上点右键,选择重命名,重 命名为 Administrator1 。2)....

uniapp APP端使用指纹

使用插件指纹模板: https://ext.dcloud.net.cn/plugin?id=358 Fingerprint模块管理指纹识别 要使用指纹识别功能需要具备条件: 确认当前设备环境是否支持指纹识别, 当前设备是否设置密码锁屏, 当前设备是否已经录入指纹。 (Android平台6.0及以上系统支持,只识别标准Android的指纹API,仅适配G...