主页 > imtoken官网网址 > 9.1 比特币作为一种只能添加的记录

9.1 比特币作为一种只能添加的记录

imtoken官网网址 2023-10-14 05:07:46

比特币是一个只能添加不能删除的记录。 它是一种可以不断添加新数据的数据结构,但是数据一旦添加,就变得不可修改,永久存储。 因此,通过比特币,我们可以获得一个时间顺序:确定一个数据是在另一个数据之前还是之后写入记录的。 这个顺序是由区块之间的哈希函数指针决定的,而不是区块上的时间戳,因为时间戳可以被伪造,或者因为矿工改变了时间戳的值使其更小(更早)),或者矿工的计算机时钟不同步,或者是由于网络延迟的差异。 话虽如此,如果一个区块的时间戳晚了好几个小时,它就会被其他矿工拒绝。 所以时间戳还是比较准确的。 通过下面的例子,我们可以看出这些特性是有实际用途的。

安全时间戳

比特币的这种仅附加记录功能可用于构建安全的时间戳系统。 假设,想证明我们知道 x 在时间 T 的值,但又不想透露它的具体值。 披露它只有在未来很长一段时间才有可能,当有可能证明我们确实知道该值时(当然,如果我们在时间 T 知道 x 的值,我们在时间 T 之后仍然知道 x 的值)。 一旦我们证明了这一点,我们就需要使该证明永久化。

我们在第 1 章中看到,哈希函数可用于锁定数据 x。 我们不需要发布 x 本身的值。 相反,我们只需要在区块链中发布这个数据值的哈希函数H(x),就可以证明我们知道X的值。这个哈希函数的特性保证了我们无法找到另一个哈希函数结果为的数据y与x的哈希函数结果一致,即当y≠x时,H(x)=H(y)不存在。 我们还可以依赖哈希函数的另一个共同特点:只要x本身有一个比较高的最小信息熵分布(distribution with high min-entropy),即x是不可预测的,那么x的哈希函数的结果没有透露任何关于 x 的信息。 如果x本身不具备这种不可预测的特性,正如我们在第一章讨论的那样,我们可以选择一个最小信息熵分布较高的随机数r和x组合签名,然后用H(r|x)作为公布的数值约定到外面的世界。

这个想法的核心是我们只在时间点T发布哈希函数H(r|x),然后在更晚的时间点发布r和x。 任何人看到这个只能增量完成的记录都会相信我们在发布 H(r|x) 时必须知道 x,因为我们没有其他方法可以生成这些数据。

时间戳应用

这个安全时间戳的目的是什么? 一种可能的应用是展示想法的优先顺序。 假设我们想证明我们头脑中已经存在一些关于专利的创意。 我们可以在想法产生后第一时间通过哈希函数将设计文档或原理图草稿发布在区块链中,但我们不会将想法的具体内容透露给任何人。 后来,当我们申请专利或者公布这个想法的时候,我们可以公布原始设计文件和相关信息,任何人都可以查看这些文件的功能时间戳,以证明我们在这之前,也就是我们到的时候设计文档的散列函数约定已发布,想法已经存在(证明我们对想法的时间优先所有权)。

比特币之父能不能随意制造比特币_用比特币记录信息_查询比特币交易记录

我们也可以用同样的方法来证明其他人已经收到了我们发给他们的信息。 假设 Alice 雇佣 Bob 做一个编程工作——他们之间的合同规定 Bob 必须在一定时间内将他所做的工作内容提交给 Alice。 双方都想获得担保。 如果以后对相关工作内容产生争议,比如Bob是否按时提交程序,提交的内容是否符合合同要求等,双方都希望有相关事实来证明。 为确保这一点,他们可以共同同意在 Bob 提交的作品上签名,然后再将其哈希函数发布到区块链上。 如果任何一方对提交的时间或内容撒谎,另一方可以通过公开哈希函数的输入来复制当时发布的内容来证明对方是错误的(例如在法庭上)。

安全时间戳函数还有许多其他有趣的应用。 有一个完整的公钥签名方案称为盖伊福克斯签名方案。 与通常的公钥签名相比,它只使用了哈希函数和只能增量记录的记录特性。 不需要任何重量级的加密算法。

攻击未来预测的证明

我们目前无法仅用时间戳来证明对未来的准确预测,能够预测未来(千里眼)当然非常好。 从表面上看,这似乎是可以做到的。 在事件(例如体育赛事或选举)之前发布对结果的预测,然后在事件发生后证明之前的预测。 但这种做法真的可行吗?

