区块链学习(三、分布式数据库)

我们之前说过

区块链(1.0)是一个基于密码学安全的分布式账本,是一个方便验证,不可篡改的账本。

通常认为与智能合约相结合的区块链为区块链2.0, 如以太坊是典型的区块链2.0

那么,这个账本必定涉及到两点:

    1、账本加密

    2、账本的记录方式

以上两点那么就是下图中分布式数据库的三点基本技术点,此图来自http://www.sohu.com/a/192269429_494933


那么主要就是:哈希算法、哈希树、链式结构

1、哈希函数(https://learnblockchain.cn/2017/10/25/whatbc/#more)

哈希函数:Hash(原始信息) = 摘要信息

原始信息可以是任意的信息, hash之后会得到一个简短的摘要信息

哈希函数有几个特点:

  • 同样的原始信息用同一个哈希函数总能得到相同的摘要信息
  • 原始信息任何微小的变化都会哈希出面目全非的摘要信息
  • 从摘要信息无法逆向推算出原始信息

举例说明:
Hash(张三借给李四100万,利息1%,1年后还本息 …..) = AC4635D34DEF
账本上记录了AC4635D34DEF这样一条记录。

可以看出哈希函数有4个作用:

  • 简化信息
    很好理解,哈希后的信息变短了。
  • 标识信息
    可以使用AC4635D34DEF来标识原始信息,摘要信息也称为原始信息的id。
  • 隐匿信息
    账本是AC4635D34DEF这样一条记录,原始信息被隐匿。
  • 验证信息
    假如李四在还款时欺骗说,张三只借给李四10万,双方可以用AC4635D34DEF来验证原始信息

哈希函数的这4个作用在区块链技术里有广泛的运用。


上面是一个区块链哈希的一个最简单的哈希,那么我们还是得回归到之前的流程上的三点:哈希、哈希树、链式结构

1、哈希(https://www.jianshu.com/p/bf1d7eee28d0)


哈希这一块,上面只是举了个例子,具体的哈希算法并没有说明,那么可以提一下

首先,一个优秀的 hash 算法,将能实现:

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
  • 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
  • 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
  • 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它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 相关算法也已被提出。

    目前,一般认为MD5和SHA-1已经不够安全,至少使用SHA2-256算法


2、哈希树

这一块我们需要了解,哈希树的作用是什么?

哈希树大多用来进行完整性验证处理。在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,哈希树会大大减少数据的传输量以及计算的复杂度,同时也保证数据不会被修改的安全性

说白了就是用来大大提升数据校验的效率

然后我来放一张图


上图是一张Merkle树,这个Merkle树被用来归纳一个区块中所有的交易,同时生成整个交易集合的数字指纹

应用场景:

比如一笔支付,当我们要去验证其真实性的时候,我们如果通过原始交易信息来进行校验的话,就涉及到很大的数据量,特别是当每一个区块的信息量越来越大时

但是当有来Merkle树时,我们只需要去验证其中叶子上的value的值即可


3、链式结构


区块链记账方法

假设有一个账页序号为0的账页交易记录如下:

账号入账出账余额备注说明
王二100 190收到xxx货款
张三 10030xxxx
李四12090170xxxx

记账时间为: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值发生变化,这样在验证时就无法通过)的总账本。

每一个区块都有他的上一个区块的哈希值,通过这种联系可以一层一层追寻上去

每一个区块都包含了上一个区块的哈希值,下一个区块包含了当前区块的哈希值,这种链式结构的好处,自己去体会把


然后就是广义上的分布式架构模式,我们如何去理解

上一篇是针对狭义上的区块链进行来学习,这次主要是针对广义上的区块链进行学习,那么就是:

1、分布式存储

分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

以上是定义,那么在区块链里面,是怎样的呢?

定义里面说到,利用多台存储服务器分担存储负担,就是说在很多地方都存储着完整的交易历史信息,放到比特币、莱特币这种共有链的话,就是说任何一个人都可以去承担这样的职责,只要你满足条件后创建来区块即可,这就是所谓的挖矿,关于挖矿可以之后再说

2、点对点传输

点对点技术peer-to-peer, 简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。

就是说,当某个节点需要数据时,数据并不是从固定的节点来获取然后下载,而是所有存储了对应数据的节点都会提供数据进行下载


3、共识机制

就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能。


4、加密算法

这里其实在上面已经说过了,就是哈希方面的算法



那到了这里,区块链的基本的运行的一个狭义上以及广义上的原理我们就基本了解了,当然还有很多问题还没有解决,最直观的就是他是怎样一个运行流程,这个就需要以比特币为例子来说来,我们下一篇开始

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值