比特币防篡改技术详解

区块链技术在当下的火爆程度不必多说,比特币作为中本聪大神的“亲儿子”,自然是研究区块链技术绕不开的话题。比特币是一个完全开放的去中心化的金融系统,时刻暴露在全球黑客攻击之下仍能安全稳定的运行至今(除了在2010年遭到一次大整数溢出漏洞攻击),用事实证明了比特币系统的安全性和稳定性。这其中一整套完整的防篡改破坏的安全体系是其最大的安全报障,下面我们就来逐步揭开比特币防篡改特性的面纱,体会一下比特币设计的奥妙。

  1. 非对称加密算法

首先我们先复习一下非对称加密的概念:非对称加密都有一对密钥,分为公钥和私钥,两者是一对一的关系。公钥顾名思义是可以公开的密钥,私钥必须自身严格保存,一旦暴露就相当于银行卡密码被人知道一样的可怕后果。

公私钥有两种用法:

一种是公钥加密数据私钥解密数据:Tom要给Jerry发信息,Jerry先将自己的公钥发放给Tom,Tom通过Jerry的公钥将明文数据加密成密文,只有Jerry相匹配的私钥才能将密文解密成明文,即使有人截取了Jerry的公钥,也只能用于给Jerry发送加密数据,在没有获得Jerry私钥的情况下,依旧无法破解Tom和Jerry的通信密文。

图01

另外一种用法是私钥签名公钥验签:现在反过来Jerry要给Tom发信息,Jerry为了保证发送信息没人篡改过,于是Jerry就用私钥对明文数据生成了一个签名(一串字符),将签名和明文数据一起发送给Tom,Tom收到明文消息后,先用Jerry的公钥验证签名是否正确,如果中途有人篡改信息,验签将无法通过,Tom就知道消息被中途篡改过。当然,我们可以让Tom和Jerry相互交换各自的公钥,这样就可以对双方通信时都既加密又验签,保证双重的安全性。

图02

目前我们常用的非对称加密算法有RSA、ECC和国密SM2等算法。比特币采用的是ECC椭圆曲线加密算法,用户发起的每笔交易都需要自身的私钥做签名,每个参与记账的节点都可以验证交易是否正确并通过用户的公钥验签信息是否被篡改过。这就完成了比特币防篡改的第一步--单笔交易防篡改。那么为什么交易信息不加密呢?那是因为每一个参与记账的节点都需要验证交易的正确性和完整性,目前比特币参与记账的节点超过40万个,也就是需要用40万个公钥对交易加密40万次,这个计算量和耗时都是不能承受的,而且会影响记账节点的扩展性,所以目前比特币系统中的所有交易都是明文的,但是匿名性弥补了安全方面的不足。当然,这方面的不足也有解决方案,请参考“零知识证明”、“同态加密”等相关知识,在此不做细述。

另外,因为比特币交易的匿名性,私钥签名就成为了唯一的身份标识,如果私钥丢失,就无法证明比特币是你的,你的比特币也就再也不属于你了。

  1. Merkle树结构

上述比特币通过密钥签名完成了交易防篡改的第一道防线, 比特币交易信息的存储单位称为区块(Block),一个区块包含多笔交易(具体笔数和交易频次、交易数据大小有关),那么一个区块又是如何防篡改的呢?答案就是Merkle算法。

图03

如图所示,默克尔树包含一个根节点(Merkle Root)、多层次的中间节点和叶子节点。交易信息位于叶子节点,一个区块中的N笔交易被两两聚合进行Hash运算,运算结果作为默克尔树的中间节点,中间节点再次两两聚合进行Hash,最终生成唯一的根节点Merkle Root。默克尔树的特性在于,任意叶子节点发生改变,改变都会影响到上层的Hash运算结果,最终经过层层传递,根节点的Hash值也将发生改变,基于此特性,比特币系统牢牢的将区块内的所有交易聚合成为一个整体,任何的篡改行为都会影响到整个区块。

  1. 区块链的链式结构

图03所示,展示了默克尔树结构,但是区块头中不只有Merkle Root的值,其他的组成部分又是做什么用的呢?这就要来了解一下俗称“挖矿”的概念了。挖矿其实就是Hash运算,记账节点在生成区块的时候,首先要做的就是计算默克尔树根节点Hash值,当然挖矿远没有那么简单,比特币系统为了维持10分钟左右的成块节奏(考虑成块速度和p2p节点同步问题),会强制让记账节点增加计算难度,在Merkle Hash运算基础上,要求记账节点在根节点Hash值基础上增加一个随机数,最终得到一个符合特定要求的目标Hash值(如目标Hash值的前4位必须是0000,也就是难度系数)作为该区块的ID。这就需要记账节点不断的通过计算生成随机数去匹配目标Hash值的要求,谁的算力越高概率上越可能优先计算出目标Hash值。记账节点挖矿的过程就是争取最先找到符合难度系数的目标Hash值的过程,第一个计算出目标Hash的记账节点(挖到矿的矿工)并且获得其他记账节点验证通过后,会得到系统奖励的比特币,完成整个挖矿过程,这个过程耗费了大量算力,也是Pow算法被人诟病的主要原因。

区块链之所以称为链,是因为每一个区块都保存了前一区块的目标Hash值(创世块没有前一Hash值),某一个区块的某一笔交易发生篡改,因为默克尔树算法的作用这个区块的目标Hash值就会被改变,然后就会连锁反应,以这个区块为基础的,后续所有区块的Hash值都会发生变化,任一记账节点都可以轻易的发现账本被篡改(如下图04)。这样就保证了区块链上的所有区块都具备了防篡改功能。

    

