铭文对比特币网络有什么影响,铭文安全吗?

 2024-01-03 08:34:47发布 2024-01-03 08:35:27更新

铭文作为一种新兴技术,在比特币生态中的应用开启了新的可能性。但从技术和安全的角度说,比特币铭文本质上还是一种规则绕过的漏洞,taproot脚本并不是为了存储数据而出现的,其安全性也存在一些问题。

铭文对比特币网络安全的影响

如何度量区块链网络的安全,一直是一个有争议的话题,一个经常被人拿来用的度量的维度是出块节点的数量(miner 或者 validator),这点上 PoW 系统不占优势,经常被 PoS 推崇者嘲讽。

而 Bitcoin 开发者们经常用的一个度量方法是全节点的数量。为了让个人 PC 都能运行全节点,所以要严格限制区块大小,以及 UTXO 集,以降低全节点的成本。

但多少个全节点算够呢?铭文在多大程度上会影响比特币的全节点数量呢?反倒从当前的统计图上能看出,大约因为铭文的热度,很多人需要和 Bitcoin RPC 交互,增加了比特币全节点的数量。

比特币全节点的数量

比特币全节点的数量

从全节点这个角度衡量,也不能说铭文影响了比特币网络的安全。

再进一步推演,保证比特币网络安全的真的是那些全节点吗?在没有激励的情况下,用户为什么要运行一个全节点呢?如果一个人花钱跑几万个节点,是不是可以让比特币网络更安全了?

实际上我们需要的不是全节点,而是全节点背后代表的人和组织。

区块链是一个公开账本,关心账本是否正确的人越多,这个账本越安全。用户之所以关心这个账本,是因为这个账本上记载了和他利益相关的东西,无论是 BTC 也好,还是其他什么东西也好,只要他觉得有价值,他就会关心这个账本。

而用户关心账本的方式也并不是只有自己运行全节点一个途径。用户只要直接和比特币网络发生连接,就有这个效果。比如用户安装链上钱包,查看链上交易,带来的安全保证就高于用户把比特币托管在交易所或者托管钱包里。

而我们能看到的现象是,这波铭文热明显的带来了用户和 Bitcoin 网络更多的直接连接(浏览器钱包),带来了 DApp 应用生态的雏形(网站上挂铭文通过 psbt 链上交易),有更多用户关心这个账本上记录了什么东西了(区块链浏览器的涌现和访问量)。

所以说,从安全的角度看,铭文对比特币网络的安全是有提升的。

铭文的安全性

铭文看上去只是一段“无害”的文本上链,并通过中心化的indexer来解析,似乎安全问题只是中心化服务上的安全考虑,但在链上安全方面,还是需要注意以下几点:

链上安全

增加节点负担

铭文会增加比特币区块的大小,这会增加节点在网络传播、存储和验证区块时所需的资源。如果铭文过多,会降低比特币网络的去中心化程度,使网络更容易受到攻击。

降低安全性

铭文可以用于存储任何类型的数据,包括恶意代码。如果恶意代码被添加到比特币区块中,可能会导致网络安全漏洞。

交易需要构造

铭文的交易需要进行交易的构造,并且关注Ordinals的先入先出规则,以防止由于疏忽导致铭文的索引性被破坏。

买卖存在风险

铭文的交易市场,不论是OTC还是PSBT,都存在资产损失风险。

具体的安全问题

以下是一些具体的安全问题:

孤块率和分叉率增加

铭文会增加区块的大小,这会导致孤块率和分叉率增加。孤块是指没有被其他节点承认的区块,分叉是指网络中存在多个竞争的区块链。孤块和分叉会降低网络的稳定性和安全性。

攻击者篡改铭文

攻击者可以利用铭文的开放性进行篡改攻击。

例如,攻击者可以将铭文中存储的信息替换为恶意代码,从而在渗透进indexer的服务器或通过木马入侵用户设备。

钱包使用不当

如果钱包使用不当,钱包不能索引铭文的情况下,很可能错误的转移走铭文,导致资产损失。

钓鱼或诈骗

攻击者可能通过假冒的unisat等indexer网站,来诱导用户进行铭文交易,从而窃取用户资产。

PSBT签名疏漏

Atomicals Market曾经因为错误的签名方法使用,而导致用户资产受损。

解决方法

为了解决这些安全问题,可以采取以下措施:

  • 限制铭文的大小:可以限制铭文的大小,以减少对节点负担的影响,这一点文章开头提到的Luke已经在做了。
  • 对铭文进行加密:可以对铭文进行加密,以防止恶意代码的攻击。
  • 使用可信的铭文来源:可以使用可信的铭文来源,以防止签名问题和被钓鱼。
  • 使用支持铭文的钱包:使用支持铭文的钱包来进行转账活动。
  • 注重铭文代码及相关脚本的审核:在BRC20-swap及递归铭文的新型实验中,由于代码和相关脚本的引入,需要确保这些代码及脚本的安全性。

比特币核心开发者、Ocean 矿池联合创始人Luke Dashjr对Bitcoin core代码的修改从安全角度来说是正确的。Luke并未对比特币的共识层进行直接修改,而是选择调整Spam Filter(策略过滤器)模块,使得节点在接收到P2P广播消息时,能够自动过滤掉Ordinals交易。

在这个策略过滤器中,有多个名为isStandard()的函数用于检查交易的各个方面是否符合标准。如果交易不符合标准,节点接收到的这笔交易将会被迅速丢弃。

换言之,尽管Ordinals交易最终还是可以被加入区块链,但大多数节点不会将这类数据加入交易池,这将增加Ordinals数据被愿意将其打包上链的矿池接收的延时。

然而,如果某个矿池广播了一个包含BRC-20交易的区块,其他节点仍然会对其进行认可。

Luke已经在Bitcoin Knots客户端中推出了对策略过滤器(policy)的修改,并且计划在Bitcoin Core客户端中引入类似的更改。

在这次修改中,他引入了一个新的参数,名为g_script_size_policy_limit,用于在多个不同的位置限制脚本的大小。这一改动意味着在处理交易时,脚本大小将受到额外的限制,影响着交易的接受和处理方式。

Luke引入的新参数

Luke引入的新参数

目前,该参数的默认值是1650Bytes,任何节点客户端都可以在启动时通过参数-maxscriptsize来设置:

不过即使代码更新,距离矿工节点全部更新为新版本还有很长的一段时间,这段时间,铭文社区的创新者们应该可以创造出更安全的协议。

需要说明的是,技术是一个生态系统,需要随着用户的使用和反馈来生长。很多创新都不是开发者们在电脑前规划设计出来的,而是随机的尝试,然后和用户的反馈碰撞涌现出来的。

推荐阅读