哈希算法创造奇迹

密码哈希函数(通常简称为哈希算法)是一种数学算法,用于将任意一组数据转换成长度固定的一串新字符。不管输入数据的长度是多少,同类型的哈希算法始终输出固定长度的哈希值。 因此,根据网上的SHA-1哈希生成器(SHA-1与MD 5和SHA-2都是部署最广泛的一种计算哈希函数),比如我的名字Brian生成的哈希值为:75c450c3f963befb912ee79f0b63e563652780f0。可能其他”Brian”会告诉你说,Brian这个名字被误拼成”brain”是极为常见的事。实际上,我以前有一张驾照上面的名字就被拼成了”Brain Donohue”,但这另一个故事了。brain通过在线SHA-1生成器生成的SHA-1哈希值是:8b9248a4e0b64bbccf82e7723a3734279bf9bbc4。 你看,这两个输出值截然不同,虽然在名字中Brian和表示中枢神经系统器官的这个单词brain之间差异完全在于连续的两个元音字母的位置(”ia”和”ai”)。更明白地说,如果我只把名字的第一个字母改为小写,SHA-1生成器的也会返回完全不同的哈希值:760e7dab2836853c63805033e514668301fa9c47。 密码哈希函数是计算中使用最普遍的工具,几乎可用于一切计算,从身份验证到恶意软件检测再到文件保护。   您会注意到,上述所有哈希值的长度都是40个字符,这并不令人吃惊,因为上面输入内容的长度均为5个字符。但如果在哈希生成器中输入本文到目前为止的所有单词,你会吃惊地发现返回以下哈希值:db8471259c92193d6072c51ce61dacfdda0ac3d7。也就是这1637个左右的字符(包括空格)和上面的5个字符的单词一样,经压缩后输出40个字符。你可以用SHA-1哈希算法对莎士比亚全集进行计算,最终也是输出40个字符。而最让人吃惊的是绝不会有两个不同的输入生成相同的哈希输出。 下图由Wikimedia Commons制作,说明的是上述概念,供您直观地学习: 哈希算法适用于哪些情况? 问得好。但很遗憾,答案是密码哈希算法适用于很多很多种情况。 对你我来说,最常见一种哈希算法形式是对密码进行哈希加密。例如,如果忘记了某个在线服务的密码,则很可能必须执行密码重置。重置密码时,通常你不会收到返回的明文密码。原因是在线服务并不会存储您的明文密码,而是存储密码的哈希值。事实上,该服务(除非使用的是极其简单的密码,这种密码的哈希值广为人知)并不知道您的真正密码。 确切地说,就是如果你收到的返回密码是明文,则说明你使用的在线服务未对密码进行哈希加密,这不失为一种羞耻。 您可以通过在线逆向哈希生成器自行进行测试。如果生成不安全密码(例如,”password”或”123456″)的哈希值,则在逆向哈希生成器中输入该哈希值时,逆向哈希生成器很可能会识别出示例中任一密码的哈希值。对于前文所举示例,逆向哈希生成器可以识别出”brain”和”Brian”的哈希值,但无法识别出代表本文正文的哈希值。所以哈希值输出的安全性完全依赖于输入数据,而输入数据几乎可以为任何内容。 对于这一点,据上月晚些时候TechCrunch的报告,流行的云存储服务Dropbox依据美国《数字千年版权法》,阻止了一名用户共享受保护内容。该用户在Twitter上写道,他被阻止共享特定内容,这一事件经由Twitter迅速发酵升温,人们对于Dropbox必定窃取了用户内容而大为不满,尽管隐私政策中明确承诺不会这样做。 当然Dropbox实际上并未窃取任何用户内容。据TechCrunch的文章中所述,导致这一事件发生的可能原因是版权持有者拿到版权文件(也许是数字版歌曲或电影)后,通过哈希函数来传送该文件。取得输出的哈希值后,他们将这一串40个字符加入了某种版权保护资料哈希黑名单。这样在用户尝试分享该版权保护资料时,Dropbox的自动扫描程序就会挑选出列入黑名单的哈希值,从而阻止资料分享。 所以,显然你可以对密码和媒体文件进行哈希加密,但密码哈希函数还有哪些其他用途呢?同样,实际答案是哈希函数的用途远远超出我的所知,也不在我的写作关心范围内。但是还有一个非常贴心的哈希应用是Kaspersky Daily。哈希算法被卡巴斯基实验室等反病毒软件公司用于恶意软件检测,部署广泛。 同样,电影制片厂和唱片公司也制定了哈希黑名单来保护版权数据,此外还有数量不定的恶意软件哈希值黑名单,其中大多数公开提供。这些恶意软件哈希(或恶意软件签名)黑名单由恶意软件哈希值或更小的可识别恶意软件组件的哈希值构成。一方面,如果用户发现了可疑文件,则可以在众多公共可用的恶意软件哈希注册表或数据库中选择一个来输入该文件的哈希值,输入后注册表或数据库会通知用户该文件是否为恶意文件。另一方面,反病毒引擎识别并最终阻止恶意软件的一种方法就是将文件哈希值与引擎自己的(以及公开的)恶意软件签名存储库中的进行比对。 密码哈希函数还可用于确保消息完整性。换言之,你可以借此确保某个通信或文件未被窃取,方法是检查数据传输前后生成的哈希输出值是否一致。如果前后哈希值完全一致,则传输可称得上是可靠的。

