V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  acess  ›  全部回复第 43 页 / 共 110 页
回复总数  2188
1 ... 39  40  41  42  43  44  45  46  47  48 ... 110  
2020-01-27 15:00:25 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
@memorybox #11
Merkle 树的裁剪是把内容删掉,只留一个 hash。可以只摘掉一个叶子(也就是交易),也可以摘掉一个分支。这样当然不会影响 Merkle root。这是个 feature,不是 bug。
想想全节点发给 SPV 轻钱包的 Merkle proof,不就是把其他分支都摘掉了,只剩下直通这个叶子节点的一个分支么。
2020-01-27 12:04:53 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
@memorybox 科普算不上,只是心血来潮就打了很多字,把自己的理解尽量说出来,看看是不是有偏差。

维护代码,这个对我来说是个尴尬的问题,因为我并不算是开发者……


还有,我 4 楼提到 Merkle 树不能直接实现裁剪,和我 5 楼提到的欺诈证明,很显然不是一码事,结果好像有点被我混为一谈了。

在 Merkle 树的“剪枝”上做手脚,把已经被花掉的币剪掉,或者把没花掉的币加回去,这其实压根就没有修改原先区块的结构和内容,只是在呈现上做了手脚。如果有新的全节点要同步,那这种手段已经足够欺骗新的全节点了,这不需要任何挖矿算力。

欺诈证明,这个应该是对付已经写到链上的非法数据的。欺诈证明是“无罪推定”,首先假设一条链是合法的,给出有效证据才判为非法。
按照我的理解,如果只是在 Merkle 树的剪枝上做手脚,并没有修改链上的数据,所以还不算是欺诈证明覆盖的范围。只有恶意矿工开始在自己挖出的区块上花掉“已经被花掉的币”或是“从来都没存在过的币”(这两种其实都等于在凭空造币),才算是欺诈证明负责的范围。
2020-01-27 00:37:00 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
@memorybox @memorybox 我还是逐条杠一下吧。

1. 写入区块链的交易才被承认,双花交易只存在于内存池中,所有的双花交易只能有一笔进入区块链

“内存池”是每一个节点自己维护的,它存放的是待打包的交易。每个节点都有自己的内存池,并不存在一个全网统一的“内存池”概念。
你愿意打包什么数据进区块,完全是你的自由,谁也管不着。你愿意的话,打包进去一笔从 0.01 个币凭空变出 1 亿个币的非法交易都不是不可以。
如果有人尝试双花,那就会产生 N 笔互相抵触的交易(因为这些交易都花掉了同一个币)。
但是,**正常的节点不会允许自己的内存池里出现多笔互相抵触的交易**,只可能保留其中的一笔。
说完了内存池,那区块链呢?
只要有算力,任何人都可以完全可以去挖一条非法链来同时把这 N 笔互相抵触的交易都给打包进去,这样其实凭空造出了币。
如果你不愿意挖这种非法链,那你也可以去挖出多条分叉链,每一条分叉链本身都只打包这 N 笔交易中的一笔,每一条分叉链都完全符合规则。
不过,**正常的节点都是先独立地从头验证一条链是否合法**,中间但凡有发现任何违反规则的数据,都会将其标记为非法,**拒收**这条分叉链自此以后的所有区块;
**如果正常的节点看到了多条合法链,则会跟随其中最长的那条链(严格来说是积累工作量最大,而不是最长)**。

但凡是理性的矿工,也就是脑子里只想着赚钱的矿工,他只要考虑到“其他矿工也会按照规则验证我挖出的区块,非法区块会被拒收”,就不会把非法的交易打包进去;
他只要考虑到“最长链规则”,就只会在最长链的末端进行挖矿,把这条最长链延长;
无论是乱七八糟的分叉链,还是虽然长但是包含非法内容的链,理性的矿工都不会去跟随,因为跟随了,就是浪费自己的算力,让矿机白白烧掉电费而拿不到奖励。

