Ch3nyang's blog collections_bookmark

post

person

about

category

category

local_offer

tag

rss_feed

rss

区块链是什么

calendar_month 2021-02
archive 杂项
tag blockchain

说起区块链,大部分人的第一印象一定是数字加密货币(例如比特币 bitcoin)。然而我不是学经济金融的,所以本文并不准备涉及到加密货币和挖矿的有关内容,我们只谈谈区块链的技术原理(从数学和计算机角度)与实际应用。

为什么要区块链

纵观历史,人类始终致力于缩短时间和空间的距离。例如,发明了电话方便沟通;发明了汽车方便出行。在商业领域更是如此:信用卡、二维码支付无不是为了更加快捷方便地实施交易。然而,这些交易系统中仍然存在几个问题:

  • 需要中心管理机构:支付宝的每一笔钱需要流经阿里巴巴,信用卡的每一笔钱需要流经银行。这一方面增加了管理运营的费用,另一方面也存在监守自盗的风险(例如最近的渤海银行事件)
  • 认证困难:假设你去银行取钱,你该如何证明是你本人呢?你会输入密码,或者还需要人脸识别。这当中有冒充他人的可能,同时第三方的认证识别也增加了开销。
  • 安全性不足:你可以充分相信银行的安全能力,这建立在银行已经培养了一个成熟的安全团队。我们希望能有一个技术,天生就是安全的。

区块链技术解决了以上三个问题。

我们可以把钱看作表示账户余额的数据,区块链则相当于数据库。通过某些算法和数据结构,区块链实现了数据流通的以下三个特征:

  • 去中心化:没有运营或管理机构。
  • 不可修改:一旦数据发生了变动(我们称之为交易),其变动的历史将永远保存,不可删除。
  • 高效透明:任何人,在任何时候,都能够查看到任何一个交易。

既然区块链可以看作数据库,那它便也可以存储其他需要这些特性的内容:比如法律合同、身份证明、产品交易数据等。区块链使得它们不可更改或删除,同时又方便查阅。

区块链长什么样

上面,我讲到了区块链的三个特征,自然就需要一些不同寻常的数据结构来实现这些特征。

分布式账本

程序员谈到保存数据交易的历史,自然而然会联想到 git。git 将每次代码提交的内容保存,按照时间顺序组成一条链,这样,可以方便地查阅提交历史。区块链也是如此,它将每一次交易的信息记录在“账本”上,并把这些账本按照时间顺序串成一串,这也是为什么区块链被称为“链”。

比如你家要记账。大脑正常的人记账都会按照时间顺序去记,一条一条的收付款记录连接在一起便组成了链。

区块链如何防止被修改或抹去历史记录呢?这便是我们讲到的去中心化问题。不同于银行常用的单一数据库,区块链的数据分布存储在不同位置的多个网络节点中,产生了很多冗余。当其中某个节点被篡改后,其它节点会立即发现这个脱颖而出的副本,并作出反应。黑客如果想要篡改某个数据,则必须同时修改超过半数的节点,使得剩余的节点成为少数群体。这在庞大区块链网络中的实施成本是不可接受的。

你家防止你偷偷篡改账本,拿钱买糖吃,于是一家三口一人一个账本,大家分别记账,你改了自己的,你爸妈的没有动,你变成了少数群体,很容易就被发现了。这便是利用了去中心化的思想。

即使真的有黑客控制了超过半数的节点,我们依然可以将链条“硬分叉”到未受影响的节点链条上去,让黑客篡改过的节点变得无价值。

比如你又同时改了你妈的账本,你爸的账本成了少数。但你爸妈一起一看,不对呀,我们的账本不应该是这个样子!于是,把你爸的账本定义为标准的账本,你修改过的账本便不算数了。

密码学

区块链网络是一种匿名网络,也就是说我只能知道发生了交易,但具体内容并不知晓。区块链主要应用到了 hash 算法以保证匿名性,具体来讲,每个区块(也就是我们上面所说的账本的条目)拥有一个哈希值表明其身份。

hash 算法利用一个 hash 函数,将任意长的数据映射到固定长度的字符串。简单点理解,比如我们输入了很多个超级大的数字,我们可以只存储它们除以 1,000,000,009 的余数。如果这时候给你另一个数字,你便可以计算它除以 1,000,000,009 的余数,然后判断是不是刚刚出现过的数字。

