加密散列函数或加密散列是一种算法,可以将数据作为单个文件或密码运行以创建称为校验和的值。
密码散列函数的主要用途是验证一段数据的真实性。只有使用相同的加密哈希函数从每个文件创建校验和时,才能认为两个文件相同。
一些常用的密码散列函数包括MD5和SHA-1(除此之外,还有很多其他函数存在)。
加密散列函数通常被称为“散列函数”,但这在技术上并不正确。哈希函数是一个通用术语,包括加密哈希函数以及其他类型的算法,例如循环冗余校验。
使用加密哈希函数验证数据的真实性
- 加密哈希函数用例
- 加密哈希函数是否可以反转?
- 密码和加密哈希函数
- 有关加密哈希函数的更多信息
密码散列函数用例
假设你要下载最新版的火狐浏览器。出于某种原因,您需要从 Mozilla 以外的网站下载。由于它不是托管在您信任的网站上,因此您需要确保您刚刚下载的安装文件与 Mozilla 提供的文件相同。
使用计算工具,您可以使用特定的加密哈希函数(例如SHA-2)计算校验和,然后与Mozilla网站上发布的校验和进行比较。如果它们相同,则可以确定您下载的版本与 Mozilla 上的版本相同。
加密散列函数可以反转吗?
加密哈希函数旨在防止将它们生成的校验和反转回原始文本的能力。尽管它们几乎不可能逆转,但它们不能保证 100% 的数据保护。
黑客可以使用彩虹表找出校验和的纯文本。彩虹表是一个“字典”,列出了数千、数百万甚至数十亿的校验和以及它们对应的纯文本值。
虽然散列密码算法不会逆向工程,但是这种情况是可以发生的,因为实现很简单。事实上,由于没有彩虹表可以列出所有现有的校验和,它们通常只对弱密码等简单短语有用。
这是一个简单版本的彩虹表,用于展示使用 SHA-1 加密哈希函数时的工作原理:
彩虹表的明文强>使用密码散列函数的校验SHA-1 强> 12345 8cb2237d0679ca88db6464eac60da96345513964密码1 e38ad214943daad1d64c102faec29de4afe9da3d ilovemydog a25fb3505406c9ac761c8428692fbf5d5ddf1316 Jenny400 7d5eb0173008fe55275d12e9629eef8bdb408c1f dallas1984 c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2的实例黑客必须知道使用哪种加密哈希算法来生成校验和并查找值。
为了额外的保护,一些用户密码存储站点在值创建之后但存储之前对密码哈希算法执行额外的功能。这个过程创建一个新的值,只有Web 服务器可以理解并且与原始校验和不匹配。
例如,您输入密码和创建的校验和后,可以将其拆分为多个部分并重新排列,然后保存到密码数据库中,或者可以转换某些字符。更改为另一个。下次尝试进行身份验证时,当用户登录时,Web 服务器会反转此附加功能,并重新创建原始校验和以验证用户密码是否有效。
执行这些步骤将限制发生所有被盗校验和的黑客攻击的可能性。这个想法是执行一个未指定的函数,因此如果黑客知道加密哈希算法但不是自定义的,知道密码校验和是没有帮助的。
密码和加密哈希函数
数据库存储用户密码的方式和彩虹表一样。输入密码后,将创建校验和并与写入用户名的密码进行比较。如果两个值相同,则您被授予访问权限。
假设一个加密哈希函数创建一个不可逆的校验和,创建一个简单的密码是否安全,例如 12345, 而不是 12 @ 34 $ 5 ?答案是否定的,这就是原因。
两个密码都不能只看校验和解密:
- 12345 的校验和 MD5:827ccb0eea8a706c4c34a16891f84e7b
- 12 @ 34 $ 5 的校验和 MD5:a4d3cc004f487b18b2ccd4853053818b
乍一看,您可能认为使用这两个密码中的任何一个都可以。这是真的,如果攻击者试图通过猜测 MD5 校验和来找出您的密码,但没有人这样做。通常会进行蛮力或字典攻击(字典攻击),这是一种常见的策略。
当有人多次尝试随机猜测密码时,就会发生蛮力攻击。在这种情况下,很容易猜出12345,,但很难随机找到困难的密码。字典攻击攻击与此类似,攻击者可以尝试常用(和不常用)密码列表中的每个单词、数字或短语,而 12345 就是这些常用密码之一。.
虽然加密哈希函数会产生难以猜测的校验和,但您仍应为所有在线和本地用户帐户使用复杂的密码。
更多关于加密哈希函数的信息
密码散列函数似乎与加密有关,但这两个东西的工作方式不同。
加密是一个双向过程,其中某些内容被编码为不可读,然后被解码以供正常重用。您可以加密已存储的文件,以便访问它们的任何人都无法使用它们,或者您可以使用文件传输加密功能来加密通过网络传输的文件,例如您上传的文件。或在线下载。
加密哈希函数的工作方式不同,因为校验和并不意味着用特殊的 dehash 密码反转。加密哈希函数的唯一目的是比较两条数据,例如在下载文件、存储密码和从数据库中检索数据时。
加密哈希函数可以为不同的数据段创建相同的校验和。当这种情况发生时,它被称为冲突。在考虑使用加密哈希函数为输入的每个数据创建唯一校验和时,这是一个大问题。
一个可能的冲突是因为每个加密哈希函数都会产生一个固定长度的值,而不管输入数据如何。例如,MD5 哈希函数为三个不同的数据块创建 827ccb0eea8a706c4c34a16891f84e7b、1f633b2909b9c1addf32302c7a497983 和 e10adc3949ba59abbe56e057。
第一个校验和来自12345。 第二个校验和由700多个字母和数字组成,第三个校验和来自123456。所有三个输入的长度不同,但结果自使用 MD5 校验和以来,始终只有 32 个字符。
对可以创建的校验和的数量没有限制,因为据说输入中的每个小变化都会产生完全不同的校验和。因为加密哈希函数可以生成的校验和的数量是有限制的,所以您总是可能会遇到冲突。
这就是创建其他加密哈希函数的原因。 MD5 只生成 32 个字符,而 SHA-1 生成 40 个字符,SHA-2 (512) 生成 128 个字符的值。校验和的字符越多,发生冲突的可能性就越小。
0 评论