从零开始学习区块链(1)

定义1:区块链(Blockchain)技术是维护一个不断增长的数据记录的分布式数据库,这些数据通过密码学的技术和之前被写入的所有数据关联,使得第三方甚至是节点的拥有者难以篡改。区块(Block)包含有数据库中实际需要保存的数据,这些数据通过区块组织起来被写入数据库。

定义2:Hash算法:哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。

从零开始学习区块链(1)

哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。

通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名,也称为“消息摘要”。

简单解释:哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。

举个例子,如果你输入一篇论文对并对其使用哈希函数运算得到一串固定长度的哈希值(计算结果),一旦别人抄袭或更改计算结果都会变化。而且哈希函数是不可逆的,这和普通函数有很大不同。

从零开始学习区块链(1)

定义3:merkel树,

Merkle Tree是一种数据结构中所说的树,网上大都称为Merkle Hash Tree,这是因为它所构造的Merkle Tree的所有节点都是Hash值。

Merkle Tree具有以下特点:

1. 它是一种树,可以是二叉树,也可以多叉树。无论是几叉树,它都具有树结构的所有特点;

2. Merkle树的叶子节点上的Value,是由你指定的,这主要看你的设计了,如Merkle Hash Tree会将数据的Hash值作为叶子节点的值;

3. 非叶子节点的Value是根据它下面所有的叶子节点值按照一定的算法计算得出的。如Merkle Hash Tree的非叶子节点Value的计算方法是将该节点的所有子节点进行组合,然后对组合结果进行Hash计算所得出的Hash Value。

例如,下图就是一个Merkle Hash Tree形状,如果它是Merkle Hash Tree,则节点7的hash value必须是通过节点15、16上的value计算而得到。

从零开始学习区块链(1)

目前在计算机领域,Merkle Tree大多用来进行比对以及验证处理。在处理比对或验证的应用场景中特别是在分布式环境下进行比对或验证时,Merkle Tree会大大减少数据的传输量以及计算的复杂度。例如,就拿上图举例,假如是 15,16.......30是一个个数据块的hash值,我把这些数据从A传输到B,并且在数据传输到B后,我想验证下传输到B上的数据的有效性型(验证数据是否在传输过程中发生变化),我只需要验证A和B上所构造的Merkle Tree的Root节点值是否一致即可。如果一致,表示数据是有效的,传输过程中没有发生改变。假如在传输过程中,15对应的数据被人篡改,通过Merkle Tree很容易定位找到(因为此时,节点0、1、3、7、15对应的Hash值都发生了变化),定位的时间复杂度为O(log(n))。

最后,我们来了解一下鼎鼎大名的比特币。著名的中本聪论文《比特币:一种点对点(Peer-to-Peer)的电子现金系统》中涉及了几个观点:

(论文下载地址:https://xueshu.glgoo.net/scholar?cluster=9372423383988544578&hl=zh-CN&as_sdt=0,5)

1. 去中心化、去中介化的可靠交易;

2. 反欺诈;

3. 基于密码学原理的电子交易凭证管理;

4. 分布式的时间戳服务器;

5. 足够的安全能力支持系统。

所以,我们可以把比特币理解为一个区块链技术的应用场景。

当区块链技术被发表后,很多人士认为有可能实现DAC。DAC,全称是Distributed Autonomous

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwsdy.html