一个常见的例子是身份证号码最后一位的校验位。假设18位身份证号是 430101196001011318,这是杜撰的一个身份证号。那么,算法实际是将字符串 “-430101196001011310”(尾数用0替换)视为 13 进制整数,加 1,再模 11 得到校验码。为了用单个字符,余数是 10 时用 X 代替。这便是将一长串的身份证号码利用 hash 函数映射到一个数字上去。

你肯定会说,我们身份证号最后一位相同的人多得很,你怎么根据最后一位就能确定我的身份呢?一位数字不够就再来几位嘛。通常来将,区块链会使用 SHA256 加密,即映射到了 256bit 的数字串。256 位数字便有 2 的 256 次方种不同可能,这是一个天文数字,相同的概率非常小。

我们前面讲过区块链是一条链状结构,每个区块如何知道它的父节点是谁呢?通过存储父节点的 hash 值。即使我们的区块链只有一条(也就是不会相互确认是否合法),黑客修改了一个记录后,该记录的 hash 值便会改变,我们通过哈希值不匹配就可以发现攻击行为。

blockchain1

我们说的挖矿,便是挨个尝试原来的字符串,然后算出其 hash 值,直到找出 hash 值相同的,便算挖出了比特币。黑客攻击区块链,也是用的这个方法。

严格来说,比特币套娃使用了两次 SHA256。从密码学的角度来看,这能否更加安全,有待数学证明。

接下来再谈谈非对称加密。非对称加密用于身份的验证,表明你对某个区块的所有权。非对称加密有两把钥匙:公钥和私钥。公钥所有人都会知道,私钥只有天知地知你知。例如某人想要偷偷发一个文件给你,他便使用你的公钥对文件加密。由于解密需要私钥,因此,除了你,任何人都无法查看这个文件的内容。

把银行卡号比作公钥,密码比作私钥。别人想要向你转账,只需要知道你的卡号(也就是公钥),然后转就完事儿了。但想要把这钱取出来,只能你自己使用密码(也就是私钥)去取。

要具体谈论非对称加密,内容实在太多,我们点到为止。如果要了解更多内容,可以查看文末的扩展阅读书目。

共识机制

共识机制在某些地方也会被称作智能合约。共识机制简单讲就是大家遵守同样的规则使用这个区块链。比如,使用同样的 hash 函数,使用同样的分布式账本结构。

比如你家记账,不能你只记自己的收支,你妈只记收入不记开支,这样就乱套了。

当前主流的共识机制有:

  • POW:工作量证明,比特币就采用的它
  • N2N:节点到节点,例如 corda
  • PBFT:实用拜占庭容错,以及衍生出的 RBFT、SBFT 等
  • RAFT:基于领导者的共识
  • DPOS:股权委托证明,如 Graphene 等
  • Ripple:联合共识

在比特币挖矿中,使用的是 POW 机制。所有矿工平等地挖矿,通过提高挖矿的难度,使得挖到比特币需要付出一定的工作量。当算出满足条件的 hash 值后,获得记账权。这样做的好处是完全符合了区块链去中心化的思想,但浪费了大量资源。

而对于 DPOS 机制,类似于董事会投票表决。所有矿工投票选出一定数量的节点,由它们代理记账。如此一来,便违背了去中心化的思想。

我们说,去中心化程度越高,就需要付出越多的工作量。

区块链+

区块链应用广泛,最为常用的便是区块链+跨境支付。利用区块链在线验证的优势,可使原来几天的交易验证时间缩短到几秒钟。同时,省去了银行的手续费。

另一个应用是区块链+物流。利用区块链公开透明的特点,追踪物流动态,合理管理物流运输。(记得之前有个比赛就是这个主题,我们几个人都不懂区块链是啥,直接开摆)

此外,还有区块链+征信、区块链+身份认证等。这些主题的研究目前都刚刚起步,每个展开说都不是几篇文章嫩解决的事情,未来有着巨大的发展空间。

扩展阅读

  • 阅读更多关于区块链是什么的内容:《Blockchain for dummies》《区块链:从数字货币到信用社会》
  • 阅读密码学的内容:《Understanding Cryptograpuy: A Textbook for Students and Practitioners》《Cryptography and Network Security Principles and Practice》
  • 阅读如何实现区块链:《Bitcoin Developer Guide》
  • 阅读区块链的具体应用:推荐寻找最新的论文阅读

Comments

Share This Post