什么是加密哈希? [初学者指南]
已发表: 2019-08-07目录
什么是加密哈希?
加密哈希解释
加密哈希函数属性
常用哈希算法
加密货币中的散列
密码存储中的哈希函数
包起来
很有可能,在你和你的朋友编造了一个代码来互相传递其他人无法理解的信息的那一天。 至少你认识这样的人。
一些像这样的人认真对待这款游戏并继续将其变成了职业。
其他人成为了魔术师——所谓的心术师。 在密码的帮助下,他们利用自己的“精神力量”猜出卡片、数字等。
这个简单的儿童游戏变成了所谓的加密、散列和所有其他函数,这些函数从给定的输入中生成看似不可读的代码。
今天,我们将深入编码的神奇世界,看看密码散列是什么、它的内部工作原理和它的应用程序。
所以,事不宜迟,让我们直接进入。
什么是加密哈希?
密码散列函数是一种用于安全目的哈希函数。 它有几个区别于非加密属性的属性。 让我们一步一步地分解它。
什么是哈希?
散列是用于压缩数据的方法。
尽管如此,它并不是每个人都知道的典型压缩,例如 .zip 或 .rar 文件。
散列使用散列算法为数据创建代码。 代码代表一串字符,充当该文件的“指纹”。
我们都知道指纹很小,但它们包含的数据量很大。 您知道,诸如我们的姓名、面孔、地址和其他敏感信息之类的信息。 散列是类似的——它采用任意大小的数据并将其转换为相对较小的字符序列。
无论输入的大小如何,在散列时总是得到固定长度的输出。
哈希函数示例
所以这里有一个例子来说明这是如何发生的。 对于此演示,我们将使用 256 位安全散列算法,称为 SHA-256。 它是最常见的散列算法之一,而且事实证明——它也被比特币使用。
信息 | 消息的哈希 |
你好 | 3639EFCD08ABB273B1619E82E78C29A7DF02C1051B1820E99FC395DCAA3326B8 |
欢迎来到 TechJury | B7FFC27E0A6F559E1F63A927B6132A42124CC790F9EFD0FCFF4C3B653AA0DF4B |
(整篇文章的内容) | 9247D0E6C7A2A45976DCC3D2393A52658B6DDFC846d8AF5743400EA12FB9DE74 |
看,虽然消息的长度不同,但它们都得到一个 64 个字符的哈希值。 这也称为哈希值或摘要。
如果您对一本书甚至整个图书馆的内容进行哈希处理,您将获得相同的固定长度结果。 您也可以使用其他类型的数据(视频、图片等)执行此操作。
什么是伟大的关于哈希是,你会得到一个完全不同的散列值,即使你做最小的改动。 它被称为雪崩效应。
例如,如果你的女朋友/男朋友删除了你前任的所有照片,文件夹的哈希值就会改变。 这样,您无需检查每张图片就知道出了什么问题。
让我们再看一个例子,说明哈希函数在实践中的作用。 对于下一个示例,我对“什么是 VPN? ”文章,它看起来像这样:
然后我从文章中删除了一个词并再次对其进行了哈希处理。 结果如下:
删除单个单词完全改变了哈希值。 如果您想检查是否对文件进行了任何更改,这将特别有用。
当您处理大量信息时,它甚至更有帮助。 例如,一个加密货币区块链每天存储数千笔交易。
现在让我们更深入地了解加密散列的真正含义。
加密哈希解释
当您需要安全性和隐私时,加密哈希就派上用场了。 加密散列的缺点是它通常比其他类型的散列慢。 如果您需要快速散列并且不需要高级别的安全性 - 非加密散列更好。 例如 - 如果您正在创建一些非敏感数据的索引。
非加密和加密散列之间的主要区别在于后者极难破解。 请注意,这并非不可能。 尽管如此,加密哈希使得破解哈希几乎是不可能的。
要使散列函数成为加密散列,它必须具有多个属性。
加密哈希函数属性
如果您想将散列用于加密目的,散列函数必须满足几个要求才能被认为是安全的。
属性 #1 – 速度
如果你喜欢花哨的词——加密哈希函数应该是计算效率高的。 这意味着散列函数应该能够在几分之一秒内生成散列。
来源
属性 #2 – 雪崩效应
雪崩效应意味着即使消息的微小变化也会导致散列值的重大变化。
信息 | 消息的哈希 |
欢迎来到 TechJury | B7FFC27E0A6F559E1F63A927B6132A42124CC790F9EFD0FCFF4C3B653AA0DF4B |
欢迎来到 Techjury | 66251AE6324F670BF988465E49B9CEAA2F8C4E72E1D61336D3794301116C092B |
在第二条消息中使用小写的“j”完全改变了哈希码。
这是一个简单的哈希函数示例,但您明白了。 它非常实用,可以快速显示是否有任何数据被更改。
属性 #3 –加密哈希函数应该是确定性的
这意味着无论您对同一输入使用哈希函数多少次,您将始终获得相同的输出。 这很明显,因为如果您为同一条消息获得随机散列,则整个过程将毫无意义。
属性 #4 – 预映像电阻(单向函数)
这意味着很难通过输出获得输入。
简而言之,您无法通过反向加密哈希函数来获取数据。 尽管如此,这并不意味着不可能看到消息。
这是交易。
有两种方法可以找到散列消息。
- 将哈希与现有的哈希列表进行比较,例如:Dehash.me。 通常,网络犯罪分子拥有自己的翻译(去哈希)消息数据库。
- 执行暴力攻击。
要使用蛮力破解散列,您必须选择一条消息,对其进行散列,然后将其与您拥有的散列进行比较。 最好的情况——你从第一次尝试就得到了它。 尽管如此,这种情况发生的可能性非常小。
最坏的情况 - 您在上次尝试中发现它。 这意味着您必须散列所有可能的消息并将它们与您拥有的消息进行比较。 数量不同,取决于哈希算法。
为了举例,让我们使用 SHA-256。 在这种情况下,您必须找到2 256 -1哈希值优先。 可以肯定地说,这不可能在几辈子内完成,然后就让它留在那里。
现在。
加密散列的原像抵抗特性在散列与加密的争论中起着重要作用。
看——你可以解密加密的消息,但你不能对加密哈希做同样的事情。
您可以将哈希视为冰沙。 您无法像从冰沙中提取香蕉和牛奶一样,从哈希中提取消息。
另一方面,加密更像是一个保险箱。 它可以保护您的贵重物品,但总有一把钥匙可以打开它。
特性 #5 – 抗碰撞性
这意味着两个不同的消息不应该能够产生相同的哈希值。 从数学的角度来看,这无论如何都是不可能的。
您已经知道哈希值具有固定长度。 这意味着输出组合有限。 另一方面,输入是无限的。 因此,理论上,两条不同的消息有可能产生相同的哈希值。
尽管如此,密码学中的散列函数使得散列冲突的几率几乎可以忽略不计。
看。
所有这些属性都确保了加密散列的安全性和可用性。 所以是时候了解不同的加密哈希函数了。
常用哈希算法
散列算法有不同的类别(家族)。 它们之间的核心区别在于每个产生的哈希值及其安全属性。
以下是最常用的:
消息摘要算法 (MD)
MD5 是许多公司选择的散列函数,但在 2004 年被破坏。当成功碰撞或针对它的前映像攻击时,散列算法被认为是破坏的。 尽管如此,许多网站仍继续使用 MD5 哈希函数进行文件验证。
例如,当您下载一个文件时,您可以将其哈希值与站点上的哈希值进行比较,以确保没有人篡改过它。
MD 系列由 MD2、MD3、MD4、MD5(所有这些都已损坏)和 MD6(不那么流行)组成。
下面是 MD5的哈希函数示例。
信息 | MD5 哈希 |
技术陪审团 | FECE553512085FF6B5E213C8EFF9F30D |
MD5 产生一个 128 位的哈希值,长度为 32 个字符。
由于其缺陷,消息摘要算法不再被视为加密哈希函数。
安全散列算法(SHA)
最大的加密散列函数家族由四类组成:
- SHA-0
- SHA-1
- SHA-2
- SHA-3
SHA-0 有很多缺陷,并没有被广泛使用。 SHA-1 试图修复它们,但在 2005 年被破坏了。
SHA-2 及其子类在今天被普遍使用,直到 SHA-3 证明自己是一种更安全的功能。
SHA-2 系列由四个成员组成 – SHA-224、SHA-256、SHA-384 和 SHA-512,它们的不同之处在于其哈希值的位数。 到目前为止,还没有对 SHA-2加密哈希算法的成功攻击。
以下是一些使用 SHA-2 类的哈希函数示例。
信息 | 技术陪审团 |
SHA-256 | FF3E4985DAFF59392EAE60DEC66EC823CAF9575B81903729053A999B9B2C708E |
SHA-384 | 77653BC173A561E3378373F64E447FB3AEDC691F387BB599656E6AB63B9C5D34 523C298C59C94802A478F8C3F36E9CDF |
SHA-512 | C975F1074E969FAEA76C15084881F7694DE4D542F9E4DF934AFA52470952A362 25F7ED63D023AB05746DDAFDFED96D57A7AF5344EB91589A09952D102DD3AB04 |
RACE 完整性原语评估消息摘要 (RIPEMD)
最初,RIPEMD 是为一个名为 RIPE 的欧盟项目创建的。 RIPEMD 系列中有五个散列函数。
- RIPEMD
- RIPEMD-128
- RIPEMD-160
- RIPEMD-256
- RIPEMD-320
2004 年,原始的 RIPEMD哈希函数发生了冲突。 这就是它不再使用的原因。 目前,RIPEMD-160 是最常见的。 这是它的外观:
信息 | RIPEMD-160 摘要 |
技术陪审团 | ca25dc64fb00c8becb21eddf50805fbc106eed00 |
漩涡浴缸
这个加密散列函数名称与家电制造商无关。 漩涡星系启发算法的名称。
Whirlpool哈希算法的有趣之处在于,它的创建者之一是 Vincent Rijmen,他是AES高级加密标准的共同创建者。
Whirlpool 是一个 512 位的哈希函数,其摘要表示一个 128 个字符的字符串。
这是加密散列函数的一个例子。
信息 | 惠而浦哈希 |
技术陪审团 | 2E9A775FA4450549FCB6F6CDC4761865715D46FF8003E93CC614EF7C9E3D42A93 D5A663B4E48674C5155417D686D81ABDBC12FB32A1B650C5E44F24E80156E7D |
这些是当今最常见的哈希算法。
所以,既然您了解了散列的基础知识,让我们看看它在现实生活中的应用。
加密货币中的散列
我们已经解释了比特币是什么以及区块链是如何工作的,所以我们将直接进入散列。
密码散列函数是cryptocurrencies必要的,因为它保证的blockchain的最重要的特征之一-不变性。
由于加密货币区块链处理大量交易,因此它们使用散列。 这是一种比在分类帐中保留每笔交易的每条记录更实用和安全的方法。
在比特币的情况下,矿工运行一系列 SHA-256 函数来创建块的哈希值。 然后后者接收时间戳。 一旦节点达成共识,区块就会被添加到区块链中。 该块不仅有自己的哈希,而且还包含前一个的哈希,从而将它们链接在一起。
由于雪崩效应,任何篡改块的尝试都是不可能的。 如果有人试图更改区块中的交易,他们也必须更改每个连续的交易。 这样的操作将需要如此多的计算能力和时间,这实际上是不可能的。
这使得散列成为区块链安全性的关键特征。
现在。
不同的加密货币在其区块链中使用不同的哈希算法。
例如,比特币使用 SHA-256 进行工作量证明。 然而,比特币使用两种哈希算法来生成公共地址(密钥)——SHA-256 和 RIPEMD-160。 这是由中本聪完成的,目的是为公钥提供更好的保护并降低冲突的几率。
另一方面,以太坊使用 Keccak-256哈希算法,这是 SHA-3 的基础。
在撰写本文时,还没有对这些算法中的任何一种进行成功攻击。
即使您不进入加密货币市场,您仍然每天都在使用散列函数。
怎么样?
密码存储中的哈希函数
公司使用四种主要技术来存储我们的密码——纯文本、加密和散列函数。 最后一种方法是这些技术中的两种或多种的组合。
让我们看看有什么区别。
以纯文本形式存储密码 - 一个很大的禁忌
以纯文本形式存储密码是……听起来就是这样。
像这样:
用户名:约翰·史密斯
密码:johnsmith93
该公司的数据库包含相同的信息——用户:John Smith,密码:johnsmith93。
如果公司重视客户的隐私,则应避免这种情况。 (希望Facebook 的人会读到这个。)
这种方法的缺点是显而易见的——如果网络犯罪分子渗透到公司的数据库中,他们可以看到所有的用户名和密码。
使用加密存储密码
加密是保护密码的更好方法。 它会将您的密码转换为不可读的数字和字母序列。
这是它的工作原理:
用户名:约翰·史密斯
密码:johnsmith93
当公司使用加密来保护您的密码时,数据库条目如下所示:
用户名:约翰·史密斯
密码:I8Zdy1QBthsk2ie1HHsl+66bf20fDDcdCtXURqa07iQ=
如果网络犯罪分子获得了这个密码,它就毫无用处——他们不能用它来闯入账户。 尽管如此,理论上它可以被解密。
如果恶意行为者获得了您的加密密码,他们可以使用各种工具对其进行解密。 尽管如此,与仅获取纯文本密码相比,它需要更多的时间和更高的计算技能。
幸运的是,有足够强大的加密算法可以作为保护密码的安全方法。
通过散列算法存储密码
散列和加密经常被误认为是同一个东西并且可以互换使用。 然而,它们之间有一个关键的区别。
散列函数与加密一样,也会将您的密码转换为不可读的数字和字母序列。 关键的区别是它只能以一种方式工作。 与解密不同,您无法逆转散列过程。话虽如此,如果网络犯罪分子获得了您密码的哈希值,通常他们无能为力。
有许多哈希函数可用,但让我们在示例中使用 SHA-256。
用户名:约翰·史密斯
密码(散列):e7c95991f28e529b4d3b37611e5f3b6a6a43600ce148af0c42d3d38c06365af5
现在。
尽管散列无法还原为其原始文本,但仍有大量消息及其散列。 不幸的是,如果恶意行为者获得其哈希值,他们仍然可以破解您的密码。 值得庆幸的是,如果您使用强密码,发生这种情况的可能性非常小。 在这种情况下,我们将使用不同的示例。
密码存储中的哈希函数示例
假设您的密码是 123456。(永远不要使用那个密码,而是创建一个强密码。)
如果我们使用 SHA-256散列算法,这是它的散列:
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
不幸的是,这个散列配置在一个去散列消息列表中。
问题更大,因为许多人使用相同的密码。 因此,如果数据库被黑客入侵并且网络犯罪分子找到了密码的哈希值,他们可以将其用于每个使用相同密码的用户。 更不用说许多人对不同的帐户使用相同的密码,这将使他们脱离煎锅并进入火中。
不过,您可以做一些事情来防止这种情况发生。
首先,使用强密码并为不同的帐户创建不同的密码。
您可以做的另一件事是在哈希中添加“ salt ”。 盐腌哈希增加了额外的价值,您的密码,并产生不同的密码哈希为每个输入。
例如,每个使用密码 123456 和“salts”的用户都会得到不同的哈希值。
每个示例都是123456的加盐哈希。
$2y$10$pIxpMnhlQmt1t.EUYK1G/eHkb7Roo/XhPybKyFZSAqk/50BW10a8。
$2y$10$sCLqOpeA4R.St/8IaUWF9.m01MM4YbY.qTwbCY3.K5z.cd5lwxL6W
那么,公司可以保护您的密码的最佳方式是什么?
它是上述所有技术的组合——例如 Dropbox 所做的。
来源: Dropbox
所以这就是你每天处理散列的方式,甚至没有意识到。
包起来
总而言之——散列有很多好处。
您可以散列任何类型的数据——无论是用于索引,还是用于检查更改。 这使得散列对于合约、下载、密码存储等很有用。
加密货币也在发展。 不仅仅是我们现在拥有的玩家,还有新玩家正在热身加入其中。 甚至Facebook 也会发布 Libra ,所以我们一定会更多地使用哈希。
也许 Facebook 会为其他大公司发布自己的加密货币铺平道路——为什么不使用新的哈希机制呢? 只有时间会给出答案。
下次见!
常问问题
您可以将哈希值视为任何信息的指纹——文件、文件夹、交易块等。一旦将哈希函数应用于任何数据,后者就会收到一个哈希值。
它由一个固定长度的字符串组成——像这样:
信息 | 哈希值 |
你好 | D44426ACA8AE0A69CDBC4021C64FA5AD68CA32FE |
密码学是使用代码(如散列和加密)保护数据的方法。
只要需要更高的安全性和隐私性,开发人员就会应用密码学。 它将纯文本(或其他数据)转换为不可读的随机字符字符串。 这保证了信息安全不被窥探。
散列函数是转换随机大小的数据为字符的一个对应的固定长度的字符串,也称为散列值的操作。
有两类散列函数——非加密和加密散列函数。 后者用于加密货币和密码存储,并提供更高的安全性。