什么是密码杂凑函式(Cryptographic hash function)?

By 时代数字趋势2022-02-04

加密杂凑函式是一种可运用于个人数据夹或密码上并产生验证码的演算法,主要用于验证特定文件的真实性,若两个文件的验证码相同,我们就可以推测该文件是由同一个加密杂凑函式所生成的文件。

MD5 和 SHA-1 是两个最常用的加密杂凑函式。

加密杂凑函式经常被指称为杂凑函式,技术上来说这不算正确,杂凑函式是一种包含加密杂凑函式与循环冗余校验等其他类别演算法的集合名词。

  • 加密杂凑函式实际应用範例
  • 加密杂凑函式是否具有可逆性?
  • 密码和加密杂凑函式
  • 关于加密杂凑函式的更多背景知识

加密杂凑函式实际应用範例

假设你下载了最新版本的火狐浏览器,但基于其他原因想从其他网站下载安装文件,但又无法确认其他陌生网站释出的文件是否和官网相符,这时便可以透过 SHA-1 等类似的加密杂凑函式来计算出验证码数值,如果两者相同,就可以判定该陌生网站的文件和官网释出的版本相符。

 

加密杂凑函式是否具有可逆性?

骇客透过彩虹表(rainbow table)来推测验证码的明码,而彩虹表是种列出成千上万,甚至上百万、上亿个验证码和与之相对明码值的字典。

加密杂凑函式设计用于避免透过函式生成的验证码遭人逆反溯回原始字符的可能性。即便如此,仍然不代表它可以完全防护文件免于侵袭。

虽然严格而言,这并不是真的可以逆转加密杂凑函式的方法,但它仍给人非常轻易能破解的错觉。实际上,由于彩虹表无法列出所有现存的验证码,因此仅能用来破解安全性较低的密码。

下面则是使用 SHA-1 加密杂凑函数与其明码的简化版彩虹表图例:彩虹表範例明码SHA-1 验证码123458cb2237d0679ca88db6464eac60da96345513964password1e38ad214943daad1d64c102faec29de4afe9da3dilovemydoga25fb3505406c9ac761c8428692fbf5d5ddf1316Jenny4007d5eb0173008fe55275d12e9629eef8bdb408c1fdallas1984c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2

 

骇客必然可以得知何者才是正确的加密杂凑函数所对应的验证码与明码数值。

为增加文件防护性,有些可储存用户密码的网站在加密杂凑函式演算法数值生成后和储存用户密码前执行额外功能。这个过程会产生另一个只有该网页服务器能够读取并与原始验证码相异的数值。

举例来说,当密码输入并产生验证码后,这组密码就会被拆成不同部分并重新排列存入密码数据库,或是字母顺序相互对调。当下次需要登入验证时,网页服务器就会反转这个功能并再次生成原始验证码来确认用户密码是否正确。

当验证码遗失时,这些步骤就可以降低破解器成功率,因此若骇客得知了与以往不同的加密杂凑函式演算法时,即使掌握了密码验证码也同样意义不大。

 

密码和加密杂凑函式

数据库透过与彩虹表类似的模式储存用户密码,当你输入密码便会生成一组验证码来比对你的过往历史登入数据,若两者相符则可以得到授权而登入。

诚如先前所提,加密杂凑函式会生成一组不可逆的验证码,但如果只是因为验证码在语言上不具任何意义,而将密码複杂度降低并设定成像是12345的连续数列而不是[email protected],这样真的安全吗?

下面则是两组无法只透过查看验证码本身来破解的密码

MD5 for 12345: 827ccb0eea8a706c4c34a16891f84e7b

MD5 for [email protected]$5: a4d3cc004f487b18b2ccd4853053818b

乍看之下你可能会认为使用哪一组密码都没有关係,这前提在当骇客尝试透过随机猜测 MD5 验证码来取得密码的时候的确可以成立,而且一般来说没有人这样做。但当骇客使用暴力攻击或字典攻击战术时,可就没这么简单了。

暴力攻击是一种猜测密码时会採用的战术。在前面的例子当中,要猜到12345其实非常容易,但想猜对另一组数字就很难了。

字典攻击就是暴力攻击中的一个战术,它透过从一组常见密码清单中尝试每一个英文单词、数字、语句等来破解密码,而12345刚好就是名单中的其中一个。

即使加密杂凑函式会生成破解难度高到难以猜测甚至是不可能破解的验证码,我们仍建议你在建立网络帐号时,提高登入密码的複杂度。

 

关于加密杂凑函式的更多背景知识

加密杂凑函式看起来与加密有所关联,但两者运作方式差异甚大。

加密是将某文件加密成为无法读取状态,并在解密后可正常使用的双向过程。你可以将所有储存的文件加密来避免他人存取,或者将加密用于上传或下载文件上。

加密杂凑函式则无法透过生成一组特殊可逆的验证码来破解密码,它唯一的用途就是在下载文件、储存密码或从数据库中拉取文件时比对函式与验证码是否相符。

加密杂凑函式也可能在不同文件间产出相同的验证码,这种情形称之为碰撞。但发生这情况就和起初加密杂凑函式的用意背道而驰了。

碰撞发生的原因是因为加密杂凑函式会生成一组无视原字数多寡,英数混和字符长度固定的数列。

例如 MD5 加密杂凑函式会生成三个完全不同区段文件的验证码827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983, 和 e10adc3949ba59abbe56e057f20f883e。

第一组是12345的验证码,第二则是超过700英数混和字符数列的验证码,最后是123456的验证码。这三组的原始数列长度都不同,但因为 MD5 的缘故,所产出都是固定32个字元的验证码。

由于只要原始数列内容有所变更,便会生成完全不同的验证码,因此可能生成的验证码数量并无相对限制。而单一加密杂凑函式可生成的验证码却是有限的,我们永远都可能遇到碰撞的情形。

这就是研发加密杂凑函式的初衷。而 MD5 生成固定长度32字元,英数混和数列,SHA-1数列长度为40字元,SHA-2 (512)则是128字元。验证码后的数字越大,发生碰撞的可能性就越低。

赞(0)
未经允许不得转载:时代数字趋势 » 什么是密码杂凑函式(Cryptographic hash function)?
分享到: 更多 (0)