可以看出来,每个节点都只是遵照一个规则来独立进行判断,而不是交给某一个“权威服务器”来进行处理和判断。所以才说,比特币是去中心化的。

2. 更改已经进入区块链的交易,只有发动 50%攻击

51%攻击,这个我在 3 楼说过了。
至于“更改已经进入区块链的交易”,我也在上面几楼说了一下比特币社区的分歧:
目前占主流的一派认为“比特币区块链具有无需信任(可以自证清白)的能力,即使是 50%以上的算力也仍然不能主宰比特币系统,为了达到这个目的,只能劳烦用户去跑笨重的全节点软件,别无他法——这也是我们不应该随便扩大区块容量的众多理由之一”;
相对少数的“大区块党”就不认同这一点,他们认为“按照中本聪的很多发言,矿工本来就主宰着比特币系统,所以区块容量和全节点之类的东西,让矿工们去管理就可以了,一般用户不需要操心去掺和;至于什么‘欺诈证明’都是很边缘的问题,不能拿来作为阻碍扩大区块的借口”。

3. 消费 coinbase 交易需要 100 block 的成熟期,现在不少裁剪节点是以 prune 方式运行的,一般设定 prune=4096,所以说,理论上区块链重组是有可能的,但是 100 个 block,4000 个 block 级别就变成近乎不可能的事情,一般情况下,6 个 block 确认就基本上确保一切; 历史上曾发生过最多 31 个 block 的重组事件,是在 2013 年 3 月份发生的,现在几乎不可能再有这种情况发生了;

coinbase 成熟度和区块修剪,这两个都是发生链重组时(也就是“回滚”,放弃一条分叉链,改为跟随另一条分叉链),可能带来连带损害的地方。就是为了防止出现连带损害,才要设置比较大、比较保守的限制。

coinbase 交易,就是矿工挖出新币+手续费奖励的特殊交易。如果过早允许矿工花掉这种“新挖出的币”,那很显然这些币还可以被接手的人再次花出去,这样就会产生一连串交易。如果发生了链重组,那源头的 coinbase 交易不能放到另一条链上,所以它后面的一大串交易也都会随之被判为非法、被丢弃掉,这很显然很糟糕,所以就需要尽量避免这种情况,就是为了这个才加了 100 个区块的确认的 coinbase 成熟度限制。

不过要注意,这个 100 区块确认的限制是写在全节点软件代码里的共识规则,谁都不能打破,否则就会被拒收。平时说的 6 确认就不是这样,6 确认只是一种典型的参考值,实际上在 0 确认的时候你就已经可以把收到的币发出去。一般说“请等待至少 6 个确认”,或者更多个确认,这个是**收款方为了保护自己而自愿选择去等**。对于交易所充值来说,也是如此,交易所也要保护自己,防止恶意用户利用双重支付来变相实现偷币。

区块修剪,这个很显然也是因为删掉了老区块数据就无法回滚到这个时间点之前,导致整个全节点软件都不能正常运作,所以目前就是至少也得保留 550MiB 的历史区块。
2020-01-26 20:15:02 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
这里也可以看出“历史区块不可避免地会越攒越大”是一个问题。我记得 Meni Rosenfeld 等很多人都认为这个问题可以用零知识证明来解决,不过我也不清楚具体是怎么解决的。我只知道 MimbleWimble 协议是安全地实现了裁剪。
2020-01-26 20:12:25 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
为什么说 UTXO commitment 存在争议呢?如果把最近时间点的 UTXO 集合算一个 hash,然后登记到链上,那不就可以跳过历史区块,直接从最近的时间点开始同步了么?而且检验 hash 就可以防止下载到假数据不是么?

争议点在于:这个“UTXO 集合的 hash”不具有“自证清白”的特性。
对于整条区块链数据来说,它是具有“自证清白”的特性的,因为每一个币是不是在比特币规则约束的范围内挖出来的,全节点都可以自己验证。
但是,你在链上看到“UTXO 集合的 hash”,怎么可以知道这个 hash 是不是恶意矿工伪造的呢?你只能是先验证过之前的交易数据,才能知道这个 UTXO 集合数据(以及它的 hash )对不对。

