許明恩
許明恩

《區塊勢》創辦人|LikeCoin、Desmos 驗證者。寫作當飯吃,目前都有吃飽。也有主持 podcast 節目,錄音是最近的愛。 買酒的速度比喝酒的速度快,家裡沙發底下是酒窖。最愛 Moscato。最遠去過巴西,最驚奇是在亞馬遜河游泳、釣食人魚,兩件事分開做。 沒爬過玉山,單車環島騎到一半,成功泳渡日月潭。以穿短褲上班為傲,衣櫥沒有大格子襯衫。

为什么说私有链没公信力?以林务局「独裁」区块链为例

只有单一记帐方的区块链,最大的问题就在于球员兼裁判。最极端的例子,就像这次的林务局区块链,甚至连记帐方是谁都没有公开。如果记帐者自己送出错误的交易,没有其他人可以制衡,俨然就是链上的「独裁」系统。

这篇文章以林务局的「台湾林产品生产追溯系统」当成活教材,说明为什么有人会说私有区块链(private blockchain)的安全性不如公共区块链(public blockchain)。

公链与私链

公共区块链与私有区块链的概念,类似于公有土地(例如公园)与私有土地(例如住家)。前者无须准入(permissionless),也就是不必经过谁的许可,任何人都可以随时进入公园。后者则须要经过同意才能进入。

在区块链领域里,也是同样的区分方法。

公链指的是人人都可以像是进入公园一样,不须要任何人的许可,就可以成为资料(或交易)的记录方。反过来说,私链则是要经过管理者的许可,才能获得在区块链上写入资料的资格。

人们听过的绝大多数区块链,例如比特币区块链(Bitcoin)、以太坊区块链(Ethereum)都属于公链。这些公链是由网路上互不认识的网友们为了获得加密货币挖矿奖励,所共同营运的区块链系统。因此,他们也被称为矿工(miner)。

下图就是我在写文章当下,全球有14,543 个比特币节点(矿工)在共同维护比特币这套区块链的营运。颜色越深的地方,就是矿工分布越密集的地方。这一万多名矿工们仰赖共识机制,来共同决定哪些交易会(或不会)被记录到区块链上。

图片来源:Bitnodes

如果骇客送出一笔恶意(或错误)交易企图破坏系统,其他节点就会发现这笔交易资料有问题,并拒绝这笔交易被写入区块链。换句话说,矿工之间会相互制衡。

但这篇要讨论的林务局区块链,则属于私链。

它就不是由网路上的矿工共同营运,而是由单一个政府单位或是承包厂商来营运。私链没有加密货币挖矿的诱因机制,也就不会有矿工想要加入营运区块链的行列。只有单一记帐方的区块链,最大的问题就在于球员兼裁判。

最极端的例子,就像这次的林务局区块链,甚至连记帐方是谁都没有公开(可能只有林务局或建置厂商自己)。如果记帐者自己送出错误的交易,也没有其他人可以制衡,俨然就是链上的「独裁」系统。

独裁体制看似很有效率,因为不需要说服别人。但缺乏制衡机制,最终的问题就是体制出错也浑然不觉。林务局区块链的「独裁」系统也有一样的问题。

林务局的问题

下图是林务局发包给厂商打造的「台湾林产品生产追溯系统」首页。用户必须先点击「查询」,才能看到系统里面目前已经登录过哪些林产品的交易纪录。

图片来源:林务局

根据林务局的系统发包文件,政府之所以想要建置这套追溯系统,是想整合林产品的买卖双方交易资料,并将产品在供应链中的完整流向纪录在区块链上。

图片来源:林务局

最理想的状况是,消费者可以透过扫描林产品(例如原木家具)上的二维码,就能透过溯源系统找到这块木材最初是从哪个林场砍伐、经过哪些处理,最终才会变成眼前的这个林产品。

这和标示肉品的原产地一样。不同的是林务局希望将溯源资料记录在区块链上(避免资料遭到窜改),而不是一般的资料库里。但问题是,谁要窜改木材的溯源履历?

之前我写过一篇文章,指出没人想去窜改木材生产履历。之前我到林务局录podcast访谈的时候,科长也亲口证实目前台湾木材在市场上的价格并没有比较高。既然没人想窜改木材的生产履历,为什么还要以区块链建构一套防窜改的系统?

