有人说区块链是一场伟大的实验,有人说区块链是一场革命,有人说区块链是一个世纪骗局,还有人说区块链是百年难得一遇的良机,人人参与是社会发展的必然趋势**[1]。而且,区块链的发明者中本聪是何许人也?仍然未知,无疑为其蒙上了一层神秘面纱。
这里需要指出的是不要将区块链与比特币混淆,区块链是以比特币为代表的加密货币的底层支撑技术;比特币是区块链的一个应用。巴菲特表示:“这是一个赌博的东西……有很多欺诈与之有关。比特币没有产生任何价值[2]。” 换言之,与其说比特币用来投资,倒不如说是用来投机。否定比特币并不意味着否定区块链,恰恰相反,我们应该好好领悟区块链的技术原理。国家支持区块链的技术的发展:在2019年10月24日中央政治局第十八次集体学习中,习总书记指出:区块链技术应用已延伸到数字金融、物联网、智能制造、供应链管理、数字资产交易等多个领域,要加快推动区块链技术和产业创新发展,积极推进区块链和经济社会融合发展[3]。 2020年4月20日国家发改委也正式将区块链技术纳入新基建范畴[3]**。
表明立场,谈技术。技术主要是来自于《比特币白皮书》,我跳。
01 介绍
区块链技术依靠共识机制和分布式账本,不需要第三方信用机构就可以避免双重支付问题;同时,通过“工作量证明”(POW,proof of work)及“权益证明”(proof of stake),区块链使得所有参与者可以在某些方面达成一致,无需信任单个节点,从而解决拜占庭将军问题。
比特币网络的全节点时时刻刻都在进行数学运算(挖矿、工作量证明),每个节点贡献自己的算力来竞争解决一个动态可调整的数学问题(进行 SHA256 运算的结果小于某个值),成功解决该数学问题的节点将获得一定数量的比特币以及该区块的记账权,并且该节点将当前时间段的所有交易打包计入一个新的区块,获得基于自愿原则的交易手续费,所有的交易都会经过算法处理(SHA256),并且经过验证,产生一定格式的区块并将该区块链接到主链上。整个比特币网络周而复始,比特币网络顺利运行。
中本聪在其比特币白皮书中非常详细地介绍了区块链系统的建立过程:
第1步 新的交易向全网所有节点广播;
第2步 每个节点把收到的交易都写入到一个区块中;
第3步 每个节点都在新的区块上进行计算,寻找一个工作量证明解;
第4步 某个节点找到工作量证明解时,就把其所在区块向全网进行广播;
第5步 其他节点收到广播的这个区块后对其进行验证,只有所有交易都被 验证是有效的且未被使用的之后,该区块才能被认可;
第6步 每个节点通过将此区块的哈希值作为父哈希值来进行下一个区块的 计算,表示节点认可了此区块有效。
由于每个区块都带有前一区块的特征,想要篡改一个区块的交易记录,必须要重新计算该块之后的所有区块,需要修改时间越久的区块,所花费的算力越大。一般来说,一个区块后面有 6 个区块,这个区块就无法被修改了,也就是认为这个区块可信。[6]
02 自问自答
-
问:比特币就是区块链吗?
-
答:虽然前面有提及,但仍需再重复一遍。以比特币为代表的加密货币的底层支撑技术被称为区块链技术,比特币是区块链的一个应用。
-
问:为什么要设计工作量证明呢?
-
答:这个问题从两个方面回答:
- 为了控制比特币生成的速度。中本聪的设计是比特币最多被细分到小数点后8位,之后将再也无法被细分。且第一个区块会有50个比特币奖励,每过21万个区块,比特币的产量减半。中本聪通过调节工作量证明的难度,使每一个新区块生成大概需要10分钟。所以比特币每四年产出速度减半一次,直到2140年,每一个区块的比特币将不能再被细分,这时比特币就开采完毕了,等比数列求和可得总量约为2100万个。
- 如果不设计工作量证明,将无法抵御黑客的攻击。例如,你在饿了么上支付了18元你的外卖费用。你作为黑客,如果想要修改这一笔交易,就必须重新玩一次这个区块上的新的跳一跳到1000分,且这笔交易所在的区块,之后的所有区块,你都必须完成游戏并修改直到你的链子是全网络最长的一条时,你才修改成功了。当然,中本聪实际设计的“游戏”要比跳一跳难的多,他会消耗全网巨大的CPU算力,只要黑客手上的算力无法达到全网算力的51%,要改变任意一笔交易将会变得很难,且难度系数会随着时间成指数增长。
03 常见攻击
0x01 doublespend
翻译为双重支付,或直译为“双花”。所表达的意思也很简单,一笔数字资产既支付给了A,又支付给了B。结合51%的攻击力一起食用。
0x02 Selfish mining
目前还没有找到中文解释,先直译为“私自挖矿攻击”。正常挖矿过程中,矿工挖到矿了都会立刻广播结果,生怕别人跟我来抢这个区块。但是在Selfish mining中则不然。假设目前所有矿工都工作在区块0上。这时攻击者首先发信新的区块(区块1),他会保留刚挖到的区块,把该区块当做自己的私有链,在私有连上进行挖下一个区块。假如攻击者又挖到了第二个区块(区块2),而这时其他矿工挖到了新区块(区块1’,因为没有听到区块1,还工作在区块0上),攻击者会直接提交两个区块。因为这时候0-1-2这条链长于0-1’这条链,0-1-2会被选做主链。因此,攻击者能获得2个区块的奖励,而别人的算力浪费了,无法获得奖励。[3]
0x03 DoS & DDoS
计算中的分布式拒绝服务(DDOS)攻击是一种攻击,其中犯罪者试图通过向网络充斥大量多余请求以试图使系统过载,使其用户无法使用网络资源。这是一种攻击不仅是区块链,而且任何在线服务都会受到影响。 [5]
0x04 Sybil 女巫攻击
Sybil 攻击是通过创建多个虚假身份来尝试操纵 P2P 网络。 对于观察者来说,这些不同的身份看起来像个人用户,但在幕后,单个实体一次控制所有这些假实体。特别是当您考虑在线投票时,这种类型的攻击非常重要。 我们看到 Sybil 攻击的另一个领域是社交网络,过多假账户可以引导公众的讨论。
Sybil 攻击的另一个可能用途是审查某些参与者。 许多 Sybil 节点可以围绕您的节点,并阻止它连接到网络上的其他诚实节点。这样可以防止您向网络发送或接收信息。
缓解 Sybil 攻击的一种方法是引入或提高创建身份的成本。这个成本必须仔细平衡。它必须足够低,以便不限制新参与者加入网络并创建合法身份。它同时也必须足够高,以至于在短时间内创建大量身份变得非常困难。在 PoW 区块链中,实际对交易打包的节点是挖矿节点。有一个现实世界的成本,即购买矿机的成本,与创建虚假的“采矿标识”相关联。另外,拥有大量挖掘节点仍然不足以对网络产生巨大影响。要产生大影响,你还需要大量的算力。换句话说,您需要大型计算机集群。相关的成本使 Sybil 难以对工作证明区块链发起攻击。[5]
0x05 51%的攻击力
对公共 PoW 区块链的最著名的攻击类型是 51%的攻击。51%攻击的目标是执行双重花费,这意味着将硬币同时花出去两次。要对区块链网络执行 51%的攻击,您需要控制网络的大部分哈希率或计算能力,正如名字一样,需要控制 51% 的算力才能发起攻击。
想要执行双花攻击的恶意矿工,他首先创建一个常规交易,再将其硬币存到交易所,再换成好币或其它货币。这发生在下面的40 区块中。与此同时,他们将开始私下挖出一条私链。这意味着他们将遵循通常的挖掘协议,但有两个例外。
首先,他们不会将自己的交易打包在自己的私人开采的链中。其次,他们不会将他们找到的块广播到网络,因此我们将其称为私有链。
如果他们控制大部分算力,他们的链条平均出块速度将比诚实链条快。PoW 区块链中的最长链规则,也称为中本聪共识,用于在这种情况下发生的情况。具有更多区块的分支链,被认为是有效链。
一旦攻击者收到用他们的硬币购买的货币或其他货币,他们就会将私链广播到整个网络。所有诚实的矿工将放弃诚实的链条,并开始挖掘恶意链。攻击者的交易视为从未发生过,因为攻击者未将其包含在恶意链中。攻击者仍在控制他们的资金,现在可以再次使用它们。
04 名词解释
0x01 Inter-block time
This is the time elapsed between the generation of each block. For bitcoin the blocks are generated every 10 minutes, for litecoin it’s 2.5 minutes. Any value can be used but an appropriate value is usually between a few minutes; if the generation time is too fast it might destabilize the blockchain, if it’s too slow it may not attract many users[4].
0x02 proof of work(PoW)
工作证明(Proof Of Work,POW),也称为工作量的证明。这里的工作是指找到一个合理的区块哈希值,它需要不断地进行大量的计算,计算时间取决于当前目标的难度和机器的运算速度。当一个节点找到这个值之后,就说明该节点确实经过了大量的计算,这就是工作量证明。由于验证只需对结果值进行一次哈希运算,因此POW的验证效率很高。
0x03 Hash
哈希(也称为散列)算法将任意长度的输入值映射为较短的固定长度的二进制值。例如,SHA256算法就是将任意长度的输入映射为长度为256位的固定长度输出,这个二进制值称为哈希值(也称为散列值)。数据的哈希值可以检验数据的完整性,一般用于快速查找和加密算法。哈希算法广泛应用于区块链中,区块链通常不保存原始数据,而是保存该数据的哈希值。
0x04 Merkle 树
Merkle树是由Ralph Merkle发明的一种基于数据哈希构建的树。区块链系统采用二叉树型的 Merkle树对该区块的所有交易进行归纳表示,同时生成该交易集合的数字签名。
0x05 时间戳服务
区块链系统通过给每一笔交易盖上正确的时间戳,以此证明在这个时刻这笔交易确实发生,交易中资金的所属权已经转移,之前资金所有者再次使用这笔资金时就会报错,从而解决重复支付问题。另外,每一个区块也会盖上正确的时间戳,从而形成一个按时间顺序发展的正确链表。
0x06 拜占庭将军问题(Byzantine failures)
拜占庭将军问题,是由莱斯利·兰伯特提出的点对点通信中的基本问题。含义是在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。
拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。[7]
05 发展现状
0x01 信息共享领域
区块链与其他行业融合的应用,其中最直接的一个领域就是信息领域。首先,区块链本身就是需要保持各个节点的数据一致性的,可以说是自带信息共享功能;其次,实时的问题通过区块链的P2P技术可以实现;最后,利用区块链的不可篡改和共识机制,可构建其一条安全可靠的信息共享通道。[1]
0x02 版权保护
区块链 + 鉴证证明
流程简化:区块链应用到鉴证证明后,无论是登记还是查询都非常方便,无需再奔走于各个部门之间。
安全可靠:区块链的去中心化存储,保证没有一家机构可以任意篡改数据。
应用案例:2017年12月,微众银行 仲裁委(广州仲裁委) 杭州亦笔科技有限公司共同推出的仲裁联盟链,用于司法场景下的存证;2018年3月,广州首个 仲裁链 判决书出炉。[1]
0x03 物流链
区块链没有中心化节点,各节点是平等的,掌握单个节点无法实现修改数据;需要掌控足够多的节点,才可能伪造数据,大大提高伪造数据的成本。
区块链天生的开放、透明,使得任何人都可以公开查询,伪造数据被发现的概率大增。
区块链的数据不可篡改性,也保证了已销售出去的产品信息已永久记录,无法通过简单复制防伪信息蒙混过关,实现二次销售。
物流链的所有节点接入区块链后,商品从生产商到消费者手里都有迹可循,形成完整链条;商品缺失的环节越多,将暴露出其是伪劣产品概率更大。
应用案例:目前,入局物流链的玩家较多,包括腾讯 阿里 京东 沃尔玛等。[1]
06 参考
[4] Mastering Blockchain - Second Edition by Imran Bashir
[5] 科普:区块链里常见的攻击
[6] 区块链技术概述
[7] 百度百科:拜占庭将军问题
- 回形针视频介绍:区块链到底是什么?
- 比特币和区块链啥原理?矿机挖矿咋回事?李永乐老师讲比特币(1)
- 比特币交易如何防伪?私钥公钥地址啥意思?李永乐老师讲比特币(2)
- 拜占庭将军问题是什么?区块链如何解决防范恶意节点?
- 【官方双语】想知道比特币(和其他加密货币)的原理吗?
- 区块链入门教程
- 比特币挖矿攻击中的PAW和BSM
- 比特币中的挖矿攻击
- 区块链数字货币的9种共识机制比较
- 从POW到POS看区块链共识的发展