密码哈希函数(通常简称为哈希算法)是一种数学算法,用于将任意一组数据转换成长度固定的一串新字符。不管输入数据的长度是多少,同类型的哈希算法始终输出固定长度的哈希值。

因此,根据网上的SHA-1哈希生成器(SHA-1与MD 5和SHA-2都是部署最广泛的一种计算哈希函数),比如我的名字Brian生成的哈希值为:75c450c3f963befb912ee79f0b63e563652780f0。可能其他”Brian”会告诉你说,Brian这个名字被误拼成”brain”是极为常见的事。实际上,我以前有一张驾照上面的名字就被拼成了”Brain Donohue”,但这另一个故事了。brain通过在线SHA-1生成器生成的SHA-1哈希值是:8b9248a4e0b64bbccf82e7723a3734279bf9bbc4。

你看,这两个输出值截然不同,虽然在名字中Brian和表示中枢神经系统器官的这个单词brain之间差异完全在于连续的两个元音字母的位置(”ia”和”ai”)。更明白地说,如果我只把名字的第一个字母改为小写,SHA-1生成器的也会返回完全不同的哈希值:760e7dab2836853c63805033e514668301fa9c47。

密码哈希函数是计算中使用最普遍的工具,几乎可用于一切计算,从身份验证到恶意软件检测再到文件保护。

 
您会注意到,上述所有哈希值的长度都是40个字符,这并不令人吃惊,因为上面输入内容的长度均为5个字符。但如果在哈希生成器中输入本文到目前为止的所有单词,你会吃惊地发现返回以下哈希值:db8471259c92193d6072c51ce61dacfdda0ac3d7。也就是这1637个左右的字符(包括空格)和上面的5个字符的单词一样,经压缩后输出40个字符。你可以用SHA-1哈希算法对莎士比亚全集进行计算,最终也是输出40个字符。而最让人吃惊的是绝不会有两个不同的输入生成相同的哈希输出。

下图由Wikimedia Commons制作,说明的是上述概念,供您直观地学习:

哈希算法适用于哪些情况?

问得好。但很遗憾,答案是密码哈希算法适用于很多很多种情况。

对你我来说,最常见一种哈希算法形式是对密码进行哈希加密。例如,如果忘记了某个在线服务的密码,则很可能必须执行密码重置。重置密码时,通常你不会收到返回的明文密码。原因是在线服务并不会存储您的明文密码,而是存储密码的哈希值。事实上,该服务(除非使用的是极其简单的密码,这种密码的哈希值广为人知)并不知道您的真正密码。

确切地说,就是如果你收到的返回密码是明文,则说明你使用的在线服务未对密码进行哈希加密,这不失为一种羞耻。

您可以通过在线逆向哈希生成器自行进行测试。如果生成不安全密码(例如,”password”或”123456″)的哈希值,则在逆向哈希生成器中输入该哈希值时,逆向哈希生成器很可能会识别出示例中任一密码的哈希值。对于前文所举示例,逆向哈希生成器可以识别出”brain”和”Brian”的哈希值,但无法识别出代表本文正文的哈希值。所以哈希值输出的安全性完全依赖于输入数据,而输入数据几乎可以为任何内容。

对于这一点,据上月晚些时候TechCrunch的报告,流行的云存储服务Dropbox依据美国《数字千年版权法》,阻止了一名用户共享受保护内容。该用户在Twitter上写道,他被阻止共享特定内容,这一事件经由Twitter迅速发酵升温,人们对于Dropbox必定窃取了用户内容而大为不满,尽管隐私政策中明确承诺不会这样做。

当然Dropbox实际上并未窃取任何用户内容。据TechCrunch的文章中所述,导致这一事件发生的可能原因是版权持有者拿到版权文件(也许是数字版歌曲或电影)后,通过哈希函数来传送该文件。取得输出的哈希值后,他们将这一串40个字符加入了某种版权保护资料哈希黑名单。这样在用户尝试分享该版权保护资料时,Dropbox的自动扫描程序就会挑选出列入黑名单的哈希值,从而阻止资料分享。

所以,显然你可以对密码和媒体文件进行哈希加密,但密码哈希函数还有哪些其他用途呢?同样,实际答案是哈希函数的用途远远超出我的所知,也不在我的写作关心范围内。但是还有一个非常贴心的哈希应用是Kaspersky Daily。哈希算法被卡巴斯基实验室等反病毒软件公司用于恶意软件检测,部署广泛。