不只林务局建置系统的出发点就有问题,连建置好两年的区块链系统,现在使用起来仍是漏洞百出。其中,最严重的两大问题分别是:

  1. 资料在前台(林务局网站)、后台(区块链)不一致
  2. 区块链本身的区块编号顺序错乱

这两个问题的严重程度,堪比计算机连1+1=2 的简单运算都会出问题,遑论更复杂的功能。以下分别讨论。

资料前后台不一致

以「台湾林产品生产追溯系统」第一页最后一笔资料,产品追溯码1303000028为例。

林务局网站里写的是这笔林产品溯源资料会被写在区块编号1526492这个区块里面,而且交易hash(资料流水号)是0xb0b1e1ef42bab7e925c1dd3896e15ef4ad9e9b6b973f0d08c5b019c88cd2a131

图片来源:林务局

但实际上,点入区块编号1526492却显示没有纪录任何一笔资料(Transactions 数量为0)。

图片来源:林务局

用笔记本来比喻,这就像一笔编号叫做0xb0b1e1ef42bab7e925c1dd3896e15ef4ad9e9b6b973f0d08c5b019c88cd2a131的资料说它被记录在笔记本上的第1526492这一页。

但实际上,人们翻到1526492这一页却发现根本是一片空白,没有任何纪录在上面。这就是林务局系统的资料前台(林务局网站)、后台(区块链资料)不一致问题。

这不是特例。大家有兴趣的话还可以在产品溯源码130300002920050000252005000013找到一样的问题。认真找的话,你可能会发现错误率相当高,随便都可以抓到bug。

如果你已经觉得这套系统有够扯,更夸张的还在后头。

区块编号顺序错乱

区块链顾名思义就是在软体工程上,把一个个相互独立的区块「链」起来。用笔记本来比喻的话,每个区块(block)就像是活页笔记本的内页,而且会有页码从0 开始。而链(chain)则像是活页笔记本的扣环,让每个区块环环相扣。

业界的常识是,区块的编号越小,代表资料时间越久远。区块的编号越大,代表资料时间越接近现在。区块编号由小到大,是区块链的基本常识。没想到,林务局这套区块链的区块编号却连最基本的由小到大逐渐递增都做不到,而是区块编号会随便乱跳。

下图是产品溯源码1303000161的页面。这笔林产品的溯源资料,是记录在区块编号10366643里面。

图片来源:林务局

实际点入区块编号10366643则会发现,这个区块的时间戳记是在2020 年的11 月23 日,距离我写文章的2021 年12 月28 日已经是13 个月之前。

图片来源:林务局

但问题就在于,在我写文章当下2021 年12 月28 日晚上7 点35 分的区块链上的最新区块,才产生到编号10029426而已。

略懂区块链的人,肯定能一眼看出这套系统的问题之大。

既然现在的区块编号才到10029426 ,为什么13 个月前的区块编号就会写到10366643 ?除了区块链系统错乱,我想不到第二个原因来解释这个灵异现象。

连区块编号都会错乱,谁还敢相信区块链系统上的资料是不是正确?区块链上面记载的都是有价资产,如果可以随便系统错乱,也就完全失去使用区块链记录资料的意义。

林务局私有链的问题

这起事件呈现出林务局私有区块链的两大问题:

  1. 私有链没人制衡
  2. 林务局自己也不懂区块链

如果同样的问题出现在公有链,我相信那个区块链的币价早就直接归零。毕竟这种资讯错乱的系统,谁敢把钱放在上面?私有区块链只有林务局自己在记帐,即便错了也没人发现,这就是「独裁」的最大问题。

其次,根据区块链纪录,这套系统已经错了至少一年以上。但林务局自己恐怕根本不知道区块链正确运作该是什么样子,也就难以找出厂商做出来的系统错在哪里。我相信私链、公链各有其用途,也都有其缺点。

这篇文章只是以林务局的系统为例,指出私有链可能会产生出的问题。如果大家能帮忙林务局这套系统debug 找出更多问题,或是在留言区确认这些问题的存在,相信都能让政府更严肃的面对、正视这些花费人民纳税钱建出来的问题系统。

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论