烤仔创作者联盟|什么是哈希函数?哈希函数在区块链体系中的应用

风吹一池皱热度: 44535

哈希函数也是在发展中前进的,不断地发展,不断地演化,更符合安全性的需求,在未来也一定会有更多好的哈希函数来满足未来区块链发展的需求。

区块链,本质上是一个去中心化的分布式数据库,其底层技术架构,是一串使用密码学方法相关联产生的数据块。

在区块链技术体系中,哈希函数、加密算法、签名算法、点对点通信等技术缺一不可。本文要来介绍的就是区块链密码学体系中的哈希函数。

​ 

算法


什么是哈希函数

通过百度百科,可以搜做到哈希函数的定义:“Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。”简单点来讲,哈希函数是一种接受输入值的函数,一个输入输入值得到输出值的算法。

哈希函数是用来解决数据和数据之间对应关系的一种算法,哈希函数就是一种映射,是从输入信息到存储地址的映射。到处都会使用加密哈希,从密码存储到文件验证系统。使用确定性算法的基本原理,就是使用一个输入,并且每次都产生一个固定长度的字符串。也就是说,使用同样的输入总是会导致同样的输出。

哈希函数这个领域不存在传统企业领域一家独大的情况,由于密码学的开源精神,哈希函数设计思路也非常的开阔,目前可供使用的哈希函种类、数量众多。

哈希函数主要分为以下六类:加法Hash、位运算Hash、乘法Hash、除法Hash、查表Hash、混合Hash。目前使用范围最常见的哈希函数就是混合Hash,包括MD系列和SHA系列等。


哈希函数的特点

哈希函数主要用来保障数据真实性(即完整性),即发信人将原始消息和哈希值一起发送,收信人通过相同的哈希函数来校验原始数据是否真实。其在设计上必须具备以下五大特点,来保证可靠性、安全性。

1) 输入任意长度,输出固定长度

在哈希函数下,不管输入信息数据有多长,输出的都是固定长度的比特值。比如非常有名的SHA256 哈希函数,输入任何值出来的都是256比特的0和1。

2)计算速度快

单向哈希的计算很快,这也保证了加密或者验证的速度。对于采用工作量证明的区块链来说,哈希函数运算效率非常重要。

3)单向性

哈希函数的计算过程是单向不可逆的。x推出H(x),但是通过H(x)无法(很难)推出x,也就是说,哈希值没有泄露输入的x的信息。在现有计算机的算力条件下,反向计算出哈希函数原像的难度太大,几乎不可能。

4)抗碰撞性

碰撞指的是在输入区间 D 中的任意两个不同输入 x、y,两者的哈希值是相同的。那么哈希函数的抗碰撞性意味着,找出任意两个不同的输入值 x、y,使得 H (x)= H (y)是困难的,但不是绝对不可能的。消息空间是无穷的,而哈希值空间是有限的,因此一定会存在碰撞,只是说我们的算法在现有的计算机算力条件下,保证足够的抗碰撞性。

5)谜题友好

就是说看x不知道H(x)是什么?这个无法从输入数据,判断到底输出是什么样子。知道输入信息也不知道哈希值是什么,可以很快算出来,但是无法预先判断。谜题友好性体现在:你无法通过控制输入值x来获得想要的输出值H(x)。


哈希函数在区块链体系中的应用

没有哈希函数,区块链就不可能成立。哈希函数是区块链安全性的保障,是区块链的基石。

1)钱包地址的生成

区块链钱包地址的生成都需要用到哈希函数。我们以比特币和以太坊为例,来进行讲解一下。

比特币和以太坊钱包地址的生成过程基本上是一致的。整个过程分为三步:

l 生成一个随机数,作为私钥;

l 随机数私钥通过非对称加密secp256k1椭圆曲线算法生成公钥;

l 公钥经过哈希算法得到地址。比特币应用的是 SHA256 算法,属于 SHA2系列的哈希函数;以太坊使用的keccak256哈希函数,也就是SHA3哈希函数。

钱包生成的第二步和第三步都是运用到了密码学的一些算法:RSA对称加密算法、哈希算法,都是一个不可逆转(难逆转)的过程。

2)工作量证明共识机制的基础

目前,比特币和以太坊都是使用的工作量证明共识机制。众所周知的是,工作量证明共识机制下节点出块比拼的是算力。但是,对于其中的算法机制并不了解。

工作量证明共识机制,简单点来说,就是大家争相证明自己完成了一定的工作量,最先完成的获得记账权。这个工作量的体现,就是计算机不断地给出随机数,然后通过哈希函数不断地输出数值,直到这个哈希值前面的K位必须是0(这个K是不固定的,是根据算力和出块难度进行调整的,K值越大,挖矿难度越高)。一旦找到这个随机数,就代表着挖矿成功。

因为哈希函数的谜底友好,没人能通过输入值得出哈希值,也保证了出块的安全性和公平性,理论上来讲只有掌握了超过51%的算力才有可能对最长链进行攻击,篡改数据,但算力超过51%,在成熟的公有链上,几乎是不可能的。

3)对交易数据进行压缩和验证

区块链要处理的交易数据时候非常庞大的,将每个块内的所有数据直接以序列的方式存储将会非常低效且耗时,但是利用哈希函数可以对数据进行压缩和验证。

Merkle Tree,通常也被称作Hash Tree,就是存储hash值的一棵树。区块链中每个区块都会有一个 Merkle 树,Merkle哈希树是一类基于哈希值的二叉树或多叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值,是将该节点的所有子节点的组合结果的哈希值。

使用Merkle树可以很快验证某笔交易是否属于某个区块。在处理完整性验证的应用场景中,Merkle树会大大减少数据的传输量及计算的复杂度。

算法

哈希函数在区块链中的应用和价值也是显而易见的。哈希函数也是在发展中前进的,不断地发展,不断地演化,更符合安全性的需求,在未来也一定会有更多好的哈希函数来满足未来区块链发展的需求。


声明:本文为入驻“火星财经 专栏”作者作品,不代表火星财经官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
本内容旨在传递行业动态,不构成投资建议或承诺。