我们之前说过
区块链(1.0)是一个基于密码学安全的分布式账本,是一个方便验证,不可篡改的账本。
通常认为与智能合约相结合的区块链为区块链2.0, 如以太坊是典型的区块链2.0
那么,这个账本必定涉及到两点:
1、账本加密
2、账本的记录方式
以上两点那么就是下图中分布式数据库的三点基本技术点,此图来自http://www.sohu.com/a/192269429_494933
那么主要就是:哈希算法、哈希树、链式结构
哈希函数:Hash(原始信息) = 摘要信息
原始信息可以是任意的信息, hash之后会得到一个简短的摘要信息
哈希函数有几个特点:
举例说明:
Hash(张三借给李四100万,利息1%,1年后还本息 …..) = AC4635D34DEF
账本上记录了AC4635D34DEF这样一条记录。
可以看出哈希函数有4个作用:
哈希函数的这4个作用在区块链技术里有广泛的运用。
上面是一个区块链哈希的一个最简单的哈希,那么我们还是得回归到之前的流程上的三点:哈希、哈希树、链式结构
哈希这一块,上面只是举了个例子,具体的哈希算法并没有说明,那么可以提一下
首先,一个优秀的 hash 算法,将能实现:
所以对于算法的选择需要遵循以上四点原则
目前流行的 Hash 算法包括 MD5、SHA-1 和 SHA-2。
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是 Message Digest 的缩写。其输出为 128 位。MD4 已证明不够安全。
MD5(RFC 1321)是 Rivest 于1991年对 MD4 的改进版本。它对输入仍以 512 位分组,其输出是 128 位。MD5 比 MD4 复杂,并且计算速度要慢一点,更安全一些。MD5 已被证明不具备"强抗碰撞性"。
SHA (Secure Hash Algorithm)是一个 Hash 函数族,由 NIST(National Institute of Standards and Technology)于 1993 年发布第一个算法。目前知名的 SHA-1 在 1995 年面世,它的输出为长度 160 位的 hash 值,因此抗穷举性更好。SHA-1 设计时基于和 MD4 相同原理,并且模仿了该算法。SHA-1 已被证明不具"强抗碰撞性"。
为了提高安全性,NIST 还设计出了 SHA-224、SHA-256、SHA-384,和 SHA-512 算法(统称为 SHA-2),跟 SHA-1 算法原理类似。SHA-3 相关算法也已被提出。
这一块我们需要了解,哈希树的作用是什么?
哈希树大多用来进行完整性验证处理。在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,哈希树会大大减少数据的传输量以及计算的复杂度,同时也保证数据不会被修改的安全性
说白了就是用来大大提升数据校验的效率
然后我来放一张图
上图是一张Merkle树,这个Merkle树被用来归纳一个区块中所有的交易,同时生成整个交易集合的数字指纹
应用场景:
比如一笔支付,当我们要去验证其真实性的时候,我们如果通过原始交易信息来进行校验的话,就涉及到很大的数据量,特别是当每一个区块的信息量越来越大时
但是当有来Merkle树时,我们只需要去验证其中叶子上的value的值即可
假设有一个账页序号为0的账页交易记录如下:
账号 | 入账 | 出账 | 余额 | 备注说明 |
---|---|---|---|---|
王二 | 100 | 190 | 收到xxx货款 | |
张三 | 100 | 30 | xxxx | |
李四 | 120 | 90 | 170 | xxxx |
记账时间为:2017-10-22 10:22:02
区块链在记账是会把账页信息(包含序号、记账时间、交易记录)作为原始信息进行Hash, 得到一个Hash值,如:787635ACD, 用函数表示为:
1
|
Hash(序号0、记账时间、交易记录) = 787635ACD
|
账页信息和Hash值组合在一起就构成了第一个区块。
比特币系统里约10分钟记一次账,即每个区块生成时间大概间隔10分钟
在记第2个账页的时候,会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash,即:
1
|
Hash(上一个Hash值、序号1、记账时间、交易记录) = 456635BCD
|
这样第2个区块不仅包含了本账页信息,还间接的包含了第一个区块的信息。依次按照此方法继续记账,则最新的区块总是间接包含了所有之前的账页信息。
所有这些区块组合起来就形成了区块链,这样的区块链就构成了一个便于验证(只要验证最后一个区块的Hash值就相当于验证了整个账本),不可更改(任何一个交易信息的更改,会让所有之后的区块的Hash值发生变化,这样在验证时就无法通过)的总账本。
每一个区块都有他的上一个区块的哈希值,通过这种联系可以一层一层追寻上去每一个区块都包含了上一个区块的哈希值,下一个区块包含了当前区块的哈希值,这种链式结构的好处,自己去体会把
然后就是广义上的分布式架构模式,我们如何去理解
上一篇是针对狭义上的区块链进行来学习,这次主要是针对广义上的区块链进行学习,那么就是:
分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
以上是定义,那么在区块链里面,是怎样的呢?
定义里面说到,利用多台存储服务器分担存储负担,就是说在很多地方都存储着完整的交易历史信息,放到比特币、莱特币这种共有链的话,就是说任何一个人都可以去承担这样的职责,只要你满足条件后创建来区块即可,这就是所谓的挖矿,关于挖矿可以之后再说
点对点技术(peer-to-peer, 简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。
就是说,当某个节点需要数据时,数据并不是从固定的节点来获取然后下载,而是所有存储了对应数据的节点都会提供数据进行下载
就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能。
这里其实在上面已经说过了,就是哈希方面的算法
那到了这里,区块链的基本的运行的一个狭义上以及广义上的原理我们就基本了解了,当然还有很多问题还没有解决,最直观的就是他是怎样一个运行流程,这个就需要以比特币为例子来说来,我们下一篇开始