同样,电影制片厂和唱片公司也制定了哈希黑名单来保护版权数据,此外还有数量不定的恶意软件哈希值黑名单,其中大多数公开提供。这些恶意软件哈希(或恶意软件签名)黑名单由恶意软件哈希值或更小的可识别恶意软件组件的哈希值构成。一方面,如果用户发现了可疑文件,则可以在众多公共可用的恶意软件哈希注册表或数据库中选择一个来输入该文件的哈希值,输入后注册表或数据库会通知用户该文件是否为恶意文件。另一方面,反病毒引擎识别并最终阻止恶意软件的一种方法就是将文件哈希值与引擎自己的(以及公开的)恶意软件签名存储库中的进行比对。

密码哈希函数还可用于确保消息完整性。换言之,你可以借此确保某个通信或文件未被窃取,方法是检查数据传输前后生成的哈希输出值是否一致。如果前后哈希值完全一致,则传输可称得上是可靠的。

“Heartbleed”漏洞恐令数千网站泄密

更新:在上一篇有关此漏洞的文章中曾提到(引用了Github上的列表)HideMyAss网站用户受到Heartbleed漏洞的威胁。但该网站发言人与我们联系表示,他们的用户并未受此漏洞的影响,所以我们从受影响网站列表中删除了此网站。 更新2:专栏已更新受影响服务列表,这些服务官方推荐更改用户密码。 NPR(美国国家公共广播电台)主播David Green在早8点主持的《早间节目》中讨论安全漏洞话题后,人们都知道了安全漏洞是非常严重的问题。昨天早上的节目中又提到了此话题,这次是OpenSSL中的一种严重的加密漏洞,被戏称为”Heartbleed”(心滴血)。OpenSSL可能是互联网部署最广泛的加密库。如果您不是很清楚什么是OpenSSL,别担心,下面我会用500字左右的篇幅来尽量解释清楚整个原委。 与网站建立起加密连接后,数据都将使用SSL/TLS协议进行加密,不管你连接的Google、Facebook还是网银。许多流行的网络服务器利用开源OpenSSL库来执行此加密作业。本周早些时候,OpenSSL的维护人员针对一种严重漏洞发布了修订,此漏洞在实现TLS功能时出现,称为”Heartbeat”(心跳包),攻击者借助此漏洞可从服务器内存中读取多达64 KB的数据。 换句话说,如果保护机器的库是有漏洞的版本,那么互联网上的任何人都能通过该漏洞来读取机器内存。最坏的情况是这一块小小的内存中可能含有敏感数据 – 用户名、密码,甚至包括服务器用于加密连接的专用密钥。此外,利用Heartbleed漏洞不会留下痕迹,没有确定的方法来判断服务器是否被黑客入侵过,也无法断定哪类数据被盗。 好消息是OpenSSL修复了该漏洞。但坏消息是没有办法保证受Heartbleed漏洞影响的这些网站和服务实施补丁来减轻漏洞的影响。更多的坏消息是,该漏洞很明显能够被轻松利用,而且可能已存在长达两年时间。这意味着许多流行网站的安全证书已被盗,包括密码在内的敏感用户数据也很可能遭窃。 用户行动计划 更新:Mashable收集的清单列出了来自受影响网络服务的正式PR回复。为了节省阅读表格并检查证书(下面有更多检查相关内容)的时间,只需在以下所有站点上更改密码即可:Facebook、Instagram、Pinterest、Tumblr、Yahoo、AWS、Box、Dropbox、Github、IFFT、Minecraft、OKCupid、SoundCloud和Wunderlist。请对每个站点使用唯一密码! 检查自己喜欢的站点是否有漏洞。有多种在线工具可检查是否存在漏洞,但你还需要知道之前是否有存在过。很幸运,你可以根据一个长长的流行网站列表来检查是否有漏洞。好消息是,PayPal和Google未受影响。坏消息是,Yahoo、Facebook、Flickr、Duckduckgo、LastPass、Redtube、OkCupid、500px及其他许多网站都存在漏洞。如果您在这些脆弱网站上有注册有帐户,请准备好随时行动。 立即检查网站是否有漏洞。有一个简单工具可用于此检查。 网站所有者修复漏洞后,还需要考虑重新发布网站证书。因此准备好监视服务器证书,并确保使用的是最新证书(4月8日或之后发布的证书)。为此,请启用浏览器中的证书撤销检查。下面举例说明了如何在Google Chrome设置中启用此项。 此项将阻止浏览器使用旧证书。要手动检查证书发布日期,请点击地址栏中的绿色锁图标,然后点击”连接”选项卡上的”信息”链接。 对服务器打补丁并更新证书后,最重要的一步是立即更改密码。此时可修改密码策略,并开始使用容易记忆而又安全的密码。您可以使用我们的密码检查程序来检查新密码是否安全。

提示