所以,就有开发者认为:如果大家都习惯了用 UTXO commitment 跳过历史区块,那比特币就丢失了“51%的算力也无法任意打破规则”这个良好的特性,变成了任由掌握了多数算力的矿工宰割的体系,这甚至可以说是丢失了去中心化。

大区块党一般都不认同这种观点,他们会强调“让矿工统治整个系统,这是中本聪本来的设计”……
2020-01-26 20:03:01 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
与这个问题相关的另一个概念是“欺诈证明”( fraud proof )。

看到我前面说“无法证明一个币是不是被花掉”,你八成会感到不服气——这怎么就不可能做到了?只要把后来花掉这个币的交易(以及对应的 Merkle 路径)给出来不就证明了么?

这个问题比直觉上复杂一些,但是也不是那么复杂,很多开发者都总结过各种可能的伪造数据方式,然后给出对策。大体上说,这需要对比特币的区块结构稍微增补一些数据,让矿工多登记一些证明数据。

其实,中本聪的白皮书里也有提到,SPV 轻钱包会盲目跟随多数算力,所以可能是需要一种警报机制,让 SPV 可以知道哪条链是违反规则的,不要去跟随这种非法链,这样即使攻击者掌控 51%的算力也无法任意地打破规则。

简单说,“欺诈证明”,就是一段非常简短的数据,任何节点(不需要有算力,甚至未必需要是全节点)都可以生成,而且其他节点收到后可以立即作出判断,如果“欺诈证明”本身没问题,那就一定是它指向的那条链有问题,所以那条链一定是非法的,不能跟随。


曾经,core 开发者认为 segwit 可以更方便地实现这一点,后来他们又否认了这一点,声明 segwit 并不会让欺诈证明更容易实现,而且后来他们还弃坑了。

弃坑的理由也很简单:即便我们可以生成这种简短的“欺诈证明”,也防不住恶意矿工把区块里非法的部分暂时藏匿起来。如果要亲自确证一条区块链是不是有被藏匿起来的部分,那只能是像全节点那样从头完整下载一遍。
2020-01-26 19:53:00 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
@blueberryman 你应该这样理解:比特币区块链上只有“历史转账记录”,没有“最终余额状态”;也就是说只有“过程”,没有“结果”。“最终余额状态”,也就是 UTXO 集合,这个是每一个全节点根据区块链(也就是历史交易记录)自己推算出来的。
历史记录当然是没有必要去改动的。

我感觉中本聪本来想把“交易记录”和“最终余额”合为一体的,也就是“交易”和“币”一体两面。所以他才会在白皮书里写“利用 Merkle 树剪枝来回收磁盘空间”
但实际上,稍加思考,就会这个想法不靠谱——Merkle 树只能证明一笔交易确实在链上,无法证明一个币是不是被花掉了,所以,恶意节点(不需要挖矿算力)完全可以把已经花掉的币重新加回来,或者把本来没花掉的币“修剪”掉。

以太坊就有“世界状态”这种设定,也就是把这个“最终余额状态”也算出一个 hash,登记到链上。
比特币呢,很多年前 Pieter Wuille 等开发者就提出了 UTXO commitment,不过这个争议比较大,至今也没有实现、部署。按照一般的搞法,新节点只能是从创世区块开始同步。虽然你直接拷一个同步好的数据目录过来也没人拦得住你,但很显然开发者不鼓励这种行为。
2020-01-26 19:36:24 +08:00
回复了 blueberryman 创建的主题 Bitcoin 比特币的双花攻击问题解决
@memorybox
我想杠一下。

不足 50%的算力也有一定概率能让攻击链追上原链,然后就成功覆盖了原链。50%以上算力,只要坚持足够久,是 100%概率成功,所以才叫 51%攻击。
http [V 站] s://bitcoin. [真烦人] org/en/bitcoin-core/features/validation 下面的 chain rewrite,还给了一张图表,横轴算力占比,纵轴等效 BTC 金额。

