我们所过的每个平凡的日常,也许就是连续发生的奇迹。 每日签到 收藏本站
登陆 / 注册 搜索

USERCENTER


查看:4444   回复: 5

[其他] 什么是 哈希算法(hash) Hash 简介

[复制链接]
发新帖
跳转到指定楼层
楼主
手摘星辰龙战于野 发表于 2018-8-20 17:49:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

人生若只如初见,何事秋风悲画扇。

在了解区块链时,新手听到的关键词之一是 散列散列算法 的概念,这些算法似乎无处不在。运行分布式网络和共识机器,如比特币或以太网网络,通过 p2p 连接数万个节点,需要“无信任”和验证效率。也就是说,这些系统需要以紧凑格式对信息进行编码的方式,以允许其参与者进行安全,快速的验证。

比特币和以太坊处理的主要原语是块的概念,块是包含事务,时间戳和其他重要元数据的数据结构。其安全性的一个关键部分是能够将关于网络全局状态的大量信息压缩成一个简短的消息标准,如果需要可以有效地验证,称为散列。

 1.hash-dog.png 什么是 哈希算法(hash) Hash 简介
即使更改输入中的一个字符也会产生完全不同的哈希值!

从密码存储到文件验证系统,无处不在使用加密哈希。基本思想是使用 确定性 算法,该算法接收一个输入并每次产生一个固定长度的字符串。也就是说,使用相同的输入将始终产生相同的输出。

决定论不仅对哈希值很重要,而且在输入中改变的单个位将产生完全不同的哈希值

散列算法的一个问题是碰撞的必然性。也就是说,散列是固定长度字符串的事实意味着对于我们可以想象的每个输入,还有其他可能的输入将导致相同的散列。

这意味着,如果攻击者能够按需创建冲突,攻击者可以将恶意文件或数据作为正确,正确的哈希和伪装合法传递。良好的散列函数的目标是使攻击者很难找到生成散列到相同值的输入的方法

计算哈希不应该太有效,因为这会使攻击者更容易人为地计算冲突。散列算法需要抵抗“预映像攻击”。也就是说,给定散列,应该极难计算回溯用于再现创建散列的值(即前映像)所采取的确定性步骤。

给定 s = hash(x),找到 x 几乎是不可能的。

总结一下,“好”散列算法具有以下3个属性:


改变输入中的一位应该会产生雪崩效应并导致完全不同的散列
应该具有非常低的碰撞概率
某种程度的效率不会牺牲碰撞阻力

【破解哈希】

最初的散列算法标准之一是 MD5 散列,它广泛用于文件完整性验证(校验和),并在 Web 应用程序数据库中存储散列密码。它的功能非常简单,因为它为每个输入输出一个固定的128位字符串,并在几轮中使用简单的单向操作来计算其确定性输出。它的输出长度短,操作简单,使 MD5 完全容易破碎,容易受到生日攻击的影响。

【什么是“生日攻击”?】

听说过如果你把23个人放在一个房间里,有50%的人有两个人会有同样的生日吗?在一个房间里将这个数字提高到70可以给你99.9%的几率。这源于我们所谓的鸽笼原则,该原则粗略地指出,如果必须填充100只鸽子和99只盒子,那么1只盒子将分享2只鸽子。也就是说,固定输出约束意味着存在可以找到冲突的固定排列度。

 2.鸽子.jpeg 什么是 哈希算法(hash) Hash 简介
鸽子太多了!至少有一个人会与另一个人分享一个地方

实际上,MD5的抗冲击性非常弱,因此简单的家用 2.4GHz 奔腾处理器可以在几秒钟内计算出人工哈希冲突。此外,它在当前网络早期的广泛使用已经在线创建了大量泄露的 MD5 数据库,可以通过简单的Google搜索其哈希来找到。

【哈希算法的多样性与进化】

开始:SHA1和SHA2

NSA(是的,NSA)长期以来一直是哈希算法标准的先驱,他们最初提出了安全哈希算法或SHA1,创建了160位固定长度输出。不幸的是,SHA1仅仅通过增加输出长度,单向操作的数量和这些单向操作的复杂性来改进MD5,但是没有对尝试不同攻击向量的更强大的机器提供任何根本的改进。

那我们怎么能做得更好呢?

输入SHA3

