比特币的双花攻击问题解决

2020-01-18 14:33:05 +08:00
 blueberryman

双花攻击肯定是比特币很大的一个问题。utxo 中怎么证明这笔钱属于我,就是通过输入脚本和前一个的输出脚本匹配,如果返回 true 就能说明这笔钱属于我。不管是 p2pk 还是 p2pkh 都没有标记这笔交易是否已经被花过了,那怎么解决的双花呢?

901 次点击
所在节点    Bitcoin
29 条回复
acess
2020-01-27 16:01:44 +08:00
@memorybox
这个问题本来就不影响现在的系统。这是一个早就已经被绕开的老坑。我也没有说这个问题会影响现有的系统,应该是我的表述让你产生了误解。

“把本来没花掉的币修剪掉”,这个不一定是无害啊,如果一个挖矿出块的全节点为了偷懒跳过了完整历史区块,只下载了这种恶意“断章取义”的修建版历史区块,那别人眼中完全正常的交易,在他眼里就变成“花掉不存在的币”的非法交易了,网络中就要产生不一致了。

至于“已经花掉的币”,它的交易本来就在 Merkle 树里啊。
acess
2020-01-27 16:21:22 +08:00
@memorybox 我 4 楼的意思其实是说,虽然现在的系统绕开了这个坑,但绕开这个坑也是付出了代价的:全节点只能从创世区块开始,完整下载一遍奔着 300GB 去的区块链账本。
然后,在 6 楼,我就从这个点展开说了一下比特币社区的分歧:大区块党认为,只要把“最终余额”的 hash 也写到区块里,就可以让新节点跳过历史,直接从最近的状态开始;小区块党就不这么认为,他们认为这个“最终余额的 hash”是不能像完整区块链那样自证清白的,这样做就是让矿工掌控了整个系统。
memorybox
2020-01-27 16:30:18 +08:00
明白了,是我的理解有偏差;感谢解释。
acess
2020-01-27 19:16:08 +08:00
@memorybox
BCH 分裂为 SV 和 ABC 那件事,我不太了解细节,不过我印象里,那不算是真正的算力战,双方仅仅是在投入更多算力来防守而已;只是很多观众眼中,根据“最长链规则”,是“谁长谁正宗”,所以看上去就像是一场恶战了。

PS:最长链规则,准确地讲应该是“积累挖矿工作量最大规则”而不是最长链规则,否则的话,任何人都可以利用早期的挖矿低难度来轻轻松松爆出超长的攻击链;只不过比特币是每 2015 个区块才调整一次难度,在同一个难度调整周期内,确实是“最长链规则”。

为什么我要这么说呢?因为我前面就说了,不管一个攻击者有多少算力、他的链有多长(积累了多少挖矿工作量),如果这条链违反了现有的规则,那全节点会直接把它拒收(忽视)掉。
所以,如果你要攻击对方,你的攻击链必须得符合对方的规则,这样对方才会被迫吃下你的炮弹,然后这颗炮弹才会爆炸、起到破坏作用——比如,通过双重支付来变相实现偷币,或者是通过拒绝打包任何正常交易来让这个币暂时停摆。

至于“一条链上不断积累的算力可以为这条链的权威性背书”,或者说“掌控算力足够大的一方随时都可以用 51%攻击掐死敌对的另一方”,这都是后话了。要说“权威性”,这是韭菜的主观判断;要说“随时都可以 51%攻击”,那又回到刚刚的结论了——如果你要攻击对方,你的攻击链必须得符合对方的规则。
acess
2020-01-27 19:21:49 +08:00
@memorybox 有些大区块党貌似很抗拒“全节点拒收非法链”这个概念,不过,我也没说这里的“全节点”非得是用户手里的那种一点点算力都没有的全节点啊,至少矿池还是要跑全节点的对吧,那矿池也要面对一样的问题。
acess
2020-01-27 19:36:40 +08:00
@memorybox 我前面说了白皮书里的“硬盘空间回收”不可行,但我没说 SPV 不可行,我只是说 SPV 会盲目跟随多数算力。
实际上,有一个讽刺的事实,就是虽然“盲目跟随多数算力”看上去对安全性 /稳定性存在威胁,但是,如果 SPV 客户端能够联系得上多数算力、进而能够找到多数算力支持的链、并跟随这条链,这反倒还算是去中心化的体现——否则的话,SPV 可以说就是依赖了某种权威,这样很显然就不是去中心化了。
acess
2020-01-27 19:41:48 +08:00
@memorybox 即便不谈 SPV,只谈全节点(它具有独立完整验证区块链账本能力),在这方面也是有一定争议的。当年闹 2X 的时候,2X 那边的 btc1 全节点就改掉了“隶属于 Core 阵营”的几个默认种子节点,因为他们害怕这几个默认的种子节点在分叉发生后会起到类似于日蚀攻击的作用。
acess
2020-01-27 20:09:37 +08:00
@memorybox 还有,你在 11 楼说的第一种情况,说实话我没懂。在两个分叉的链一样长的情况下,也就是 n=0,这应该还是属于胶着状态啊,貌似还不能就此断定是谁赢了吧。
memorybox
2020-01-28 08:13:25 +08:00
这是我个人看法,我觉得 n=0 的时候就表示系统不可用了;当然,可能是偏见;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638949

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX