BlockChain学习——Hash函数特性

碰撞阻力

Hash函数的第一个特性是其具有碰撞阻力,关于其碰撞阻力的推导在文章BlockChain学习——Hash函数碰撞概率公式及其推导中提到过。碰撞阻力:无法找到两个值 x x x y y y,使得 x y x y xy的前提下 H ( x ) = H ( y ) H(x)=H(y) H(x)=H(y)成立。

由上文可知,Hash碰撞的概率是很大的(比如256bit的输入,在检验第 2 1 30 + 1 2^130+1 2130+1位的输入值的Hash时,相同的概率达到了 99.8 99.8% 99.8),但是要计算到碰撞的时间是不可预计并且是很长的(如果一台电脑每秒计算 10 k 10k 10k个Hash值,对于一个256bit的输入,最坏的情况需要 2 2 56 + 1 2^256+1 2256+1次输入,平均情况是 2 1 28 2^128 2128次输入,取平均来看,要计算 2 1 28 2^128 2128次输入,需要花 1 0 2 7 10^27 1027年的时间)。

隐秘性

Hash函数的第二个特性是其具有隐秘性。隐秘性其实是碰撞阻力的反过程。

来看一个最简单的例子。抛硬币的定义域为: 正 面 , 反 面 {正面,反面} ,我们假定如果抛出正面,就将其Hash成为 P o s i t i v e Positive Positive,反之Hash成为 N e g a t i v e Negative Negative(也就是 H ( 正 面 ) = P o s i t i v e H(正面)=Positive H()=Positive H ( 反 面 ) = N e g a t i v e H(反面)=Negative H()=Negative)。如果让对手得知Hash结果的前提下让其来猜测Hash前硬币到底是抛出正面还是反面,对手根据 H ( x ) H(x) H(x)函数会计算出,如果是正面,那么 H ( 正 面 ) = P o s i t i v e H(正面)=Positive H()=Positive,反之是 H ( 反 面 ) = N e g a t i v e H(反面)=Negative H()=Negative
也就是对手掌握了一个从Hash定义域到结果集的映射,只要查表,即可得出抛出的是正面或者反面。

所以,如果我们的定义域是一个超大的集合,对手将花费超多的时间来制作这个映射。我们把一个足够大的定义域的集合称之为:high min-entropy(高阶最小熵)。怎么理解高阶最小熵呢?它描述了分布的分散程度,我们知道一个系统越是无序,它的熵就越大。比如八面的骰子投掷结果的熵比六面骰子投掷结果的熵大。所谓高阶,也就是定义域取值足够的多,比如256个比特能得出 2 2 56 2^256 2256个结果,所谓最小也就是指最保守的情况(众所周知, SHA1(160bit)已经不够安全,比特币采用SHA256(256bit),所以SHA256是相对最保守的高阶最小熵概率分布)。

由此得出隐秘性的定义:Hash函数 H ( x ) H(x) H(x)的定义域 x x x为集合 X X X,如果 X X X符合high min-entropy(高阶最小熵)的概率分布,那么在给定 x ∈ X x\in X xX的前提下,确定 x x x的值是不可行的。用公式表示是 H ( X ∣ ∣ x ) H(X||x) H(Xx)

谜题友好

Hash函数的第三个特性是谜题友好。其实谜题友好是对整个Hash过程的一个要求,先来看看定义:如果对于一个 n n n bit的输出值 y y y(也就是输出值 y y y的值域是 Y Y Y,且Y含有 2 n 2^n 2n个元素),假定X选自high min-entropy(高阶最小熵的概率分布),如果无法找到一个可行的方法,在复杂度 O ( 2 n ) O(2^n) O(2n)小的多的时间内找到 x x x,保证 H ( X ∣ ∣ x ) = y H(X||x)=y H(Xx)=y成立,那么我们称 H ( x ) H(x) H(x)这个Hash函数是谜题友好的。

可以看出,谜题友好是对 H ( x ) H(x) H(x)及其值域 Y Y Y要求,也就是对过程必须是暴力破解的要求。

关于安全Hash算法——SHA256的算法原理过程有兴趣可以了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值