加密散列函数是一种可以在诸如个人的数据上运行的算法文件或密码,以产生一个称为校验和的值。
密码散列函数的主要使用是验证数据的真实性。只有在使用相同加密散列函数的每个文件生成的校验和相同时,才能假定两个文件才相同。
一些常用的加密哈希函数包括MD5.和SHA-1虽然许多其他人也存在。
加密哈希函数通常被称为“哈希函数”,但这在技术上是不正确的。哈希函数是一个通用术语,它包括加密哈希函数和其他类型的算法,如循环冗余检查。
密码哈希函数:一个用例
假设你下载了最新版本的Firefox浏览器.出于某种原因,您需要从Mozilla以外的网站下载。因为它没有被托管在您学会信任的网站上,所以要确保您刚下载的安装文件与一个Mozilla优惠完全相同。
使用校验和计算器,您可以使用特定的加密哈希函数(如SHA-2)计算校验和,然后将其与Mozilla网站上发布的校验和进行比较。如果两者相等,那么您可以合理地确定您所下载的就是Mozilla希望您获得的。
密码哈希函数可以反转吗?
加密散列函数旨在防止能够反转它们创建回原始文本的校验和。但是,即使它们几乎不可能逆转,它们也不100%保证保护数据。
黑客可以使用彩虹桌来弄清楚校验和的纯文本。彩虹表是列出千元,数百万,甚至数十亿次校验和的词典。
虽然这在技术上并不是对加密哈希算法的逆转,但考虑到它是如此简单,它也可以。实际上,由于彩虹表无法列出所有可能存在的校验和,它们通常只对弱密码等简单短语有用。
下面是一个简化版的彩虹表,展示了如何使用SHA-1加密哈希函数:
彩虹表例子 | |
---|---|
纯文本 | SHA-1校验和 |
12345. | 8 cb2237d0679ca88db6464eac60da96345513964 |
密码 | e38ad214943daad1d64c102faec29de4afe9da3d |
我爱我的狗 | A25FB3505406C9AC761C8428692FBF5D5DDF1316 |
珍妮400. | 7 d5eb0173008fe55275d12e9629eef8bdb408c1f |
达拉斯1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
黑客必须知道使用了哪种加密哈希算法来生成校验和来计算值。
对于添加的保护,一些商店的网站用户密码在生成值后但在存储之前,请在加密散列算法上执行附加功能。此过程产生一个新的值,只有Web服务器理解并且与原始校验和不匹配。
例如,在输入密码并生成的校验和之后,它可以分为几个部分并在存储在密码数据库中重新排列,或者某些字符可能与他人交换。在尝试下次用户签名时验证时,WebServer会反转此附加功能,并再次生成原始校验和以验证用户的密码是否有效。
采取这些步骤会限制所有校验和都被窃取的黑客的用处。这样做是为了执行未知的函数,所以如果黑客知道密码哈希算法,但不知道自定义的哈希算法,那么知道密码校验和是没有帮助的。
密码和加密散列函数
数据库以类似于rainbow表的方式保存用户密码。输入密码后,校验和生成并与记录的用户名进行比较。如果两者相同,则授予访问权限。
假设密码哈希函数产生一个不可逆的校验和,您是否可以将密码简化为12345., 代替12 @34 5美元,只是因为校验和自己无法理解?不,这就是为什么。
只需在校验和即可通过查看这两个密码即可解密:
MD5为12345:827年ccb0eea8a706c4c34a16891f84e7b
MD5为12 @ 34 $ 5:A4D3CC004F487B18B2CCD4853053818B.
乍一看,您可以认为使用这些密码中的任何一个都很好。如果攻击者通过猜测MD5校验和验证您的密码,则这是真的,如果执行了蛮力或字典攻击,那么这是一个常见的策略,那么不是真的。
当用户在猜测密码时多次随机刺入,就会发生暴力攻击。在这种情况下,很容易猜出来12345.,但很难随机弄清楚另一个。字典攻击中类似的是,攻击者可以尝试来自常见(且不定于)密码列表的每个单词,数字或短语,12345.是那些常见的密码之一。
尽管加密哈希函数产生困难 - 到不可能的校验和,但您仍然应该使用复杂的密码对于所有您的在线和本地用户帐户。
关于加密哈希函数的更多信息
加密哈希函数似乎与加密有关,但这两种函数的工作方式不同。
加密是一种双向过程,其中内容被加密以变得不可读,然后稍后解密以便再次使用。你可能加密存储的文件因此,任何访问它们的人都无法使用它们,或者您可以使用文件传输加密加密通过网络移动的文件,如您上传或在线下载的文件。
加密散列函数的工作方式不同,因为校验和并不意味着要用特殊的去散列密码反转。加密哈希函数的唯一用途是比较两段数据,例如下载文件、存储密码和从数据库提取数据时。
加密哈希函数可以为不同的数据产生相同的校验和。当发生这种情况时,它被称为碰撞,这是考虑到加密散列函数的整个点的一个巨大问题是为每个数据进行唯一的校验和。
可能发生碰撞是因为无论输入数据如何,每个加密哈希函数都会产生固定长度的值。例如,MD5加密散列函数产生827CCB0EEA8A706C4C34A16891F84E7B,1F633B2909B9C1ADDF32302C7A497983和E10ADC3949BA59ABBE56E057F20F8883E对于三个完全不同的数据块。
第一个校验和来自12345..第二个是从700多个字母和数字产生的,第三个是来自123456.所有三个输入都有不同的长度,但结果始终只有32个字符长MD5校验和被使用了。
由于输入的每个微小更改应该产生完全不同的校验和,因此无法创建的校验和数量没有限制。由于一个加密哈希函数可以产生的校验和数量有限,因此您将遇到碰撞的可能性。
这就是创建其他加密哈希函数的原因。MD5生成32个字符的值,SHA-1生成40个字符,SHA-2(512)生成128个字符。校验和的字符数量越大,发生冲突的可能性就越小。