区块链与哈希碰撞 哈希函数及其属性

入门知识 1周前 (09-15) 11次浏览 0个评论

目录散列函数和散列函数特性什么是散列函数?

哈希函数接受任意输入 x

可以是字符串数字或任何类型的任何值

并返回一个固定长度值 y

此过程也称为散列或摘要

所以散列函数有时也称为散列函数或摘要函数(digest )

常见的散列函数(散列算法) 坏散列函数的例子

将任意输入值作为字符串,将字符串中每个字符的值转换为ascII码表中的整数值

将每个字符对应的ascII码表值相加得到一个整数

返回此整数模 256 (

长度在0-255之间,即长度固定在8位二进制之间~

也就是这个哈希函数返回的值总是1byte长的数据

无论我们输入什么值

此函数始终返回 0 到 255 之间的整数

这是一个合规的散列函数,但不是一个好的散列函数

hash – 加密哈希

哈希在计算中有很多用途

例如,在 HashMap 等数据集合中

这个数据结构实际上是根据元素的哈希值来决定数据在内存中的存储位置。

或者在数据库分库分表的场景下

根据key的hash值,感觉一条数据应该存放在哪个库/表中或者应该在哪个库/表中搜索这个数据

有许多不同的哈希函数,它们的不同特性决定了应用领域

在区块链领域,哈希函数用于加密哈希

加密哈希的属性是无冲突或无冲突的

如果对于散列函数 H(x)

如果:

x≠y

H(x) == H(y)

-free 描述的特征是

如果我通过 H(x) 获得哈希,那么其他人应该很难通过不同的输入获得相同的哈希

碰撞示例

以前面提到的bad hash 为例

如果我们将 “” 作为输入,最终值将是 77

如果您使用“坐下###MEOW”。作为输入,该值也将为 77

哈希冲突是不可避免的

散列函数的输入参数可以是任何可能的数据。这个数据集可以看成是无限的

但是由于哈希函数的定义(定长返回值)

他只能将输入参数映射到相对较小的数据集

这种从无限到有限的映射必然会重复

所以所谓无碰撞或防碰撞只是说在合理的时间范围内能否找到一个哈希值的碰撞

如果哈希值的范围足够大

并且构造散列值的算法是合理的,使得生成的值看起来是随机的

这可以做到(至少很难蛮力)

哈希函数的漏洞

如果散列函数产生一个值

任何方式都可以比蛮力更快地找到碰撞值

可以说这个哈希函数是脆弱的

但是哈希函数可能不需要抗碰撞性,具体取决于其用途

所以也许一个易受攻击的哈希函数仍然被广泛使用

使用哈希作为消息摘要

如果我们使用的哈希函数是抗碰撞的

如果 H(x) = H(y)

那么更合理地相信 x=y

隐藏的隐藏

指隐藏原始信息

无法从结果中推断出原始哈希函数输入值

即哈希函数应该是单向的

没有隐身的哈希函数示例:

如果我们知道 H(x) 生成哈希值的算法

知道得到的哈希值为 42

然后我们可以轻松地将 x 倒回到 41

所以这里的 H(x) 不是隐藏的散列函数

提交提案

为了理解隐藏的特性区块链与哈希碰撞,想象这样一个例子

a 和 b 赌注

一个比特币的价值今年将超过 10,000 美元的猜测

但他不想让 b 在下注之前知道这些信息

那么a可以通过与b约定的散列函数H(x)生成一个散列值:

x = “今年一枚比特币的价值将超过10,000美元”

H(x) = y

让 b 持有 y

在兑现赌注时,即判断谁是赌注的赢家,a提供x→“今年一个比特币的价值将超过10,000美元”

b 计算哈希值 H(x) 是否等于 y 以知道当时建立投注合约时 a 用于生成哈希值的信息是否为“今年比特币价值将超过 10,000 美元”

在这个过程中 a 和 b 在没有完全传达信息的情况下完成了一个赌注

如果要建立这个例子中描述的情况,H(x) 需要是抗碰撞和隐藏的。

如果不耐碰撞

当赌注成立时,a 可以使用与散列值 y 提供的 x 不同的信息(碰撞值)来兑现赌注

如果不隐藏

b 在得到哈希值 y 后,可以推导出 a 用来建立博彩合约的信息 x

上述赌注示例的过程类似于区块链领域使用的提交方案

com = commit(m,nonce)

m是原始信息nonce是一个随机值,只使用一次生成的com可以理解为一个hash值

验证(com、msg、nonce)

验证过程需要提供哈希值 com 以及用于生成这个 com 的 m 和 nonce

如果m和nonce生成的hash值等于com,则验证通过

如果commit方法使用的hash函数是抗碰撞和隐藏的

那么就不可能找到m’/nonce’(m’≠m nonce’≠nonce)

提交(m’,nonce,)=commit(m,nonce)

它还确保了提交的计划的有效性。

这里添加了随机值nonce,可以理解为算法commit的原始信息m保持不变的情况。

一种获取不同hash值的方法com

nonce 没有实际意义,只使用一次(类似于密码加盐和散列的过程)

益智友好

简而言之区块链与哈希碰撞,益智友好

没有捷径可以生成特定或部分特定(以大于或小于某个值的值开始或结束)散列

除了不断尝试之外,没有其他方法可以生成特定的哈希值

此功能称为益智友好

工作证明和益智友好功能

即 H(x) 必须对谜题友好

前面提到的不良哈希函数对谜题友好吗?

因为算法生成的哈希值来自于字符串每个字符对应的ascII码表的索引值之和

您只需要简单地调整输入字符串内容即可得到特定的哈希值

例如,将“A”替换为“B”可以将最终哈希值增加 1

否则减1

上面用作示例的哈希函数对谜题不友好

比特币使用的哈希函数

本文为个人学习笔记

原创内容来自b站转载视频

原视频系列标题:

原视频链接:

感谢原作者

大部分转载的视频翻译都是机器翻译,此文字可能有些地方不恰当或翻译错误。如果有任何错误,请纠正我。谢谢

挖矿网Ethos中文站简单易用的挖矿系统,为挖矿产业提供教程软件以及矿机测评交易信息等,挖矿网各种数字货币挖矿收益对比计算,挖矿网介绍挖矿的工具,以及矿场的最新消息等。http://www.ethospool.com/

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址