首页 > 资讯 > 比特币精灵搬砖mac|解不开的缠结和 IOTA 的泪
汤强  

比特币精灵搬砖mac|解不开的缠结和 IOTA 的泪

摘要:2017 年 9 月 7 日,麻省理工学院(MIT)发表公开信:数字货币 IOTA 存在严重漏洞,2 个月前 MIT 私信过 IOTA 团队,希望他们改代码。但

2017 年 9 月 7 日,麻省理工学院(MIT)发表公开信:数字货币 IOTA 存在严重漏洞,2 个月前 MIT 私信过 IOTA 团队,希望他们改代码。

但 IOTA 团队没有理会,最终 MIT 选择把漏洞公之于众。这个漏洞究竟是什么?一切,要从 IOTA 的数据结构 DAG 说起。

一、什么是 DAG?

DAG:Directed Acyclic Graph,中文意为“有向无环图”。

有向无环图是一种存储数据的方式。“有向”指所有数据顺着同一方向存储;“无环”指数据结构间不构成循环。像条毛线织的围巾,可以一直编下去。

图 1 DAG 有向无环图(缠结 Tangle)

你可以这样理解:区块链是每个区块记多笔交易,而 DAG 是每个区块存一笔交易,所以它们的本质相同。在 IOTA 白皮书里,把结扎在一起的交易称为缠结(Tangle),如图 1。

你可能会奇怪,这些交易为什么要连线、标箭头?因为使用者每发起一笔交易,必须验证之前的两笔交易。

这很像让一个孤儿自己选择养父母。DAG 是孤儿的世界,每笔交易天生是孤儿,但养父母不能随便乱选,他们必须根正苗红,否则孤儿自己就不会被下一代选为父母,不被选择意味着从此消失。

如果一笔交易不被后来的交易所验证,它就会变成真正的孤儿,从此在账本里失去合法性。

缠结图的本质上是订在一起的账本,而交易发起者的验证就是订书钉,可他们用什么方式验证交易?

答案是我们熟悉的工作量证明:POW (戳此复习)

交易发起者自己选择两笔合法交易,花 2 秒钟找出一个随机数,让“随机数+信息”的哈希值符合系统要求。

验证所需的工作量与前手交易权重成正比,交易权重相当于验证难度,难度越高验证时间越长。
IOTA 中,权重是以 3 为底的指数增长:3 的 1 次方、3 的 2 次方、3 的 3 次方……被验证次数越多的交易权重越大。

所以,如果你担心验证完两笔正确交易却没人来验证你,那这种担心是多余的,因为验证新鲜交易更容易,如果验证靠前的陈旧交易,工作量会指数级地翻上去:本来 2 秒钟能验证完的交易,现在要花 2 小时,何必?

另外,你可能会问,DAG 下为什么不能只验证一笔交易,必须是两笔或两笔以上?

因为如果只往前验证一笔,网络会被大算力操控。

算力强者很容易抬高交易权重,拉长尾巴,以堵死后面的验证通路,让随后的诚实交易不得不屈从大算力;可验太多交易又会耗时过长。

所以,验两笔能兼顾安全和效率。

于是,发起者一边提交自己的交易,一边验证别人的交易,以此编织着一个去中心化网络。注意:这个网络不是缠结图,缠结图里的点是交易记录,而网络指参与交易的所有节点。

可是 DAG 下会不会发生双重支付呢?

会。

二、DAG 下如何保证账本安全?

假如我转你价值 100 万元的 IOTA,你非常高兴,确认后把 100 万元货物交给我,但此时我心生歹念。

我靠算力发起攻击,用一笔权重更大的交易验证合法交易之前的交易。

图 2 大权重攻击

只要超过主体诚实的 DAG,随后的交易都会接在我的 DAG 后面生长,这样我就赖掉之前的交易,白白从你手里拿走 100 万元的货。

关键问题是,我得汇聚多少算力才能实现双重支付?

需要全网 34% 的算力。

IOTA 团队说,网络还没成熟,所以先找个协管员看场子,这名协管员就是一台名叫 Coordinator 的服务器。所有交易是否合法,暂时全由这位协管员拍板,拍板后告诉其他节点,该验证哪些交易。

官方说,2018 年会撤下协管员,这也意味着,目前 IOTA 暂时并非一个去中心化的网络。可如果能确保账本安全,中心化并非不可行的方案。

影响账本安全的另一个因素是数字签名,因为攻击者无法使用他们没有的私钥签出和你一样的数字签名,而保障这件事的是哈希算法,它具有一个特征:哈希不同文本能得出不同结果。如果哈希不同文本出现同样的结果,这种情况称为“碰撞”。

MIT 报告指出:

IOTA 使用了自己开发的哈希算法 curl,但是 curl 算法的哈希值极易发生碰撞,于是就能伪造数字签名。

IOTA 的 DAG 是靠后手保护前手,一旦攻击者成功伪造数字签名,后手挑不出伪造者的错,非法交易就能大摇大摆地通过验证,这意味着别人用其他私钥也能撬走你账户里的钱。