图04

  1. 51%算力攻击

上述的多重防篡改机制已经让我们领略了比特币设计的严谨性,通过一环套一环的算法控制,账本很难被篡改。那是不是基于POW算法的比特币系统就毫无破绽呢?其实针对所有基于Pow算法的区块链系统,都有一个天生的弱点,那就是著名的51%算力攻击。如果有人控制了全网超过50%的算力(超过越多越容易掌控整个系统),他就能够比其他人更快地找到生成区块的目标Hash值,因此他实际上拥有了决定哪个一区块有效的权力,他就可以对自身的交易发起“双花”攻击(51%攻击、双花攻击概念太过复杂,还会牵扯到比特币UTXO的记账方式,足以单独成文,本文重点介绍防篡改机制,所以略过不表,网上有很多专门论述的文章),简单描述就是可以做交易不花钱。这已经不是技术问题了,而是一个博弈问题,因为攻击会造成比特币这种去中心代币彻底失去信用,没有信用背书的比特币将变得一文不值。当一个人花费巨大代价获取到超过50%的算力(通过购买矿机或者控制其他人的矿机),并且购置了大量的比特币时,就不会冒着毁灭比特币的风险去攻击整个比特币系统,这样做伤人伤己,没有任何好处,而且以比特币目前的算力体量而且仍然在不断增长,想控制超过半数的算力已经变得越来越困难。当然比特币的一些分叉系统或者一些较小的采用Pow算法的代币系统,整体算力比较小,实施攻击相对容易,可能就没有安全了。

有位币圈大佬曾经说过:“区块链底层是数学逻辑,中层是哲学思想,上层是神学信仰”。上述介绍的比特币防篡改机制已经将区块链技术成功从数学逻辑上升到充满博弈论的哲学思想,而杯具如我还在区块链技术底层苦苦挣扎。币圈一日链圈一年,技术之路长路漫漫,愿与同路人共勉。

原文地址:https://www.cnblogs.com/neomeister/p/9392149.html

时间: 2024-10-03 10:24:46

比特币防篡改技术详解的相关文章

安全和加密技术详解

安全和加密技术详解  目录         前言         一.加密技术分类           1.对称机密算法           2.非对称加密           3.单向散列           4.安全通信模型   前  言 随着网络通信和互联网时代的到来,与之而来的互联网安全问题面临很大的威胁.网络的传输的信息随时有可能会被不法分子截获.篡改,对于互联网数据安全和加密技术显得尤为重要. 加密技术其实是一门古老的学科.长期以来一直被应用于军事.情报等部门,例如早期古罗马的凯撒移

unity3d开发实战《啪啪三国》技术详解!

去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品<啪啪三国>为例,着重讲解了unity3D手机网游开发的经验,其中涉及了团队组成.人员要求.常见的unity3d开发遇到的坑及解决办法.在演讲中,王伟峰也贡献了<啪啪三国>开发过程中总结的各种经验,从优化.插件库.服务器架构.SDK等很多细节进行了讲解.值得一说的是,王伟峰现场演讲十分幽默,冷笑话段子不断爆出,让在场观众在连续的笑声中听完这个特别的技术演讲. <ignore_js_op> 以下是王伟峰现场演讲实录

[转帖]技术盛宴 | 关于PoE以太网供电技术详解

技术盛宴 | 关于PoE以太网供电技术详解 https://smb.pconline.com.cn/1208/12085824.html [PConline 干货铺]随着物联网技术飞速发展,需要提供网络服务的终端越来越丰富,使用传统强电的方式为多种多样的智能终端供电变得越来越困难,以太网供电(Power over Ethernet,简称PoE)技术的普及,正逐一解决各类智能终端的供电问题.目前PoE技术已经从传统的WLAN.网络监控.IP电话等应用场景延伸到新零售.IoT(Internet of

实现高性能纠删码引擎 | 纠删码技术详解(下)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎.柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统. 前言: 在上篇<如何选择纠删码编码引擎>中,我们简单了解了 Reed-Solomon Codes(RS 码)的编/解码过程,以及编码引擎的评判标准.但并没有就具体实现进行展开,本篇作为<纠删码技术详解>的下篇,我们将主要探讨工程实现的问题. 这里先简单提炼一下实现高性能纠删码引擎的要点:首先,根据编码理论将矩阵以及有限域的运算工程化,接下来主

Linux磁盘阵列技术详解(二)--raid 1创建

我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还是以一块硬盘的不同分区为例,实际工作中应该是不同的硬盘才对. 具体分区步骤不再赘述! 分区后结果如下图所示: ② 创建raid 1 mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sdc1 /dev/sdc2 /dev/sdc3 或者 mdadm -C -v /de

CDN技术详解及实现原理

CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同好. 第一章    引言    “第一公里”是指万维网流量向用户传送的第一个出口,是网站服务器接入互联网的链路所能提供的带宽.这个带宽决定了一个 网站能为用户提供的访问速度和并发访问量.如果业务繁忙,用户的访问数越多,拥塞越严重,网站会在最需要向用户提供服务时失去用户.(还有“中间一公里” 和

Protocol Buffer技术详解(语言规范)

Protocol Buffer技术详解(语言规范) 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流.需要说明的是,Blog的内容并非line by line的翻译,其中包含一些经验性总结,与此同时,对于一些不是非常常用的功能并未予以说明,有兴趣的开发者

红帽Linux故障定位技术详解与实例(2)

红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 3.内核故障情形及处理 (1)内核panic panic是内

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 红帽Linux故障定位技术详解与实例是本文要介绍的内容,主要