区块链

Posted 默默地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链相关的知识,希望对你有一定的参考价值。

作者:萧萧
链接:https://www.zhihu.com/question/31112808/answer/122099628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在谈应用之前,最重要的是先理解它的技术本质是什么, 所有介绍区块链的答案里, 都最先提到了区块链不可篡改的特性, 所以第一个要理解的是它到底是怎么实现不可篡改性的。

  • 先修知识;
    • 密码学Hash()函数的单向性: Hash(x) =y , 通过y很难找到x
    • 哈希链: 假如现在有顺序产生的数据块 A, B , C 。 那么我们可以这样计算一个hash 。 注意 “||” 表示拼接
h0=  Hash(A) 
h1 = Hash(B || h0)
h2 = Hash(C || h1)

  • h2是我们计算的hash头部,现在来看, 为什么我们管这个东西叫Hash链, 因为h2 的值依赖于之前一系列数据的内容和计算顺序。 假如说现在你知道了h2 , 别人拿着A,B, C, 他不管是修改A,B, C的任一点内容还是A,B, C的出现顺序,你都无法再次计算出正确的h2

  • 好的, 其实到这里区块链的概念就有点感觉了不是吗, 它其实就是一个哈希链的变种。 怎么变? 添加一个随机数(Nonce)
    • 假如现在有顺序产生的数据块 A, B , C 。 我们来这样计算hash头。 注意 “||” 表示拼接
h0=  Hash(A|| Nonce0) 
h1 = Hash(B || h0 || Nonce1)
h2 = Hash(C || h1 || Nonce2)

 

  • 这里我们还添加一个额外的要求, 就是 h0, h1, h2 必须都得是以指定数目的0 bit开头的,例如要求每个哈希值都必须以5个0开头,则h0,h1,h2都应该是这样的形式(00000*****************)
  • 添加了这个要求以后, h0, h1, h2就都不是那么容易计算的了, 因为你不能根据输出的形式来反推输入是什么, 而A, B, C又是给定的, 那只能不断更改Nonce来穷举计算, 然后找到一个可以满足要求的Nonce值 ,使得h0, h1, h2符合要求
  • 到这里大家就知道所谓的矿工是在干什么了, 就是接受广播出来的数据块,然后计算当前最新的哈希链的头部, 当成功计算出了一个符合要求的Hash后, 就告诉所有人,自己找到了, 让别人再去计算下一个哈希头部。

 

  • 其实到这里, 区块链的本质就已经差不多了, 假如网络中大家都默认遵守协议, 只在最长的哈希链后计算新的头部,那么一切都很好, 但是如果有人想搞不一样,那他就得拥有更强的计算能力, 在诚实者都遵守规则的情况下, 自己能够计算出一个链条分叉甚至说直接计算出一个新的链条,让大家都承认。
  • 至于这个难度的证明,中本聪就是建立了一个泊松分布的概率模型, 假设了诚实结点计算出新的哈希头的概率p和不诚实结点计算出新的Hash头的概率q后,算出了一个N值。
    • 这个N值的含义是给出了当一个新的哈希头部 h1 计算出来后,其后追加N个头部(h2,h3,h4....)后,网络才应该承认这个新的头部 h1. 因为此时, 攻击者要想成功发动攻击, 至少需要计算出一个长度大于N的分支, 这个概率在攻击者没有掌握全网算力50%的时候是很难达到的

所以到这里, 区块链就已经清楚了,就是一个密码学工具的一种巧妙应用而已, 没什么神奇的 。

那这里思考一下, 不可篡改性其实并不是一个什么神奇的特性,密码学的签名技术就能提供不可篡改性呀, 区块链到底解决了一个什么问题。答案是


  • 信任问题

    • 区块链提供了一种方案, 让一个网络中,所有的结点都有能力去用计算能力投票, 从而保证了得到承认的结果是大多数人公认的结果, 不会因为少数结点作恶,而修改结果
    • 传统的交易建立在什么基础上, 我们对于金融机构的信任, 对于中央银行的信任, 或者对于交易对手的信任, 对于第三方中间人的信任。
  • 这里其实就引出了很多安全技术应用,或者说很多制度建立的本质, 如果你信任的越多, 需要做的工作就越少。
  • 区块链就是因为不想信任网络中的任意一个单一结点, 所以让大多数人具有公平的投票权利, 而这个投票权利,不是按人头算的, 是按CPU算的, 每个CPU有一票。


    • 区块链的最难以克服的缺点1: 效率问题
      • 前面说过, 当你信任的越多, 需要做的工作越少, 就好比你和一个人做生意, 如果你完全信任对方, 那么合同都不用签, 口头约定就行。 如果不太信任, 签一个简单的合同, 规定最重要的事项。 如果特别不信任, 让律师对交易中所有存在风险的地方列出条款,规定责任, 签一个大大的合同。
      • 所以看出来了吧, 信任越多, 效率越高。 信任越少, 效率越低。
      • 区块链也是一样,因为没有单一结点可以信任,通过计算来换取信任。 所以简单的一个承认交易的操作, 需要大量的计算参与进来, 结果是什么, Bitcoin平均交易速度只有7笔每秒。
    • 比特币的最难以克服的缺点2: 宏观金融的适应性
      • 金融学和经济学作为人类多年来发展出来的科学具有不可替代的地位, 比特币的流通货币量是存在上限且增加速度基本固定的, 这符合经济规律吗? 显然不符合。 因为学过经济的人都知道, 货币只是对实物财富的衡量, 货币增长速度快于商品增长数量, 则发生通胀, 货币增长速度慢于增长速度则发生通缩。

  • 比特币的最难以克服的缺点3: 匿名引发的安全性
    • 想一想匿名对于罪犯的好处,就不难理解比特币的洗钱风险
    • 比特币作为信息安全学者的发明产物, 现在常被应用于黑客入侵之后勒索的交易手段, 想起来也真是讽刺
  • 比特币的最难以克服的缺点4: 用户的易用性
    • 比特币的技术是基于密码学签名技术的, 你的账户安全由你的私钥保护, 如果不添加别的手段,比如在别人那里备份, 或者在别的地方备份, 你丢失了密钥, 账户里的 钱是没有人能给你找回来的。 想想人们丢银行卡, 忘记密码的频率, 这个问题有多大, 不用我说大家也懂

说了这么多缺点, 区块链技术和比特币技术就不行了吗? 显然不是,不然那些国际金融机构也不会下大功夫研究它, 但其实, 和其他所有的技术一样, 大家都只是在寻找一种能够更高效解决信任问题的手段而已, 金融机构的核心是什么, 交易投资与风险控制呗。 其实也都是围绕信任问题展开的。信任问题的解决在金融机构本来其实就是耗费了大量的成本的, 只不过很多成本在后台, 或者在人工的耗费上, 很多人看不到而已。

总结 :
 区块链的技术有望以一个更低的成本解决更广泛的信任问题所以被受人关注。

以上是关于区块链的主要内容,如果未能解决你的问题,请参考以下文章

Golang区块链开发002-初始化区块链与POW挖矿实现

技术解析+代码实战,带你入门华为云政务区块链平台

用不到 50 行的 Python 代码构建最小的区块链

只用200行Go代码写一个自己的区块链!

区块链DAPP 开发入门 代码实现 场景应用

只用120行Java代码写一个自己的区块链