现在 IOTA 有协管员保护,但如果撤下协管员,签名能否会被仿冒,就完全得寄希望于攻击者没有哈希出和你一样的签名。

你可能认为,有协管员的情况下这不会成为一个问题,因为协管员会公正地验证所有交易,至少它能取消不合法交易,但事情并非这么简单。

因为协管员自己也有私钥,一旦泄露,造成的结果将比服务器电源插座被拔还要严重,因为此时持有私钥者具备改动任意交易的技术可能,这就是集中管账的风险。

现在有协管员看家,技术上的确能过滤恶意,可 IOTA 的最终目标终究是脱离协管员、全网自治,除了面临伪造数字签名的问题,还要面临一道难题:

34% 攻击。

防止这种攻击的一个办法是招募矿工,但由于 IOTA 无手续费,所有没有矿工会响应,与此同时,IOTA 还面临着拒绝服务攻击的可能,就像不收物业费的小区,靠业主自治很难扫清不法份子,甚至扫不净地上的落叶。

包括 IOTA 团队在内,暂时没有人给出解决方案。当然,让人垂泪的棘手问题还不止这些。

三、用户私钥问题

本段与 DAG 无关,但由于采用 DAG 的加密货币不多,而 IOTA 又是持有范围较大的币种,所以写下这段,仅作安全提示。

IOTA 用户的私钥由种子生成,种子长这样:

KJGH9YZXCYVYOWTV9YULOVYASDL99YGIAEQWEDFGHNSLNGHJFGHIJPCIYEC9GWOLMFGHGQ99Y9HNMRQASF

一共 81 位,看起来很长,但其实只有大写字母和数字 9,人们除了质疑为什么不用小写字母和其他数字压缩种子长度之外,还有两点关键的质疑:种子如何凭空产生?种子如何生成私钥?

IOTA 团队没有公开种子和私钥的生成算法。

我们专栏在《区块链资产朴素安全课》中提过,比特币的私钥是一个随机数,由 256 个 0 或 1 组成,文末配有转换工具网址,那就是公开的私钥生成算法。

但 IOTA 的私钥只能用官网钱包生成,如果私钥生成算法不公开,用户就无法验证眼前的是否是只有 1000 种可能的伪随机数私钥。

所以,IOTA 用户的私钥有两层风险:

一、受 curl 算法的影响,私钥被冒签的风险;

二、受私钥生成算法未公开的影响,私钥被破解的风险。

如果还有第三层风险,那就是每次划转钱后,必须把余额转至新的地址,否则余额不保。

这源自于能抵抗量子攻击的温特尼茨单次签名(Winternitz one-time signature)的特性:每签一次,私钥就会暴露一半。这让每个私钥变成一根一次性筷子,每用一次都会被污染半截。

不知何时,IOTA 才能平息这些质疑。

结语

DAG 是一种数据存储结构,从它被发明的 30 多年来一直都有人使用,本身并没有问题。但它和区块链的区别在于 DAG 没有传统意义上的共识,每笔交易的可信与否取决于相信这笔交易的人数。

所以采用 DAG 技术的核心问题在于如何保护全网达成的一致?

IOTA 使用了中心化方案:先协管员看护,以后慢慢放开。同样采用 DAG 的另一种加密货币 Byteball 就很淳朴,12 名矿工通过收交易手续费的方式保护系统安全。

DAG 曾经作为比特币扩容的方案,但最终没被采用,因为基于 DAG 的分布式网络在保护共识方面很难比区块更有效。

作为一种创新的存储方式,DAG 和采用区块记录交易的方式相比,尽管很有趣,但它暂时没有明显的优势,这就是为什么很多区块链项目没有选择 DAG 的原因。

IOTA 现在还没有解开自己的缠结,但作为旁观者的我们,有一点值得我们警醒。

加密数字货币的技术复杂度远超我们想象,但并非不可理解,只要我们投入足够的时间,一定可以理清思路,理性决策。

最受伤的人,恰恰是在局势未明朗时,仅凭日涨一寸的 K 线图就匆忙入场者,他们生怕承受错过的痛苦,甚至会有人因为缠结图和物联网长得像而看好 DAG 在物联网领域的发挥。

未经深入思考的投资者很可怜,捧着一摞血汗钱走进用天罗地网,他们哪里会想到,编织这张网的可能不是别人的恶意,而恰恰是自己的认知偏差。

千万别眼红那些跑步进场、月赚 10 倍的朋友,他们可能有惊人的浮盈,但由于跑步进场这个动作本身就是未经深入思考的结果,于是,在迈出腿的一瞬间,就已经注定了大概率的结局。

投资大神乔伊·格林布雷(Joel Greenblatt)有个著名的类比:

买了股票但不知道买了什么,就如同手持火把穿过一个炸药工厂,你可能活下来,但你依然是一个傻子。

所以,拿出你的储备知识,启动你的逻辑链条,把思路里的缠结整理成区块,烘干认知偏差,时刻让自己的投资逻辑保持干爽。

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。