如果技术有罪,那么人类就真的有罪了。---沃吉硕德我们每天上网的时候,一定有过这样的经历:在XX/XX上浏览电动牙刷后,再去其他网站时,总会在角落里看到类似产品的广告,大和小。这让我们感受到了被大数据包围的沉浸感,但同时仔细想想,我们还有隐私吗?以后再讨论这个问题,先说说为什么会这样。1、浏览器指纹是的,你没看错,就像人有指纹一样,网页客户端(这里主要指浏览器)也有自己的指纹信息。这些信息经过综合分析计算,可以对客户端进行唯一识别,进而锁定、跟踪、了解网民的行为和隐私数据,从而达到精准投放广告、防扫码等效果。1、基本指纹基本指纹是任何浏览器的特征标识,如硬件类型(Apple)、操作系统(MacOS)、用户代理(Useragent)、系统字体、语言、屏幕分辨率、浏览器插件(Flash、Silverlight、Java等)、浏览器扩展、浏览器设置(Do-Not-Track等)、时区差异(BrowserGMTOffset)等诸多信息,这些指纹信息与人的身高、年龄“相似”,etc.冲突概率高,只能作为辅助标识。2.行为指纹这里以一个电子商务网站为例。当我们浏览任何产品时,我们在页面停留的时间长短、购买频率高的类别、产品尺寸等,都可以作为行为指纹记录在本地cookie中,帮助广告商精准投放广告可以还可以帮助电商网站训练推荐模型,为你做出精准推荐。所以“大数据可能比你更了解你自己”不是说说而已。3.高级指纹基本指纹就像一个人的外貌、身高、体重、性别。肉眼很难区分浏览器,所以高级指纹对于浏览器来说就像DNA一样准确(不用怕,是有极限的)这里我们重点介绍一下目前应用广泛的三大高级指纹:画布指纹/WebGL指纹/音频音频指纹。1)画布指纹画布(canvas)是HTML5中的一个动态绘图标签,可以用来生成甚至处理高级图像。2014年9月,ProPublica报道称,新的Canvas指纹追踪正在“上至白宫,下至YouPorn”等众多网站使用,其先进的指纹地位可见一斑。canvas指纹的生成过程大致如下:使用canvas绘制指定的图案,使用canvas.toDataURL()方法获取图片内容的base64编码,将其CRC校验码作为唯一标识(对于PNG格式图片,分块),最后一块是32位CRC校验)很多博客对canvas原理的介绍基本就是一句话:同一个HTML5Canvas元素绘制操作,在不同的操作系统和不同的浏览器上,生成图片的内容并不完全相同。在图像格式方面,不同的浏览器使用不同的图形处理引擎、不同的图像导出选项和不同的默认压缩级别。在像素级别,每个操作系统使用不同的设置和算法来进行抗锯齿和亚像素渲染操作。即使是相同的绘图操作,生成的图像数据的CRC校验也是不同的。但是好像理解还是不是那么直观?让我们花一点篇幅尽可能简单地解释一下。例如,我们在浏览器上看到的字体经过微调,与肉眼一致。所谓字体微调,其实就是一种特殊的指令,让渲染算法在屏幕上绘制文字。因为计算机中的文字不是以图像格式存储的,而是像数学公式一样存储的。当计算机将数学公式绘制成屏幕上的文字时,需要将数学公式渲染成由像素组成的实际图像,这些图像是根据屏幕分辨率和像素大小等参数生成的,因此结果可能会有所不同。这时候不同的操作系统/浏览器会有不同的微调算法,这样同一个字母m在肉眼上会显得一致,但是当我们放大到像素级别的时候,就会看到细微的差别,如图下图。又如抗锯齿渲染(边缘软化技术)。抗锯齿渲染就是让两个对比鲜明的物体之间的交点变得平滑,从而避免两个物体之间的像素点不美观。在黑白画面的边缘加入深浅不一的灰色像素作为缓冲,达到平滑的效果。不同的显卡驱动运行抗锯齿,结果会有所不同。这些差异也是肉眼看不见的。如果你仔细比较这些小像素点,你会发现颜色会有细微的差别。和以前一样,肉眼无法分辨的差异可以很容易地被计算机识别出来。这就是为什么不同的计算机会产生不同的指纹。2)WebGL指纹对canvas指纹有更好的理解,WebGL更好理解。原理基本一样,只是绘制出来的3D图像内容会和WebGL的一些属性值绑定在一起(比如渲染图片使用的显卡提供商,显卡型号,压缩级别,etc)被拼接成一个很长的字符串,经过哈希处理后,得到一个信息减少但保留信息的字符串作为WebGL指纹3)AudioContext指纹HTML5提供了JavaScript编程的AudioAPI,让开发者可以直接操作在代码中原始音频流数据,并对其进行任意生成、处理、重构,如改善音色、改变音调、音频分割等,这种操作甚至可以称为网页版AdobeAudition。大致原理如下,有两种方法:生成一个特定的音频信息流,对其进行一系列操作,计算出SHA值作为指纹,在输出到音频设备前清空音频,不用用户注意到它。生成特定的音频信息流,直接进行动态压缩,MD5哈希处理后得到音频指纹。之所以不同设备、不同浏览器的音频指纹会不同,是因为主机/浏览器的硬件/软件存在细微差别,导致音频信号。处理上的差异,同一台机器上的同一个浏览器产生的音频输出是一样的,不同机器或不同浏览器产生的音频输出会有所不同。可以看出,这三种高级指纹都是根据硬件或软件的不同,有的生成图片,有的生成音频,然后计算出不同的哈希值作为参考指纹。4、全面的指纹在互联网世界中,各种指纹的碰撞层出不穷,尤其是像macs这样的量产机。同一批同型号、同浏览器的mac,很可能会产生相同的“高级指纹”。有一定的重复率。这时候就需要将以上所有的指纹进行组合,经过分析,计算出最终的综合指纹作为判断。这样可以大大降低碰撞率,大大提高客户端唯一标识的准确性。2、到底要不要使用浏览器指纹浏览器指纹介绍完之后,大家应该对前面说的广告精准投放的方式有了一定的了解。让我们谈谈您对浏览器指纹的担忧。我真的很介意被无意识地收集个人信息。关于这一点,随着越来越多的人重视隐私,各大公司的浏览器厂商甚至手机厂商都对此做出了限制和约定。我们所了解的姓名/PC的mac地址/地理位置/电话号码等个人隐私,未经用户授权不得由第三方收集。以上提到的所有指纹基本上都属于非个人隐私的范畴。在用户授权的情况下,浏览器指纹可以为用户提供精准的广告和推荐。对于一些商家来说,浏览器指纹可以作为判断设备唯一性的重要标识,从而达到防扫码、绑定同一设备的目的。设置唯一账户等,减少公司的损失。所以,从我个人的角度来看,不管是什么技术,都可能被放到了不正确的使用领域或者场景中。关键在于我们是否制定并遵守了公众认可的规定。我们可以通过设置浏览器的很多权限配置来拒绝浏览器指纹之类的东西,也可以享受这些技术给我们生活带来的便利。公司厂商可以通过收集用户的非隐私信息获得设备的唯一标识,也可以通过用户授权收集信息建立更好的推荐模型,为人们带来细致的服务。这样和谐的愿景,是建立在一个“度”字之上的。我们可以看到这个度数正在一步步修正(因为浏览器指纹可以获取的非授权信息越来越少,说多了会泪目T_T),所以我们也有理由相信隐私蛋糕会终于有你了祝大家天天开心。以上是我对浏览器指纹识别的理解。如有不当之处,敬请指正。参考资料Canvas、WebGL和AudioContext指纹原理Web客户端追踪——浏览器指纹追踪