2014年下半年世界杯收官阶段,有人试图用这种方式“证明”世界杯主办方国际足联(Federation Internationale de Football Association,简称FIFA)搞贪污。 当时有一个推特账号被广泛关注,因为它可以在这些比赛之前准确预测一些重要比赛的结果。 例如,该帐户正确预测德国将在加时赛中获胜用比特币记录信息,而 Mario Götze 将得分。 这似乎证明要么微博主有预知未来的能力,要么就是游戏被人操纵了。 然而,实际上,这位博主只是在赛前发布了所有可能发生的事件,例如,对于所有参赛的球员,都有一条关于他进球的微博,对于每一个可能的最终得分,都有一条相关的推文等。(见图9.1),然后在比赛结束前,博主将那些不准确的预测全部删除,只留下那些准确的“预测”。

image.png

图 9.1 试图预测未来

用比特币记录信息_比特币之父能不能随意制造比特币_查询比特币交易记录

注意:这是一个假的推特账号,试图通过预测比赛结果来“证明”世界杯决赛被操纵。 其中第一个和第四个在赛后被证明是正确的,其他不准确的预测都被删除了。

任何安全的时间戳系统都可以使用相同的基本攻击方法来破解。 你只需要把所有的结果提前埋起来,最后只公开正确的结果即可。 这意味着如果你想证明你有预测能力,你必须证明你做了一个且只有一个预测,而不是多个预测。 但如果要基于哈希函数来揭示结果,则很难实现,尤其是在比特币区块链上,因为安全的时间戳系统不会将承诺与任何个人身份联系起来。 很多承诺,不说就很容易说出来,不说的,也不容易查到你身上。

过时的安全时间戳

这是一个简单的低技术安全时间戳方案:通过广告,您可以在报纸或其他媒体上发布您的预测结果的哈希函数值,相关的旧报纸和杂志将保存在店内或网上的图书馆备份。 这种方法可以高度保证您在论文发表当天就知道结果。 以后,当你想披露你的预测结果时,你可以在同一份报纸上发布第二份公告。

比特币中的安全时间戳

如果我们想用比特币代替报纸来实现时间戳功能,我们应该把约定的哈希值放在哪里呢? 是在交易的某个环节,还是直接在一个区块中?

人们想到的第一个也是最简单的解决方案是直接将钱发送到数据的哈希函数值而不是公钥的函数值。 因为你不知道地址的私钥,这样做会“烧毁”硬币,使它们燃烧而永远无法使用。 为了降低成本,您可能需要发送极少量的货币,例如 1 satoshi(0.0000001 比特币,这是比特币的最低交易金额)。

用比特币记录信息_比特币之父能不能随意制造比特币_查询比特币交易记录

这种方法虽然很简单,但是消耗比特币的做法实在不敢恭维(即使与交易手续费相比,消耗比特币的幅度也可以忽略不计)。 更大的问题是,因为比特币矿工不知道这些交易支出永远无法获得,所以他们会永远跟踪它们。 因此,整个比特币社区对这种方式都不太感冒。

另一种更高级的方法称为 CommitCoin,是将您的数据编码为私钥。 在第1章中提到:“使用ECDSA时,确保良好的随机性来源非常重要,因为不良来源可能会导致关键信息泄露。这不难理解,如果您使用不良随机性源生成密钥,那么该密钥可能不安全。但是 ECDSA 的怪癖是,即使您在生成签名时使用了错误的随机源,并且使用了完美的密钥,您的个人密钥仍然可能会泄露。 “

Promise 硬币利用了此功能。 我们生成一个新的私钥来编码我们的数据合约,并生成一个相应的公钥。 然后我们向该地址发送一个小交易(比如 2,000 聪),然后发回两笔交易,每笔 1,000 聪。 最重要的是,在发回时,我们使用相同的随机源来签署两个交易。 因此,任何人在计算区块链中包含封装数据协议的私钥时,都必须使用两个签名。

与将数据合约编码为公钥的方法相比,承诺币避免了花费额外的比特币,并且矿工不再跟踪永远不会再次花费的支出。 然而,这种方法非常复杂。

不能重复使用的输出

直到 2015 年,比特币实现时间戳的方式是使用 OP_RETURN 交易。 这笔交易的输出是可以证明的,但不能重复使用(见图 9.2)。 OP_RETURN 命令立即返回错误代码,使脚本永远无法成功执行,因此封装的数据将被忽略。 正如我们在第 3 章中看到的,这既可以用于消费证明,也可以用于编码任意数据。 截至 2015 年,OP_RETURN 允许输出 80 字节的数据,这对于哈希函数来说绰绰有余(SHA-256 需要 32 字节)。

image.png

比特币之父能不能随意制造比特币_用比特币记录信息_查询比特币交易记录

