2006年8月3日 上午 11:17:00
<noscript></noscript>
发表者:吴军,Google 研究员
任何一段信息文字,都可以对应一个不太长的随机数,作为区别它和其它信息的指纹(Fingerprint)。只要算法设计的好,任何两段信息的指纹都很难重复,就如同人类的指纹一样。信息指纹在加密、信息压缩和处理中有着广泛的应用。
我们在图论和网络爬虫一文中提到,为了防止重复下载同一个网页,我们需要在哈希表中纪录已经访问过的网址(URL)。但是在哈希表中以字符串的形式直接存储网址,既费内存空间,又浪费查找时间。现在的网址一般都较长,比如,如果在 Google 或者百度在查找数学之美,对应的网址长度在一百个字符以上。下面是百度的链接
http://www.baidu.com/s?ie=gb2312&bs=%CA%FD%D1%A7%D6%AE%C3%C0&sr=&z=&cl=3&f=8
&wd=%CE%E2%BE%FC+%CA%FD%D1%A7%D6%AE%C3%C0&ct=0
假定网址的平均长度为一百个字符,那么存贮 200 亿个网址本身至少需要 2 TB,即两千 GB 的容量,考虑到哈希表的存储效率一般只有 50%,实际需要的内存在 4 TB以上。即使把这些网址放到了计算机的内存中,由于网址长度不固定,以字符串的形式查找的效率会很低。因此,我们如果能够找到一个函数,将这 200 亿个网址随机地映射到128 二进位即 16 个字节的整数空间,比如将上面那个很长的字符串对应成一个如下的随机数:
893249432984398432980545454543
这样每个网址只需要占用 16 个字节而不是原来的一百个。这就能把存储网址的内存需求量降低到原来的 1/6。这个16 个字节的随机数,就称做该网址的信息指纹(Fingerprint)。可以证明,只要产生随机数的算法足够好,可以保证几乎不可能有两个字符串的指纹相同,就如同不可能有两个人的指纹相同一样。由于指纹是固定的 128 位整数,因此查找的计算量比字符串比较小得多。网络爬虫在下载网页时,它将访问过的网页的网址都变成一个个信息指纹,存到哈希表中,每当遇到一个新网址时,计算机就计算出它的指纹,然后比较该指纹是否已经在哈希表中,来决定是否下载这个网页。这种整数的查找比原来字符串查找,可以快几倍到几十倍。
产生信息指纹的关键算法是伪随机数产生器算法(prng)。最早的 prng 算法是由计算机之父冯诺伊曼提出来的。他的办法非常简单,就是将一个数的平方掐头去尾,取中间的几位数。比如一个四位的二进制数 1001(相当于十进制的9),其平方为 01010001 (十进制的 81)掐头去尾剩下中间的四位 0100。当然这种方法产生的数字并不很随机,也就是说两个不同信息很有可能有同一指纹。现在常用的 MersenneTwister 算法要好得多。
信息指纹的用途远不止网址的消重,信息指纹的的孪生兄弟是密码。信息指纹的一个特征是其不可逆性, 也就是说,
无法根据信息指纹推出原有信息,这种性质, 正是网络加密传输所需要的。比如说,一个网站可以根据用户的Cookie 识别不同用户,这个 cookie 就是信息指纹。但是网站无法根据信息指纹了解用户的身份,这样就可以保护用户的隐私。在互联网上,加密的可靠性,取决于是否很难人为地找到拥有同一指纹的信息, 比如一个黑客是否能随意产生用户的 cookie。从加密的角度讲 MersenneTwister,算法并不好,因为它产生的随机数有相关性。
互联网上加密要用基于加密伪随机数产生器(csprng)。常用的算法有 MD5 或者 SHA1 等标准,它们可以将不定长的信息变成定长的 128 二进位或者 160 二进位随机数。值得一提的事,SHA1 以前被认为是没有漏洞的,现在已经被中国的王小云教授证明存在漏洞。但是大家不必恐慌, 因为这和黑客能真正攻破你的注册信息是还两回事。
信息指纹的虽然历史很悠久,但真正的广泛应用是在有了互联网以后,这几年才渐渐热门起来。
分享到:
相关推荐
这表明系统不仅具备指纹识别功能,还能通过蓝牙接口显示相关信息,并接收外部设备发送的命令。舵机在这里是用来控制门锁开启和关闭的执行机构,它接收到系统指令后会执行相应的动作。 从标签“fm-70指纹模块 c51...
在这个“欧非FTW-8003指纹资料.rar”压缩包中,我们找到了关于该指纹识别系统的关键信息,包括初始化接口、应用流程和相关文档。 首先,我们要理解指纹识别的基本原理。指纹识别技术是通过采集个人手指的纹路图案,...
在室内定位系统中,机器学习算法通常采用监督学习的方法,即通过收集大量的Wi-Fi指纹信息,并标记其对应的位置信息,训练出一个机器学习模型,该模型可以将新的Wi-Fi指纹信息映射到相应的位置信息上。 在基于Wi-Fi...
13指纹模块的指纹锁U盘设计与实现完整资料(软件源码+硬件电路).zip基于TLC-13指纹模块的指纹锁U盘设计与实现完整资料(软件源码+硬件电路).zip基于TLC-13指纹模块的指纹锁U盘设计与实现完整资料(软件源码+硬件电路)....
### 网页排重算法——信息指纹算法详解 #### 一、信息指纹算法概述 在互联网信息爆炸的时代,如何高效地识别与过滤重复信息变得尤为重要。信息指纹算法作为一种有效的网页排重方法,在搜索引擎领域应用广泛。其...
在IT领域,指纹仪是一种广泛应用于身份验证和安全控制的设备。它利用人体独一无二的指纹特征来进行身份识别,常用于企业门禁系统、电脑登录、数据保护等方面。本篇文章将详细解析“setup--指纹仪驱动”及其相关知识...
当用户的指纹接触到笔记本上的传感器时,指纹驱动程序开始工作,它负责将传感器采集到的复杂生物数据转化为系统可以理解和处理的信息。这样的转换,对于确保指纹识别的准确性和效率至关重要。 蓝天P15SM-A指纹驱动...
信息指纹与消重算法在信息技术领域中扮演着重要的角色,特别是在搜索引擎优化、数据去重以及内容识别等方面。信息指纹是一种独特的内容表示方法,它通过提取信息的关键特征并将其转化为不可变的标识码,类似于人类...
GA 425.3-2003 指纹自动识别系统基础技术规范 第3部分 指纹纹型分类及代码
GA 425.9-2003 是关于指纹自动识别系统的基础技术规范,特别是其中的第9部分,主要涉及的是指纹图像数据转换的技术条件。指纹自动识别系统(Fingerprint Automatic Identification System, FAIS)是一种利用计算机...
在当前数字化时代,个人与财产安全的重要性愈发凸显,指纹锁作为门禁系统中的新兴技术,以其便捷性和安全性受到广泛认可。其中,5713FK-15B指纹锁以其先进的生物识别技术,为用户提供了更为可靠的安全保障。然而,...
LCD液晶显示模块是系统的输出模块,负责显示系统的状态和信息。LCD液晶显示模块的设计与实现主要包括液晶显示驱动、显示控制和显示刷新等步骤。 4. 报警模块的设计与实现 报警模块是系统的报警模块,负责在出现...
Wi-Fi指纹是一种基于无线接入点(Access Point, AP)发射的信号强度信息,每个AP在特定位置都有独特的信号特征,这些特征可以形成一个“指纹”,用于识别设备所处的位置。当移动设备通过内置的加速度计和陀螺仪等...
GA 425.5-2003 指纹自动识别系统基础技术规范 第5部分 十指指纹信息卡式样和填写规范
K-means指纹定位可减少定位算法的计算量,提高定位的实时性已成为当前定位算法的一个研究热点。然而其聚类的随机性却给定位带来极大的不稳定性,对此提出使用两步聚类算法进行优化,根据AIC准则自动得到最优的聚类个...
3. "test01.pbt":这是PowerBuilder的项目文件,它定义了项目结构、源代码文件、数据库连接等信息,用于构建和管理整个指纹识别DEMO。 4. "test01.pbw":这是PowerBuilder的工作区文件,记录了开发环境的设置,如...
在JavaScript代码中调用browser-fingerprintjs库的get方法,获取浏览器指纹
这些方法结合使用,可以捕获到更多的指纹信息,比如服务器类型、操作系统、数据库、JavaScript库版本等。通过这种方法,TideFinger能够在短时间内收集并分析大量的数据,提高指纹识别的效率和准确性。 此外,...
C语言-个人设计-单片机指纹密码锁
本研究的主要目的是建立不同产地黄连的1H-NMR(氢核磁共振)指纹图谱,并探讨该技术在黄连质量评价中的应用。黄连是毛茛科植物黄连Coptis Chinensis Franch的根茎,具有清热燥湿、泻火解毒的药效,在中医中被广泛...