在开放网路中,「资讯」包括文档、图档、影音等档案,在网络中的流通,传送的都是副本而不是原始档案。当我们再传送资料时,你会发现,当对方接受到时,我们的电脑依然保有原始档,对方收到的则是复製品,以「资讯」来说「无限复製」是一个优点,有助于资讯的传递与大众化,然而,当我们要在开放网路中传送有「价值」的数字资产时,「无限复制」便成为了难以解决的问题。
双花问题
在密码学中常说的「双花问题(Double Spending)」是指,数位资产在开放网路中,会因为「无限复制」的特性,而导致一笔资产被重复花费。时至今日,在网路中进行价值转移的解决方案都是透过大型中间机构例如政府、银行、信用卡公司、社群媒体或科技巨头等第三方单人中间人,处理身分验证、信用评级以及交易结算等交易流程。然而,这种解决方案却存在诸多问题例如高成本、耗时、资讯不对称以及中间人掌握控制权等。更重要的是,中间人机制只是帮助我们透过互联网实现价值转移,并没有真正解决开放网路中的双花问题。
2008 年,「比特币:点对点电子现金系统」白皮书问世后,才真正提出长久以来双花问题的解决方案。比特币的分散式帐本系统让网路中数百万个参与者透过共识机制共同维护帐本,让每一笔比特币交易,都被完整的纪录在帐本中,且该系统不可窜改与去中心化的特性,能够保证每一笔交易纪录的有效性与帐本安全。而比特币的分散式帐本系统也是世界上第一个在开放网路中解决双花问题的系统。
区块链的潜在双花问题
虽然区块链的帐本系统,解决了双花问题,但是,在交易达到最终性前,都有可能因为区块链的临时性或恶意分叉,导致该笔交易被回溯并重新验证,甚至被其他交易取代,以比特币为例,必须在得到六个确认后,才能确认交易的最终性。换句话说,攻击者仍然有可能利用交易尚未达到交易最终性的这段期间达成双花攻击。
具体的双花攻击是甚么样子呢?举一个简单的例子:假设我钱包只有 10 比特币,我花了所有比特币买了一台车,但是,我同时发起两笔交易,一笔「将 10 比特币打给汽车公司」另一笔「将10 比特币打给自己」。如果汽车公司看到该交易得到 1 个确认后就交车了,此时比特币区块链又正好处于临时性分叉状态,那原本给汽车公司的 10 比特币就有可能被另一笔交易取代掉,如此一来我就能够在没有花费比特币的状态下,买到一台车。
所以进行比特币交易时须要记得,确认数越多,交易失败的可能性越低,普遍认定 6 个确认(大约一小时)后即达到交易最终性。换句话说,为了避免受到双花问题的影响,使用者最好等待 6 个确认后,再认定该笔交易已完成,不会再改变。