『学概念找员外』哈希函数之谜题友好
今天我们说哈希函数的最后一个特性——谜题友好。不得不承认,这些专业领域内的专业术语也是一个接一个的,而且一个比一个晦涩难懂,看起来每个字都认识,被人家这么一组合,就傻眼了。所以员外就是干这个的,把这些晦涩难懂的词汇给大家用大白话解读出来,让每一个人都能看懂,学习到区块链的一些技术点。
定义
如果对于任意n位输出值y,假定k选自高熵分布,如果无法找到一个可行的方法,在比2的n次方小很多时间内找到x,保证H(k‖x)=y成立,那么我们称哈希函数H为谜题友好。
员外就问你懵不懵那啥?其实员外在第一眼看到这句话的时候,也跟大家一样,这说的都是些什么呀,不过没关系还好员外最后还是读懂了,就在这儿给大家解释一下。
高熵分布:意思就是分布程度很高,在这个高熵分布中选这个 k 无穷接近于随机。就好像我在你家5口人中背着你随便选一个人,让你说出这个人是谁,你是有20%的几率答对的,那么你家这5口人就是一个低熵分布。如果我在茫茫的大街上随便拉一个人,即使让你看到长什么样子,你也说不出这个人叫什么,这就是高熵分布。
H():即哈希函数,括号内放入原材料,然后就输出了哈希值。
k‖x:‖ 代表串联,或者说拼接,即把 k 和 x 连起来的意思。如果 k 代表 liu,x 代表 yuanwai,那么 k‖x 的输出就是 liuyuanwai。
现在定义中的几个难懂的部分解释清楚了,然后我们再回过头来看这个谜题友好的定义。意思就是 k 是一个随机数,来自高熵分布,然后输出的哈希值 y 是已知的,那么在找出一个 x 值,使得H(k‖x)=y成立这件事情上,是不可行的,或者说不可能的,这就是谜题友好。
应用
在区块链领域应用最广的非挖矿莫属了,尤其是在比特币里面。很多人都知道比特币挖矿其实就是计算机在拼命的求解一个哈希函数中的一个值,没错,就是我们今天说到的 k。
公式:H(idǁx)∈Y
如果这个哈希函数算出来的哈希值是 256 位,那么它的可能取值有 2的256次方个可能。解决这个谜题要求找到一个位于集合Y(通常比所有输出值集合小很多)内的输出值,Y的大小决定谜题的难度。如果Y是所有n位字符串的集合,这个谜题就毫无意义。然而,如果Y只有个元素,那么这个谜题难度最大,谜题ID取自高阶最小熵分布,这个事实保证了求解捷径。反过来,如果该ID的确定性很高,那么有人可能会作弊,比如通过使用该ID事先对谜题进行求解。
如果一个哈希函数具备谜题友好特性,这就意味着对于这个谜题没有一个解决略,比只是随机地尝试x取值会更好。因此,如果我们要把谜题做成很难解决是可以的只要我们能用适合的随机方式生成谜题ID。