图 9.2 带有 OP_RETURN 指令的时间戳

注意:这是一个“不可重复使用”的交易输出脚本,中间封装了一个数据合约。

这种方法将未被使用的交易支出中的“水分”“挤出”,因为矿工会简化OP_RETURN中的支出。 这个数据协议的成本实际上是一笔交易费用。 整个 2015 年,典型的交易费用通常低于 1 美分。 这笔交易费用可以在一个协议上分摊到多个数据上,从而降低成本。 2015年底,已经有几个网站在做这些服务。 他们从不同的用户那里收集一组数据,将这些数据封装成一棵 Merkle 树,然后发布一笔交易支出,其中包含 Merkle 树的根数据,这些数据不能被重复使用。 这种做法就像是将当天所有需要打上时间戳的用户数据封装到一个数据合约中。

非法内容

区块链随意封装数据的特性也有缺点,可能会被一些人恶意利用。 某些内容(尤其是儿童色情内容)的制作和分发在大多数国家/地区都是非法的,并且会受到非常严厉的处罚。 版权法还严格规范某些内容的传播。

当然,许多人试图这样做是为了“危害”或扰乱比特币社区。 例如,有报道称比特币区块链上发布了一些色情链接。 这些害群之马的目的是让将比特币区块链下载到您的个人硬盘并运行一个完全有效的节点变得危险,这也意味着您可能会存储和分发这些非法信息。

然而,截至目前,还没有很好的方法来阻止这种向比特币区块链写入任意数据的行为。 即使我们使用 P2SH(pay to script hash value)来防止恶意攻击,无非就是让交易变得更昂贵,并不能完全阻止这种行为。

用比特币记录信息_比特币之父能不能随意制造比特币_查询比特币交易记录

幸运的是,法律不是计算机算法。 试图用技术手段“破解”法律虽然很诱人,但并不容易。 法律由人类解释并结合其他因素,例如我们的意图。 以美国第 2252 号联邦法案为例。 在描述持有、传播、散布、接收儿童色情制品等违法行为时,所用的措辞使用了“明知故犯”等含有故意的关键词。

另外值得注意的是,根据我们上面讨论的字节大小限制,图片数据(除非是非常小的图片)不能直接写入区块链的数据块中,这些数据要么只存储在外部数据库中在区块链中持有相应链接的链条要么被长时间封装在多个交易中。 最终结果是,大多数比特币用户没有能力直接在交易中解码和查看数据,更不用说解码和查看跨越多个交易的数据了。

附加到比特币的附加硬币

从好的方面来说,因为我们可以将任何数据写入比特币区块,我们可以在比特币系统之上构建一个新的货币系统,而无需开发新的共识机制。 我们只需要将比特币作为一个只能添加的记录,将我们开发新币所需的所有数据写入比特币区块链即可。 我们将这种方法称为附加到比特币的“覆盖货币”。 比特币成为底层基础设施用比特币记录信息,所有附加在币上的数据都以非消耗性交易支出的形式写入比特币区块链。

当然,比特币矿工不会验证你写入区块链的数据,因为他们不知道也不关心数据在你定义的新货币体系中是否有效。 只要你支付交易费用,任何人都可以写任何东西。 不同的是,你必须自己开发更复杂的逻辑来验证新货币系统中的交易,然后每一个发送和接收这种新货币的客户端(即钱包软件)都必须有这个逻辑。

例如,附币矿工不能再拒绝双花交易。 相反,每个附加硬币的用户都必须检查区块链中的历史记录。 如果有人试图双花这个币(它已经被使用过一次),那么应该直接忽略第二笔交易。 因此,AttachCoin 中没有轻量级的 SPV 客户端。

Counterparty是比较优秀的附币之一。 交易对手的所有交易都写入比特币区块链。 2014年,约0.5%~1%的比特币交易携带合约币。 数据。 同时支持比比特币更多更丰富的功能,因为合约币不需要开发新的共识机制,比特币矿工不需要了解合约币的规则,合约币的开发者可以专心开发一些像智能合约、用户自定义货币等有趣的功能。合约货币的API也比比特币丰富很多,因为比特币矿工不需要了解或认可这些API的开发。

在不开发新的共识机制的情况下创建新的数字货币的可能性是诱人的。 你甚至不需要鼓励新的矿工加入你的系统,你也不需要改变比特币来增加新的功能。 但是这个系统还是依赖于比特币,比如这些附币的交易手续费规则都是以比特币为准的。 另外,由于挂币的节点可能需要处理大量的数据,而比特币不会为你过滤这样的交易,这种方式也可能效率低下。