2006年,美国国家标准与技术研究院(NIST)发布了一项竞赛,旨在寻找一种替代SHA2的方案,这种方案在其内部结构上将成为一种标准。因此,SHA3作为一种称为KECCAK(发音为ketch-ak)的哈希算法的一部分而诞生。

尽管有这个名字,SHA3的内部通过称为海绵构造的机制有很大不同,它使用随机排列来吸收和输出数据,同时作为进入散列算法的未来输入的随机源。

 3.shah3.png 什么是 哈希算法(hash) Hash 简介
KECCAK256海绵构造操作作用于输入

SHA3​​维持一个内部状态,其中包含更多与输出相关的信息,从而可以克服先前算法的局限性。它在2015年成为NIST 的标准。

【哈希和工作证明】

当将散列算法集成到区块链协议中时,较旧的比特币选择SHA256而以太坊使用修改后的SHA3(KECCAK256)作为其工作算法证明。然而,使用工作证明为区块链选择哈希函数的重要质量是计算所述哈希的效率。

比特币 SHA256 的实现可以通过称为专用集成电路(或专用集成电路)的专用硬件进行额外的高效计算。关于在采矿池中使用 ASIC 以及它们如何使协议倾向于集中计算已经写了很多。

也就是说,工作证明可以激励计算效率高的计算机组聚合到池中,并增加我们所说的“哈希能力”,或者计算机器每个时间间隔可以计算的哈希数量。

以太坊选择了一种名为 KECCAK256 的改良 SHA3 。此外,以太坊的工作证明算法 Dagger-Hashimoto 意味着非常难以计算。

【为什么比特币使用双SHA256?】

比特币有一种有趣的方法用SHA256散列数据,因为它在协议中运行算法的两次迭代。注意,这不是生日攻击的对策,因为很明显,如果hash(x)= hash(y)则 hash(hash(x))= hash(hash(y))。相反,双SHA256用于缓解长度扩展攻击。

本质上,这种攻击涉及恶意行为者知道散列输入的长度,该散列输入可用于通过向散列值附加秘密字符串来欺骗散列函数以启动其内部状态的某个部分。处于SHA2算法系列中的SHA256遭受了这个陷阱,比特币通过计算两次哈希来减轻它的负担。

【以太坊2.0和BLAKE】

SHA3​​并不是2006年NIST哈希竞赛中唯一的突破。尽管SHA3获胜,一种名为BLAKE的算法紧随其后。对于以太坊2.0的分片实现,更高效的散列几乎是一项功能要求,研究团队非常重视这一点。BLAKE2b哈希算法是竞争中BLAKE的高度升级版本,与KECCAK256相比,它在保持高度安全性的同时,因其出色的效率而受到广泛探索。

在现代CPU上计算 BLAKE2b 实际上比 KECCAK 快3倍。

【哈希算法的未来】

似乎无论我们做什么,我们只是增加内部哈希操作的复杂性,或者增加哈希输出的长度,希望攻击者的计算机不够快,不能有效地计算冲突。

我们依靠单向操作的前映像的模糊性来保护我们的网络安全。也就是说,他的安全目标哈希算法的是使其很难,因为可能每个人都能找到两个值散列为相同的输出,尽管有可能是冲突的无限数量。

无论我们为协议选择何种算法,很明显我们正朝着计算效率的未来迈进,我们必须利用我们的最佳判断为工作挑选合适的工具,以及有希望经得起时间考验的工具。

楼主| 手摘星辰龙战于野 发表于 2018-8-20 17:52:27 | 只看该作者
人一生最大的幸运,就是在年富力强时发现了自己的人生使命。
流星☆坠落「出类拔萃」 发表于 2018-8-29 14:15:56 来自手机 | 只看该作者
我和我的小伙伴们都惊呆了!#y412:
夏雨初晴「出类拔萃」 发表于 2018-9-1 13:26:23 | 只看该作者
我水土不服就服你
L155「初入古黑」 发表于 2018-9-3 15:19:19 | 只看该作者
以前不懂,看帖总是不回。一直没升级和增加经验,现在我明白了。反正回帖15字就可以升级,还可以赚经验。升级又需要经验,于是我把这句话复制下来。遇贴就回,捞完就闪。
  收起(1)
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

关于我们|小黑屋|手机版|Archiver|古黑论

GMT+8, 2019-7-22 15:55 , Processed in 0.081661 second(s), 41 queries , Redis On.

© 2015-2019 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表