比特币节点攻击
『壹』 比特币出现漏洞,手把手带你发起攻击,万一暴富了呢
针对所有的支付系统,有一种攻击方式叫作 双花攻击 。所谓双花攻击就是指一笔资金被花费多次,攻击者先将资金转出,获得收益后通过攻击的手段撤销该笔转账,让资金重新回到攻击者的账户上。那么我们能否对比特币发起双花攻击并从中获利呢?答案是肯定的!下面让我带你一起对比特币系统发起攻击。
在带领大家发起攻击之前,我们需要先了解一下比特币的转账原理,这是我们发起攻击的预备知识。
在比特币系统中,用户想要发起一笔转账,首先要把转账信息组装好,就像填写银行支票一样,写好付款方账户,收款方账户,转账金额,然后使用加密技术对转账信息签名,我们把这种签名好的转账请求叫作交易。交易被比特币系统处理以后,付款方的账户就会被扣除指定金额,收款方的账户就会增加指定金额。
用户的交易会被发送给比特币系统中的节点,节点收到交易后将其放在一个新的区块中,然后对这个区块进行哈希计算,也就是之前文章所说的计算数学题。哪一个节点优先计算出了这个区块的数学题答案,就获得了这个区块的打包权,被这个节点打包进区块的交易就相当于成交了,然后所有的节点会在新区块的基础上开始计算下一个区块的数学题。
知道了比特币的转账原理,下面我们就来看一下比特币的漏洞到底在哪里!
刚才我们说谁先算出答案谁负责打包区块,那如果有两个节点同时做出了同一个区块的答案该怎么办呢?为了解决这个问题,比特币系统设计了一个特殊的机制,叫作最长链原则。
通过上面的描述我们可以看出,比特币的这条链是有可能分叉的,分叉以后会以最长的链为准,那么在较短的分叉上的区块就被废弃了。 这不正为我们攻击比特币系统带来了可能性吗!
你可能已经想到了,既然比特币系统只认最长的那条链,我们是不是可以通过这样的方式对比特币进行双花攻击:
至此,你之前转出的比特币还在你的账户上,并且得到了你想要的东西,所以你的攻击成功了。
对比特币的攻击真的这么简单吗?答案当然是否定的!虽然我们说可以通过上述方法对比特币发起攻击,但是攻击是要付出代价的。
所以,如果你想要创建一个新的分叉,并且超过主链的区块长度,那么你需要比主链上所有节点的计算速度加在一起都要快。要想实现这样的结果,唯一的做法就是你要收买比特币系统中超过51%的节点算力,这就是比特币的51%攻击原理。
想要攻击比特币系统并不是不可能,但是需要付出的代价可能远远超过作恶所获得的收益。在比特币系统中,节点越多,算力越强,攻击比特币系统的成本就越高,比特币系统就越安全。比特币越安全,它的价值就越高,就会吸引更多的节点加入来竞争比特币奖励。更多的节点进一步促进了系统的安全性,这是一个正向循环。
51%攻击不只是针对比特币的,所有采用 工作量证明共识算法 的区块链都面临着这个问题。对于已经日趋成熟的比特币系统来说,攻击比特币确实是不划算的,而且随着系统节点的越来越多,攻击比特币几乎成为了不可能的事情。但是一些新的链,在其刚起步的时候节点和算力还不多,这种攻击确实是真实有效的,并且这种攻击事件时有发生。
『贰』 比特币如何防止篡改
比特币网络主要会通过以下两种技术保证用户签发的交易和历史上发生的交易不会被攻击者篡改:
非对称加密可以保证攻击者无法伪造账户所有者的签名;
共识算法可以保证网络中的历史交易不会被攻击者替换;
- 非对称加密算法3是目前广泛应用的加密技术,TLS 证书和电子签名等场景都使用了非对称的加密算法保证安全。非对称加密算法同时包含一个公钥(Public Key)和一个私钥(Secret Key),使用私钥加密的数据只能用公钥解密,而使用公钥解密的数据也只能用私钥解密。
- 1使用如下所示的代码可以计算在无限长的时间中,攻击者持有 51% 算力时,改写历史 0 ~ 9 个区块的概率9:
- #include
- #include
- double attackerSuccessProbability(double q, int z) {
- double p = 1.0 - q;
- double lambda = z * (q / p);
- double sum = 1.0;
- int i, k;
- for (k = 0; k <= z; k++) {
- double poisson = exp(-lambda);
- for (i = 1; i <= k; i++)
- poisson *= lambda / i;
- sum -= poisson * (1 - pow(q / p, z - k));
- }
- return sum;
- }
- int main() {
- for (int i = 0; i < 10; i++) {
- printf("z=%d, p=%f\n", i, attackerSuccessProbability(0.51, i));
- }
- return 0;
- }
- 通过上述的计算我们会发现,在无限长的时间中,占有全网算力的节点能够发起 51% 攻击修改历史的概率是 100%;但是在有限长的时间中,因为比特币中的算力是相对动态的,比特币网络的节点也在避免出现单节点占有 51% 以上算力的情况,所以想要篡改比特币的历史还是比较困难的,不过在一些小众的、算力没有保证的一些区块链网络中,51% 攻击还是极其常见的10。
- 防范 51% 攻击方法也很简单,在多数的区块链网络中,刚刚加入区块链网络中的交易都是未确认的,只要这些区块后面追加了数量足够的区块,区块中的交易才会被确认。比特币中的交易确认数就是 6 个,而比特币平均 10 分钟生成一个块,所以一次交易的确认时间大概为 60 分钟,这也是为了保证安全性不得不做出的牺牲。不过,这种增加确认数的做法也不能保证 100% 的安全,我们也只能在不影响用户体验的情况下,尽可能增加攻击者的成本。
- 研究比特币这样的区块链技术还是非常有趣的,作为一个分布式的数据库,它也会遇到分布式系统经常会遇到的问题,例如节点不可靠等问题;同时作为一个金融系统和账本,它也会面对更加复杂的交易确认和验证场景。比特币网络的设计非常有趣,它是技术和金融两个交叉领域结合后的产物,非常值得我们花时间研究背后的原理。
- 比特币并不能 100% 防止交易和数据的篡改,文中提到的两种技术都只能从一定概率上保证安全,而降低攻击者成功的可能性也是安全领域需要面对的永恒问题。我们可以换一个更严谨的方式阐述今天的问题 — 比特币使用了哪些技术来增加攻击者的成本、降低交易被篡改的概率:
比特币使用了非对称加密算法,保证攻击者在有限时间内无法伪造账户所有者的签名;
比特币使用了工作量证明的共识算法并引入了记账的激励,保证网络中的历史交易不会被攻击者快速替换;
- 通过上述的两种方式,比特币才能保证历史的交易不会被篡改和所有账户中资金的安全。
非对称加密
图 4 - 51% 攻击
总结
『叁』 详解比特币的“51%攻击”
刚接触比特币的时候,都听过“51%攻击”这个概念。简单来说,就是如果某个节点拥有超过全网51%的算力,将能够实现双重支付、撤销交易等操作,让比特币网络崩溃。
那么,这个51%攻击是什么实现的?
假设一个场景,A用10比特币向B购买一样商品,步骤如下:
(1)A支付给B 10BTC;
(2)B收到10BTC确认收款后发货(一般认为6次确认后交易就不可逆转);
(3)A随即创建另一笔交易,将同样的10BTC支付给自己。
显然,A想要撤销第一笔交易,不用花钱就得到B的商品。为了达到这个目的,A进行了双重支付,将同样的10BTC支付给B和自己。在正常的比特币网络中,一旦第一笔交易经过6次确认后就几乎不可更改,后续的交易数据将继续打包成新的区块依次链接下去。可是,如果A用户拥有51%的算力,情况将会发生有趣的变化,A可以实现双重支付的目的。
具体过程如下:
假设第一笔交易被打包到100号区块,当后面再增加5个区块后,6次即可确认该交易,区块如下图所示:
这时,A又发起了一次给自己10BTC的交易。如果A向全网广播,这笔交易不会被处理(因为找不到要花费的UTXO,10BTC支付给B的事实已经被全网确认了),所以A选择不广播,而是对主链进行“分叉”,生成另外一个100号区块,并在其中打包第二笔交易,如下图:
由此,产生了两条子链。简单描述起见,第一笔交易所在的叫C1,第二笔交易所在的叫C2。其他矿工继续在C1上打包数据,而A则在C2上挖矿,两条链开始赛跑。由于A具有超51%的算力资源,很快,C2的长度就会超过C1,如下图:
这时,按照比特币的最长链优先原则,其他矿工也会自动转到C2上,使C2变成了主链。C1则会被抛弃,之前打包在C1上的所有交易(包括第一笔A支付给B 10BTC的交易),都会变为无效。结果是A不花一分钱就拥有了属于B的商品,这就是“51%攻击”。
当然,要真正实现51%攻击是非常困难的,在比特币网络中几乎是不可能的,因为这需要消耗巨大的成本,跟攻击成功后获取到的收益相比,完全是得不偿失。
51%攻击能带来的收益是非常有限的,只能做到:
1、修改自己的交易记录,如双重支付;
2、阻止确认部分或全部交易。
而下面这些即使是51%攻击也没法做到的:
1、凭空生成比特币;
2、修改每个区块产生的比特币数量。
因此,51%攻击成本巨大,收益却很小,仅能实现“双重支付”而已,所以51%攻击很多时候又被称为“双花攻击”。“双花”是数字货币要解决的第一个核心问题,比特币通过共享账本和工作量证明共识机制比较完美地解决了这个问题。
『肆』 什么是51%算力攻击
关注比特币的朋友,想必听过51%算力攻击这个词,它到底是什么意思呢,发起这种攻击之后能做哪些“坏事”呢?
01
什么是51%算力攻击?
在比特币网络中,采用PoW共识机制来解决如何获得记账权的问题,采用“最长链共识”解决如何记账的问题。
所谓51%的攻击,就是利用比特币网络采用PoW竞争记账权和“最长链共识”的特点,使用算力优势生成一条更长的链“回滚”已经发生的“交易行为”。
51%是指算力占全网算力的51%,比特币网络需要通过哈希碰撞来匹配随机数从而获得记账权,算力衡量的是一台计算机每秒钟能进行哈希碰撞的次数。
算力越高,意味着每秒钟能进行越多次的哈希碰撞,即获得记账权的几率越高。
在理论上,如果掌握了50%以上的算力,就拥有了获得记账权的绝对优势,可以更快地生成区块,也拥有了篡改区块链数据的权利。
02
这种攻击能做哪些坏事?
在了解了51%算力攻击之后,你肯定好奇,这种攻击能做哪些坏事。
实际上,当恶意攻击者持有比特币全网占比比较高的算力时,即使尚未达到51%的比例,也可以制造相应的攻击,比较典型的就是双花问题。
假设A拥有51%的算力,在区块高度1127时,A转给B一个比特币的记录被矿工打包。
待交易确认后,A依靠51%的算力优势在区块高度1126后重新生成了一条“更长的链”,并在区块高度1127处又将该BTC转给C且该交易记录被打包,即该链包含了A将一个比特币转给C的记录。
根据“最长链共识”,包含给C转账记录的链成为主链,则A转给B的一个比特币则为“无效支付“。
若掌握了51%的算力,除了可以修改自己的交易记录外,还可以阻止区块确认部分交易,以及阻止部分矿工获得有效的记账权。
但是,拥有51%的算力也不是万能的,无法修改其他人的交易记录,也不能阻止交易的发出,更不能凭空产生BTC。
03
实例分析
我们可以用一笔虚拟交易来说明51%算力攻击问题:
1.攻击者拥有私钥privKey0001,私钥拥有对应可花费比特币10000个
2.当前区块的高度是88888
3.攻击者与商户交易了10000个比特币,在商户看到88889区块中包含了此次交易后,坐上飞机驾驶员位置,开走了商户一架飞机。
4.攻击者因为拥有较高算例,从88888区块再次计算区块(此时,排除自己的10000个比特币买飞机的交易),迅速的计算出了88889/88890/88891/88892......区块,其它节点拉取最长链节点的区块,同步了攻击者的含有恶意攻击的区块信息。
5.因为攻击者买飞机的交易没有被区块包含,因此,可以再次到商户那里买上一架飞机开走。
上面这个例子就是典型的51%算力攻击成功后,所产生的双花问题。
04
51%算力攻击真的有人做吗?
理论上来说,要执行51%算力攻击,首先需要拥有比网络其他矿工更强的算力。
这意味着要有非常多的挖矿设备,大量挖矿设备本身就会消耗大量的资金。
而且除了设备,还需要大量的电力能源消耗。
由于电价上涨以及能源需求的增加,在过去几年里获得足够的电力来运营矿场变得愈发地困难。
当比特币网络还很小的时候,或许有可能获得足够的电力来运行提供51%算力的设备,但随着时间的推移,比特币网络消耗的电力持续增长,攻击者需要获得大量电力才能成功执行攻击,这种可能性也就越来越小。
发动算力攻击也是为了有利可图,但从经济角度来看,51%算力攻击的成本太高,利润太少,无法产生大量资金,并且会有受到重大损失的风险。
由于所涉及的成本和风险,进行51%攻击确实没有任何意义,而诚实挖矿则有利可图的多。
05
在攻击面前的风险规避
虽然51%算力攻击可以撤销交易,但不可以在没有私钥的情况下,控制私钥对应的比特币地址,因此不能无(私钥)中生有交易。
所以对于51%算力攻击,交易支付者不仅不需要过度担心,而且在别人进行51%算力攻击时,你也有可能做一次双花商家。
但是交易接收者可就没有那么好的运气了,因此为了避免被别人51%算力攻击,可以多等几个区块生成后再进行交易。
但是反过来想一下,51%算力攻击是很不值得的一件事情。
攻击是为了利益,既然攻击者持有了这么高的算力,诚实的挖矿带来利益是不是更好?
而且攻击必然打击投资者对比特币系统信心,这对攻击者来说未必是一件好事。
『伍』 比特币遭遇51%以上的攻击会发生什么
QUBE交易所为您解答:当一个人控制了51%以上的算力,他就能够修改自己的交易记录以及组织部分或全部矿工开采到任何有效的区块。他可以修改比特币协议,并写出相应的代码,改变比特币的规则。但是这几乎是概率为0的事件,同时,当超过51%的算力被控制,控制者依旧不能做的事情是:他无法做到的是:修改其他人的交易记录;凭空产生比特币以及把别人的币转移到自己手中。因此掌控算力不等于黑客攻击,两者是不一样的,黑客攻击之后,是可以盗取比特币,修改钱包地址,对他人的财产造成威胁。希望对你有帮助。
『陆』 比特币历史上发生哪些被黑事件
2011年6月,赛门铁克公司发出警告,僵尸网络正在参与到比特币"挖矿"中。 这会占用受害者的计算机运算能力、消耗额外的电力并导致主机温度升高。当月晚些时候,澳大利亚广播公司发现一名雇员用公司的服务器进行挖矿。
一些恶意软件也大量利用显卡的并行计算能力。在2011年8月,比特币挖矿的僵尸网络被发现了, 被木马感染的Mac OS X也被发现进行比特币挖矿
2011年6月19日,Mt.Gox(Magic: The Gathering Online Exchange的缩写)比特币交易中心的安全漏洞导致1比特币价格一度跌至1美分(虽然其它交易没有受到影响)。原因是一个黑客从感染木马的电脑上盗用了该用户MtGox的证书,从而把比特币转到自己的帐号上并抛售,产生了大量该价格的“ask”请求。几分钟后MtGox 关闭并取消了黑客事件中的不正常交易,使比特币价格反弹回到了15美元。 最终比特币汇率回到了崩溃前的情况。相当于超过8,750,000美元的帐户受到影响。
2011年7月,世界第三大比特币交易中心Bitomat的运营商宣布:记录着17,000比特币(约合22万美元)的wallet.dat文件的访问权限丢失。同时宣布决定出售服务以弥补用户损失。
2011年8月,作为常用比特币交易的处理中心之一的MyBitcoin宣布遭到黑客攻击,并导致关机。涉及客户存款的49%,超过78000比特币(当时约相当于80万美元)下落不明。
2012年8月上旬,Bitcoinica在旧金山法院被起诉要求赔偿约46万美元。2012年,Bitcoinica两度遭到黑客攻击,被指控忽略客户资金的安全性以及伪造提款申请。
2012年8月下旬,Bitcoin Savings and Trust被所有者关闭,并留下据称约560万美元的债务。同时导致其被指控操作庞氏骗局。2012年9月,美国证券交易委员会开始调查这一案件。
2012年9月,Bitfloor交易中心也被黑客入侵,24,000比特币(约相当于25万美元)被盗。Bitfloor因此暂停运营。同月,Bitfloor恢复运营,它的创始人说,他已经就盗窃事件上报FBI,而且他正计划赔偿受害者,但赔偿的时间表尚不清楚。
2011年6月,有黑客将25000比特币转进自己户头,其相当于50万美金。整个交易无法被追踪,虽然比特币的拥有者在网上公布了这起失窃,但却没用,这个黑客也成了比特币的第一个偷窃者。
2012年,由于网站托管供应商Linode的服务器超级管理密码泄露,价值228,845美元的46703比特币失窃。超过4.3万的失窃比特币属于一家比特币交易平台Bitcoinica,另外3094比特币为捷克程序员Marek Palatinus所有,比特币首席程序员GavinAndersen也失去了他的5比特币。
『柒』 比特币现金被黑客攻击过吗
比特币作为一种p2p形式的货币,它依据特定的算法,根据大量的计算产生。黑客对比特币的攻击自2009年来就没有停止过。黑客攻击比特币一般是攻击比特币交易平台,然后盗取大量的比特币,造成巨大损失。所以一般的平台在网站防护上都要下很大功夫,就像之前国内的火币网就使用了抗D保来保证网站的安全。一旦被攻击,损失难以想象。
『捌』 比特币在过去被黑客攻击过吗
比特币使用的协议和密码学规则在问世多年后仍行之有效,这是个好的现象,说明这个概念的设计非常好。但是,在各种软件的执行过程中,也发现了安全漏洞并予以修正。和其它形式的软件一样,比特币软件的安全性取决于发现并修正问题的速度。类似的问题发现越多,比特币就越趋于成熟。
对于在不同的交易平台和业务中发生的窃取和安全漏洞,经常会存在误解。虽然这些是不幸的事件,但是它们并不代表比特币被黑客攻击,也不代表比特币内部存在缺陷,正如银行抢劫并不会危害到货币本身一样。但是准确地说确实需要一整套良好的策略和直观的安全性解决方案来使用户更好地保护他们的资金,降低盗取和遗失的一般风险。在过去几年中,这样的安全功能快速发展,例如钱包加密,离线钱包和多重签名交易。
门头沟、邮票等比特币均被黑客攻击过,只要是知名一点的比特币公司基本上都被黑客攻击过,
『玖』 自学区块链(六)BTC-挖矿难度
我们来看下挖矿的计算公式
H(block header) target,这个target就是 目标阈值
BTC用的哈希算法是SHA-256,它产生的哈希值是256位,那么就有2^256种取值,这个就是他的输出空间,要增大挖矿难度, 就调节目标值在这个输出空间所占的比例 。
挖矿难度和目标阈值是成反比的, 当算力强时,调节难度,使目标阈值变小 。
不调节难度,随着矿工数量增多,随着算力的上升,那么挖到区块的时间就会变短,从10分钟缩短到1分钟甚至几秒钟,这个会带来什么样的问题呢?可能很多人觉得这不是挺好吗,交易等六个确认就会缩短时间了,交易就会变快了。其实出块时间缩到很短,风险是很大的,因为网络延迟,出块时间变短,不同节点很可能接到不同的区块信息,导致会有很多分叉节点出现。矿工会根据自己认为正确的区块接着挖。这种情况下,恶意节点发动分叉攻击就比较容易成功,因为诚实节点的算力被分散了。
导致不需要51%的算力就能成功,所以缩短出块时间是不利于BTC系统的稳定的。虽然10分钟不一定是最优的时间,但是也算是比较合理的。
下面是 算力增长曲线
下面是 挖矿难度曲线
下面是 平均出矿时间
我们来看下难度公式:每2016个区块调整一次挖矿难度,10分钟出一个平均算下来是两星期调整一次。
previous_difficulty是上一次的挖矿难度,分母是最近2016个区块花费的时间
每个节点挖矿是独立的,BTC的协议也是开源的,会不会有矿工不修改挖矿难度呢?可能性是存在的,但是不影响结果,因为广播给其他节点需要独立验证block header的哈希值, 这个header里面有难度的一个压缩编码,修改难度产生的结果是不会被诚实的节点认可的。
『拾』 什么是比特币延展性攻击
交易的延展性,也被称作为是可锻性,啥叫可锻,也即同样一个东西(如一坨金属),它的本质和质量都没有改变,但是它的形状改变了。而这个可锻性,会造成交易ID——TXID的不一致,从而导致用户找不到发送的交易。
现在比特币的交易数据格式中,将交易签名部分也纳入了整体交易中,最后对整体交易做哈希,而交易签名又可以有多种写法,攻击者篡改了它们,它们作用上是一样的,但是字节发生了变化,导致这个签名不一样了,前段时间甚至有一个矿池挖出了一个包含所有交易都是延展攻击了的,给一些应用带来了麻烦。
TXID发生变化可能会导致一些应用在查找TXID时找不到,从而影响一些钱包充值或提现的状态,给运营者和用户带来麻烦,隔离见证是为了解决这个问题而提出的,将交易数据和签名数据分开,这样一笔交易的TXID一定唯一。