所以说,虽然区块链和挖矿就是用来对付双花的,但是这也只能是“假共识”,每时每刻都不能完全保证是不是有人偷偷藏了一条攻击链暂时没放出来,一旦放出来,就有一段历史要被改写。

另外,51%攻击也不止能双花,还可以 DoS,也就是拒绝正常打包交易。

总之,51%攻击也可以被视作一种恶意的软分叉(在原规则的基础上新加一条恶意的规则)。
@Rheinmetal 我也看到了。
《中科院发现 30 种药物可能对新型冠状病毒有效》这篇报道里也有提到 remdesivir。
2020-01-13 03:23:41 +08:00
回复了 flyElijah 创建的主题 程序员 关于压缩包密码的问题
不过,即便是相对较容易破解的情况,穷举破解的难度一般也令人绝望……
2020-01-13 03:21:12 +08:00
回复了 flyElijah 创建的主题 程序员 关于压缩包密码的问题
@autoxbc 我感觉即便是固实的,也未必非得完整解完一个文件,只要确定无误地知道数据流的开头是啥,应该也可以。不过想知道这个可能就比较困难了。
2020-01-12 19:34:43 +08:00
回复了 flyElijah 创建的主题 程序员 关于压缩包密码的问题
从他说的来看,LZ 的需求还是有可能满足的,也就是“截取一部分相对不敏感的数据,发过去破解”。
不过具体咋做就没说了,我也不清楚。应该需要具体搞懂压缩包的格式——做到这种程度的话,也许可以自己想办法租个云服务什么的了,也不用找什么 X 宝商家了。
2020-01-12 19:31:20 +08:00
回复了 flyElijah 创建的主题 程序员 关于压缩包密码的问题
我去,还是说反了。
应该是:RAR 里,加密文件名(打开时直接询问解压密码,不能看到文件列表)比不加密文件名(可以打开看到文件列表)好破。
2020-01-12 19:30:20 +08:00
回复了 flyElijah 创建的主题 程序员 关于压缩包密码的问题
简而言之:ZIP 比 RAR 好破,RAR 里不加密文件名(可以打开看到文件列表)比加密文件名好破。
2020-01-12 19:29:29 +08:00
回复了 flyElijah 创建的主题 程序员 关于压缩包密码的问题
V2 不让发链接,蛋疼。
搜索:damoncare zip 密码破解相比 RAR 为什么那么快?
(貌似百度搜不到,不知道为啥)
已经有了 Ian Coleman BIP39 Tool、Bitcoin Core、Electrum、blockchain web wallet,很多区块浏览器也支持交易播报……为啥还需要这个东西?
还有,3 楼我忘了加一个狗头,或者 /s,希望楼主不要误解。
你说小额 UTXO 会变成花不出去的粉尘,我的想法是:谁也不知道比特币能存续到什么时候,而且很多炒币的韭菜可能也不关心这个问题。

我想,真正无人问津死掉的币,链上都是空空如也的吧。所以,就算比特币哪天崩盘了,估计也不是被直接“堵死”的,可能是因为有别的币崛起了,或者整个币圈人去楼空了。
2019-12-26 16:56:31 +08:00
回复了 roker 创建的主题 Bitcoin 比特币终究成为郁金香泡沫
啊,我好像完美地避开了要点——你说的这个是交易所的“充提币收费”,也就是币进出交易所的时候一次性收取的手续费。后面在交易所里无论怎么炒,都和链上交易无关的。就算有手续费,那也是交易所直接在自己的数据库里把用户的金额扣掉而已,和区块链可以说毫无关系。
1 ... 39  40  41  42  43  44  45  46  47  48 ... 110  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4429 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 10:06 · PVG 18:06 · LAX 03:06 · JFK 06:06
Developed with CodeLauncher
♥ Do have faith in what you're doing.