登陆

使用比特币作为中心组件构建的货币以外的应用程序

yonghong 2018-08-17 23124人围观 ,发现0个评论 BTC

在前几章中,我们开发了比特币的技术基础,并看到它如何作为货币使用。现在我们来看看我们可以使用Bitcoin作为中心组件构建的货币以外的应用程序。其中一些依赖比特币,就像今天一样,没有任何修改,而且许多其他的只需要很少的修改。

我们选择这些应用程序是为了实用性和知识性的结合。这个列表并不详尽,但是看到这些应用程序如何工作(或者可以工作,因为许多只是想法或建议)会让您深入了解Bitcoin的功能,以及可以重新利用的许多方式。

9.1.比特币作为附加日志

将比特币视为一个附加日志——可以编写新数据的数据结构,以及一旦我们编写了数据,它就是防篡改的,并且永远可用,这是很有帮助的。我们还有一个安全的排序概念:我们可以判断一块数据是否在另一块之前或之后写入日志中。该排序来自区块哈希指针,而不是区块时间戳——区块的时间戳实际上可能比其前身更低(更早)。这是因为矿工可以撒谎的时间戳,矿工的时钟不同步,在网络存在延迟。也就是说,如果区块的时间戳似乎关闭了超过几个小时,那么其他矿工将会拒绝它,所以我们可以依靠时间戳是大致正确的。我们将看到,这些属性是非常有用的。

安全时戳

仅追加日志可用于从Bitcoin构建安全的时间戳系统。我们希望能够在某个特定时间T证明我们知道一些价值x。我们可能不想在时间T实际显示x。相反,我们只想在我们做证据的时候揭示X,这可能比T晚得多(当然,如果我们在T知道的话,T之后我们仍然知道)。然而,一旦我们提出了证据,我们希望证据是永久的。

从第1章回顾,我们可以使用哈希函数来提交数据。我们可以将哈希H(x发布到区块链,而不是发布我们想要证明我们知道的数据x。哈希函数的属性保证我们以后找不到具有相同值的一些不同的值y,y≠x使得H(x)=H(y)。我们还依赖于x的哈希不会显示关于x的任何信息的便利属性,只要从具有高最小熵的分布中选择x,即它是足够不可预测的。如果x没有这个属性,那么我们可以选择具有高最小熵的随机数r,并使用H(r | x)作为承诺,如我们在第1章中所看到的。

主要思想是,我们可以在时间T发布哈希H(r | x),然后在稍后我们可以显示r和x的某个时间点。任何人都可以看看只有附录的日志,并且相信我们在发布H(r | x)时必须知道x,因为没有其他可行的方式来生成数据。

时间戳的应用

我们可以用这种安全的时间戳来做什么?一个可能的用途是证明一些想法的先验知识。假设我们想证明,我们申请专利的发明实际上早在我们的头脑中。我们可以在我们第一次想到这项发明的时候,通过发布设计文档或原理图的哈希来做到这一点——而不向任何人透露这个想法是什么。后来,当我们提交专利时,或者当我们公布这个想法时,我们可以发布原始的文件和信息,任何人都可以及时回顾过去,并确认我们在公布承诺时,我们早就知道了。

我们也可以证明有人已经收到了我们发送给他们的信息。假设Alice雇佣Bob执行一个编程工作;他们的合同要求鲍伯在特定的时间向爱丽丝提交他的工作。双方都想确保,如果稍后有争议,鲍伯是否提交了工作,或者代码是否按规范执行,他们有证据证明提交的内容和时间。为了确保这一点,他们可以相互同意发布Bob提交的双方签署的工作的哈希。如果任何一方当事人对所提交的或什么时候提交的说谎,另一方可以通过揭示哈希的输入来证明他们是错误的(比如说,在仲裁法庭)。

许多其他有趣的事情可以从安全的时间戳来构建。甚至还有一个使用哈希函数和仅追加日志的整个公钥签名方案(称为盖伊·福克斯签名方案)。它不需要通常用于公钥签名的任何重型密码术。

攻击证据——“千里眼”

有一件事情我们无法单独使用安全的时间戳——尽管如果我们能够将是非常好的——证明透视,预测未来的能力。这个想法是发表对即将发生的事件(例如体育赛事或选举的结果)的描述的承诺,然后再透露该信息以证明我们提前预测了事件的发生。但这有用吗?

2014年底,在世界杯决赛中,有人用这种方式“证明”,世界杯运动组织的国际足联已经腐败。比赛结束后,一个Twitter帐号受到了极大的关注,印在在比赛期间推送(tweet)了几个事件的发生,比赛开始之前甚至就有了时间戳。例如,它正确地推送了德国将赢得额外的时间,并且马里奥·戈茨将得分。这似乎证明这个Twitter账户的所有者可以告诉未来,或者说这个匹配是被绑定的。但事实上,这个帐号在比赛开始之前已经推出了每一个可能的结果。对于参与比赛的每个玩家,都有一个推送(tweet)推测,预测他会得分;每个可能的比赛的最终得分都有一个推送(tweet);(见图9.1)。 在比赛结束之前,所有的虚假预测都被删除,让Twitter账户只有真正的“预测”。

可以对任何安全的时间戳系统执行相同的基本攻击。你只需承诺各种可能的结果,然后只是揭示那些证明是真实的承诺。这意味着如果你确实有能力预测未来并想要证明这一点,那么你必须证明你是对某个具体的预测进行时间戳,而不是多次预测。如果你正在发布基于哈希的承诺,这很难做到。这在比特币尤其如此,因为我们的安全时间戳系统并没有将承诺与任何个人的公共身份相联系。如果你不透露他们,很容易发布大量的承诺,而你从未透露的承诺不容易被追溯到你身上。

图9.1:一个Twitter帐户,试图“证明”2014年FIFA男子世界杯决赛被“预测”比赛的结果。第一,第三和第四个推文最终都是真实的,其余的在比赛后被删除。

安全时间戳的老式方式

这是一个简单的低科技方式做安全时间戳的方式:通过购买广告,在报纸或其他被公众广泛认可的其他媒体上发布数据的哈希。图书馆和网路上都保存有旧报纸的档案。这种方法提供了一个高度的保证,你知道报纸发布当天的数据。稍后,当你想披露你所提交的数据时,你甚至可以在同一份报纸上刊登第二个广告来发布数据。

图9.2:在日报中而不是在比特币区块链上发布哈希的时间戳服务(GuardTime)。公司的客户可以支付包含在时间戳中的数据。回顾一下第1章,我们可以使用Merkle树将多个数据片段封装在单个哈希中,并且仍然有效地证明这些数据片段中的任何一个都包含在哈希中。

比特币中的安全时间戳

如果我们想使用比特币而不是报纸进行时间戳,我们应该在哪里放置哈希承诺?交易中某处?还是直接在一个区块中?

最简单的解决方案(人们提出的第一个解决方案)只需将其发送到数据的哈希,而不是将钱发送到公钥的哈希。这种“燃烧”的硬币,也就是说,让他们不可思议,因此永远地失去了,因为你不知道该地址对应的私钥。为了降低成本,您需要发送一个非常小的数量,例如一个satoshi(Bitcoin中最小可能的交易价值)。

虽然这种方法非常简单,但是需要烧钱是一个缺点(虽然与发生的交易费相比,燃烧的金额可能是微不足道的)。一个更大的问题是比特币矿工无法知道交易的输出是不可预测的,所以他们必须永远追踪它。出于这个原因,社区对此方法感到皱眉。

一个更为复杂的方法叫做CommitCoin,可以将你的数据编码成私钥。回想一下,在第1章中,我们说:“使用ECDSA,一个很好的随机来源是至关重要的,因为一个坏的随机源可能会泄露你的密钥。直观地说,如果你在生成密钥时使用不良随机,则生成的密钥可能不会安全。但是,这就是ECDSA的一个奇怪之处,即使你在签名时使用不良随机,使用完美的密钥,这也会泄露你的私钥。

CommitCoin利用此属性。

我们生成一个新的私钥,对我们的承诺进行编码,并得到相应的公钥。然后我们发送一个小的交易(例如,2000satoshi)到该地址,之后将他们以每个1000satoshi的两个块发回。至关重要的是,当发回它时,我们使用相同的随机性两次签署交易。这允许任何查看块链的人使用两个签名来计算包含承诺的私钥。

相比于在公钥中编码你的承诺,该CommitCoin避免了“燃烧”硬币和矿工永远追踪无法预料的输出需要。但是,这是相当复杂的。

不可预测的输出

2014年的一个时期,比特币时间戳的首选方法是使用OP_RETURN交易,这样可以产生一个可以证明的“不可预测”的输出。OP_RETURN指令立即返回错误,以使此脚本无法成功运行,并且你所包含的数据将被忽略。正如我们在第3章中所看到的,这可以用作燃烧证明以及编码任意数据。从2015年开始,OP_RETURN允许80字节的数据被推送,这对于哈希函数的输出是足够的(SHA-256的32字节)。

OP_RETURN

图9.3:嵌入数据承诺的可证明的“不可预测”事务输出脚本

这种方法可以避免未使用的事务输出集中的膨胀,因为矿工将精简OP_RETURN输出。这种承诺的成本基本上是一笔交易费用的成本。整个2014年,典型的交易费用不到一分钱。通过使用多重值的单一承诺,可以进一步降低成本。截至2014年底,已经有几个网站服务于此。他们收集不同用户的一系列承诺,并将它们组合成一个大型的Merkle树,发布一个包含Merkle树根的不起眼的输出。这类似于承诺用户希望在当天时间戳所有数据。

非法内容

能够将任意数据写入区块链的一个缺点是人们可能会滥用该功能。在大多数国家,拥有和/或分发某些内容,特别是儿童色情内容是非法的,处罚可能很严重。 版权法也限制了某些内容的分发。

可以肯定的是,有几个人曾试图这样做,以“悲伤”(即骚扰或搅扰)比特币社区。例如,有报道指出在比特币区块链中发表的色情链接。这些恶意破坏者的目标是将区块链下载到硬盘驱动器上并运行一个完整的节点变得危险,因为这样做可能意味着储存和发送谁拥有或传播的资料是非法的。

没有好的方法来阻止人们将任意数据写入比特币区块链。一个可能的对策是仅接受付费脚本哈希交易。这会使得写入任意数据产生一点点费用,但仍然不会完全阻止它。

幸运的是,法律不是算法。尝试以技术手段“劈”法来产生意想不到的或意想不到的结果是诱人的,但这不容易。法律旨在由人类解释并纳入诸如意图等因素。例如,美国法典第2252条是美国联邦法律中有关儿童色情制品的拥有、分发和接收的一部分,在描述禁止活动(强调是我们的)时使用“明知拥有,或故意进入意图”的措词。

还值得注意的是,由于我们上面讨论的大小限制,诸如图像(除了可能是微小的数据)之外的数据不能直接写入比特币区块链。他们将不得不被外部托管,只有链接被写入区块链,或者在多个事务中以繁琐的方式进行编码。最后,大多数Bitcoin客户端都无法解码和查看写入交易的数据,更不用说在多个交易中编码的数据。

重叠货币

积极的一面是,由于我们可以将任何我们想要的数据写入比特币,我们还可以在比特币之上建立一个全新的货币体系,而不需要开发新的共识机制。我们可以简单地使用Bitcoin作为日后存在的日记,并将我们新的货币系统所需的所有数据直接写入比特币块链。 我们称这种方法为“重叠货币”。比特币用作底层基板,重叠货币的数据使用不可预计的交易输出写入比特币块链。

当然,比特币矿工们实际上不会验证你正在写入区块链的内容,因为他们不知道(也不在乎!)你写的数据是否符合新货币的规则。任何人都可以写入任何愿意支付Bitcoin交易费用的东西。相反,你必须开发更复杂的逻辑来验证新货币的交易,并且此逻辑必须驻留在参与发送或接收该货币的每个最终用户客户端中。

例如,在重叠货币中,矿工们不再能够拒绝双重支出。相反,重叠货币的每个用户都必须查看在区块链中写入内容的历史。如果重叠交易尝试花费已经花费的重叠硬币,那么第二个交易应该被忽略。因此,没有一个轻量级的SPV客户端可以覆盖货币。

对手(Counterparty)是一个突出的叠加货币。

所有交易对手交易都写入比特币块链。 在2014年,所有Bitcoin交易的0.5%至1%之间携带交易对手数据。它还支持比比特币更大更丰富的功能集。这个想法是,由于交易对手不必制定新的共识算法,而且因为比特币矿工不需要了解交易对手规则,他们可以专注于开发有趣的功能,如智能合约,用户定义的货币,还有更多。由于Bitcoin矿工不需要了解它或者批准它,因此Counterparty API可以比Bitcoin API大得多。

开发新货币而不必创建新的共识制度的潜力是非常有吸引力的。你甚至不需要鼓励新的矿工加入你的系统,你可以添加新功能,而无需更改Bitcoin。然而,这样的系统仍然依赖于比特币——例如,它们受到与其他比特币交易相同的费用要求。由于Bitcoin节点不为您过滤这些事务,因此,重叠货币上的节点可能需要处理大量数据,因此此方法效率也不高。

9.2比特币作为“智能财产”

现在我们将讨论使用比特币来表示Bitcoin系统中除货币单位之外的其他东西。

回顾第6章,您可以随时随地追踪Bitcoin系统中的价值所有权,只需按照交易图表即可。牢记告诫:没有这样的东西作为一个“比特币”本身——只是未使用的交易输出,我们称之为硬币。每一个比特币的历史,任何人都可以在区块链上查看。一枚硬币的历史一直追溯到一个或多个硬币交易,直至硬币最初铸造的历史。正如我们前面所说的那样,这对匿名性是不利的,因为你可以经常跟踪这种硬币的所有权。

可替代性

这也导致一个有趣的观察:比特币不可替代。在经济学上,一个可替代的好处就是所有的单位都是同等的,可以互相替代的。例如,黄金是可替代的,因为一盎司(纯)黄金可以代替任何其他盎司的黄金。但是,比特币并不总是这样,因为每一个比特币都是独一无二的,具有不同的历史。

在许多情况下,这个历史可能并不重要,但是如果历史对要交易的人有意义,可能意味着你的1.0比特币与其1.0比特币不一样。也许他们不会愿意与你的交换,因为他们更喜欢他们的硬币的历史。例如,就像钱币收藏家重视旧硬币一样,有一天比特币收藏家可能对比特币历史上发源地的硬币或比特币历史上的其他早期区块的硬币产生特殊价值。

智能财产

这种不可替代的财产是否可以使用? 我们已经看到为什么对于隐私来说可能是坏的,因为对用户进行去匿名化的可能性。在本节中,我们将看看为什么对于比特币的历史来说也是有用的。

让我们来想一想,给普通离线实体货币的历史带来什么意义。假设我们要添加元数据到离线货币。其实有些人已经这样做了。例如,他们喜欢在纸币上写下各种信息,通常是笑话或政治抗议。 这通常不会影响钞票的价值,这只是一个新奇的东西。

但是,如果我们可以将身份验证的元数据附加到我们的货币——元数据不容易被重复?实现此目的的一种方法是将加密签名包含在我们编写的元数据中,并将该元数据与钞票的序列号相结合。

图9.4:在普通纸币中添加有用的元数据的例子

这可以用于什么?一支棒球队想用美钞作为票据。这样一来,他们就不用再麻烦为自己印制票了,也确保没有人打印盗版票。纽约洋基队可以简单地断言,具有特定序列号的美元账单现在代表特定游戏的票和特定座位。这些美元钞票将以与纸张正常分发相同的方式进行分发,如通过网上购票时寄给球迷。持有该笔记的人有权进入体育场,坐在指定的座位上,观看比赛,没有其他问题。钞票本身就是票!

为了辨别真伪,扬基人可以使用数字签名。

他们会签署一个消息,其中包含具体的游戏日期,座位号码和帐单的序列号,并在帐单上印上消息和签名权。2D条形码将是该数据的一种方便的呈现形式(参见图9.4)。或者,体育场可以维护一个数据库,列出每个游戏的序列号和相应的座位号码。当你尝试进门时,他们可以检查数据库中的此信息。这样就避免了对纸币的印花。

这会给我们带来什么?现在货币可以代表很多东西。除了体育门票的例子外,还有许多其他的应用。我们继承了钞票已经拥有的防伪属性。政府非常努力,以确保难以复制钞票!此外,保持钞票的基本货币价值。球迷兑换票之后,该钞票完全可用作正常货币。如果每个人都想要在货币上对元数据进行物理印记,这可能是一个问题,但是如果我们使用数据库方法,这个问题就会消失。

当然,这种新的元数据的所有有用的意义与我们对签署它的发行人的信任一样好。有人必须知道一个特定的密钥用于签署有效的洋基票——或下载洋基队的数据库,以便将其价值认定为门票。对任何人来说,它只是一个美元钞票。但是没关系。这实际上是一个理想的财产,因为一旦票已经达到目的,它可以作为一个普通的美元账单回到流通中。

彩色硬币。我们可以在比特币之上数字化吗? 我们希望保持Bitcoin的良好功能,例如在线交易,快速交易结算和不依赖银行的能力

图9.5:彩色硬币。交易图显示发行演示和按颜色传播

主要的想法是用一种“颜色”来印上一些比特币,即使硬币换手,也跟踪该彩印,就像我们能够将元数据印在实体货币上一样。印有颜色的比特币仍然作为有效的比特币,但另外还携带此元数据。

为了实现这一点,在一个称为“发布”交易的事务中,我们将插入一些额外的元数据,它们声明某些具有特定颜色的输出。一个例子如图9.5所示。 在一个交易中,我们在一个交易输出中发出五个“紫色”比特币,而另一个输出继续是正常的无色比特币。其他的,也许有不同的签名密钥,在不同的事务中发出“绿色”比特币。我们称这些颜色为直观,但实际上颜色只是位串。唯一重要的属性是相同颜色和相同价值的硬币是相当的。

现在我们有与他们相关的不同颜色的比特币。

我们仍然可以使用比特币交易来做所有正常的事情。我们可以有另一个比特币交易,需要几个输入:一些绿色硬币,一些紫色的硬币,一些无色的硬币,并洗牌。它可以有一些输出来维持颜色。可能需要在交易中包含一些元数据,以确定哪个颜色转到哪个交易输出。我们可以将四个绿色硬币的交易输出分成两个较小的绿色硬币。后来我们可以将多个绿色硬币组合成一个大的绿色硬币。

OpenAssets

截至2015年,在比特币实施这一最受欢迎的提议称为OpenAssets。资产是使用特殊的付款脚本哈希地址发出的。如果要发彩色硬币,首先要选择一个P2SH地址。任何通过该地址传送的硬币,如果没有颜色,都会留下由该地址指定的颜色。为了让这有意义,你必须在某处宣传该地址。有各种各样的交易所,跟踪哪些地址将哪些颜色赋予硬币。由于硬币可以连续通过多个彩色发行地址,所以他们可以有多种颜色,这很好。

每次你有一个涉及彩色硬币的交易,你就必须插入一个特殊的标记输出。这是一个显而易见的输出,类似于我们用于数据承诺的时间戳。嵌入在标记输出中的元数据编码关于如何在不同输出之间划分输入颜色值的细节。

正如我们前面提到的,这是与比特币兼容的。由于不需要改变比特币,矿业界往往不会劝阻或干扰这些计划。它允许任何人声明他们想要的任何颜色,而不必向中央当局要求发行彩色硬币的权利。如果有其他人理解并遵守你发布的颜色的含义,你的彩色硬币可能会获得超出其标称比特币值的附加价值。例如,如果洋基队发行彩色硬币,这些硬币将能够作为一个游戏的门票功能,只要体育场运营商了解其意义,并以彩色硬币门票为依据。

这个方案的一个缺点是我们必须把不可思议的标记输出放在每个交易中。这增加了一些开销,因为每次我们要交易一枚有色硬币时,都必须放弃一些钱。第二个缺点是矿工不检查彩色硬币的有效性,只有底层的比特币。要验证您收到的彩色硬币是否有效,您必须检查硬币参与的整个交易记录,或者信任第三方进行检查。特别是,您无法像常规的Bitcoin一样使用简易客户端。这使得在计算上能力有限的设备(如手机)上使用彩色硬币变得更加困难。

使用彩色硬币和智能财产

股份在一家公司。一个经常被引用的智能财产的动机是股份在一家公司。一个希望发行彩色硬币作为股票的公司将公开其发行地址,并且用这个地址着色的比特币作为股票。一个satoshi可能代表公司的一个份额。股东可以在区块链上交易股票,而不需要证券交易所那样的集中式中介。当然,股东必须相信公司会兑现股份。例如,公司可能会承诺按照每股按比例分配股息,或者给予股东在公司决策中的投票权。与传统股票一样,这些承诺是依法执行的。截至2015年,彩色硬币或其他基于区块链的资产在任何司法管辖区均未获得法律承认。

物理特性

另一个潜在的用途是彩色硬币可能代表一些现实世界的财产。例如,彩色硬币可以与房屋或汽车相关联。也许你有一辆先进的汽车,实际上追踪了区块链上一个特定的彩色硬币,并为任何拥有该彩色硬币的人自动启动和驱动。那么你可以出售你的汽车,或者至少转让它的控制权,只需要在区块链中进行一次交易。我们将在第11章中看到,这如何在技术上得到实施,以及实现这一目标的社会和法律障碍。但彩色硬币和智能财产的梦想是,任何现实世界的财产都可以在比特币的世界中表现出来,并且像比特币一样容易地转移或交易。

域名

作为最后一个例子,考虑使用彩色硬币来执行现有域名系统的一些功能:跟踪互联网域名的所有权、转让以及域名映射到IP地址。域名市场有许多有趣的属性:有一个潜在的无限数量的名字,这些名称根据其可记忆性和其他因素具有广泛不同的值,同名的用法可能对不同的人有很大的不同。可以使用彩色硬币来处理域名注册和我们列出的功能。然而,支持这个应用程序也是一个名为Namecoin的突出altcoin的焦点,我们将在下一章中详细介绍。 每种方法都有好处:使用彩色硬币,你可以获得Bitcoin区块链的安全性,而使用altcoin,更容易实现域名所有权,传输和IP地址映射所需的复杂逻辑。

9.3安全的比特币多方彩票

现在我们将讨论在比特币中举办一个“掷币”游戏。再次,我们将从我们描述的试图构建的离线版本开始。

Alice和Bob想赌5美元

他们两人都同意提前下注,确定获胜者的方法。Bob会在空中翻转一枚硬币,而当它转动时,爱丽丝喊出“头”或“尾”。当硬币落地时,他们都立即清楚知道谁赢得了赌注,他们都保证结果是随机的,他们都不能影响结果。

这个仪式的步骤顺序以及硬币翻转的物理过程在说服双方比赛是公平的方面起着至关重要的作用。这个方案的一个缺点是双方必须同时出现在同一个地方。同时,双方都必须相信,不管谁输了都会付清。在网络世界里,我们希望能有一个“公平”的彩票,但也解决了确保输家付费的问题。

起初,这似乎是一个相当特殊和有限的应用程序,需要详细研究。有趣的是,基于比特币的博彩服务,例如Satoshi Dice——依赖可信赖的方式,与我们想要设计的系统不同——已经被证明是非常受欢迎的,有时代表网络上所有Bitcoin交易的很大一部分。

然而,我们想要研究加密硬币翻转的真正原因是,事实证明,如果我们可以为其设计安全协议,我们可以使用这些技术来构建许多其他有趣和有用的协议。密码学家研究“安全多方计算”,其中两个或多个相互不信任的各方都具有一些数据并且想要计算取决于其所有数据的结果,但是不将数据彼此泄露。想象一个密封投标拍卖,但没有可信的拍卖师。通常,这些计算需要随机化,比如说打破关系。最后,我们可能希望通过不可撤销的方式来确定货币结果。也许我们想确保拍卖中的中标者支付卖方的费用;也许我们甚至想确保拍卖的卖家(智能)财产被自动转移给中标者。或者,也许我们想惩罚偏离议定书的团体。

换句话说,一个安全的多方彩票是一个简单的设置,研究一个非常强大的范例:相互不信任的参与者与敏感投入联合执行一个程序,不仅有能力操纵位,而且还有金钱。

硬币在线翻转

第一个挑战是用一些在线等价物代替“硬币翻转”机制。假设我们现在有三方,Alice,Bob和Carol,他们都想以同样的概率选择1号,2号或3号。这是一个这样协议的尝试。他们每个人选择一个大的随机数——Alice选择x,Bob y和Carol Z。他们彼此告诉他们的数字,他们将输出计算为(x + y + z)%3。

如果所有人都独立选择了随机数,那么这个确实会奏效。但请记住,我们在互联网上这样做,没有办法坚持要“同时”发送他们的号码。Alice可能会等到她听到Bob和Carol的电话号码才广播。如果她这样做,你可以看到,无论她想要什么,她都能做出最终的输出。我们不能设计协议来说服每一方都没有任何其他方欺骗。

为了解决这个问题,我们可以再次使用哈希承诺。首先,他们每个人都挑选一个大的随机数,并发布一个这个数字的哈希值。其他人然后检查显示的数字哈希到第一步中发布的值,并用三个随机数来计算最终结果,如图9.6所示。

第一轮:

每一个方选择一个大的随机字符串——Alice挑选x,Bob选择y,Carol选择z。

各方分别公布H(x),H(y),H(z)。

每一方检查H(x),H(y),H(z)都是不同的值(否则中止协议)。

第二轮:

三方揭示了他们的值x,y和z。

各方检查显示的值是否符合第一轮发布的哈希。

结果是(x + y +

z)%3。

图9.6:使用哈希承诺来实现公平的随机数发生器。该协议可以容易地扩展到支持任何数量的一方。

这个协议的工作原理是双重的

首先,由于哈希输入x,y和z是大的随机数,所以没有一方可以在第一轮之后预测其他人的输入。第二,如果(说)爱丽丝根据协议指定她随机选择的输入,她可以确定最终输出是随机的,不管Bob和Carol是否随机选择输入。

公平

如果一些团体不能透露他们的承诺会怎么样?在协议的第二轮中,假设Carol等待Alice和Bob揭露他们的秘密。Carol在揭露她之前,意识到如果她这样做,她就会失败。所以她可能会拒绝发布她的随机数字——她可以声称已经忘记了它,或者假装离线。Alice和Bob可能会怀疑,但他们没有好的追索权。

我们想要的是一个方案,任何作出承诺的人都必须在某个时间限制内披露它。在密码学中,这个属性被称为公平。比特币为我们提供了一个很好的机制。

假设爱丽丝想做一个定时承诺,鲍勃是唯一关心它的人。首先,Alice以比特币交易输出脚本的形式提供了一个债券,指定它可以以两种方式之一使用。一种方法是使用Alice和Bob签署的交易。另一种花费它的方式是用爱丽丝的签名,但只有当她还透露她的随机数时。如果Alice的随机字符串为x,则scriptPubkey实际上包含值H(x)。

接下来,Alice和Bob签署了一笔支付给Bob的交易(这是可以花费的两种方式之一)。为什么Alice同意这个?该事务携带一个nLockTime值,保证Bob在时间t之前不能声明债券。由于Alice计划在此之前披露其承诺的价值并收回债券,所以她签署此交易是安全的。

现在,如果Alice离开而没有透露她的价值,Bob可以在时间t索取债券。这并不强迫爱丽丝透露她的承诺,但她将失去她所承担的整个债券。所以保证她会透露她的秘密价值取决于她愿意在债券中投入多少金额。

ScriptPubkey:

OP_IF

OP_CHECKSIGVERIFY OP_CHECKSIG

OP_ELSE

OP_CHECKSIGVERIFY OP_HASH OP_EQUAL

OP_ENDIF

scriptSig for Case1 :

0

scriptSig for Case2 :

x 1

图9.7:交易输出scriptPubkey和scriptSigs用于定时哈希承诺。

我们如何使用这个定时哈希承诺来实施我们的安全彩票?们将具有与以前完全相同的结构,除了使用简单的哈希承诺,我们将使用这些定时承诺。在截止日期之前不披露其随机值的人将丧失用于补偿其他两名玩家的保证金。揭示随机值现在只是通过提供正确的秘密输入x来恢复债券的问题。

这个彩票计划可以在比特币上面实现。

但是这有点复杂,而且定时哈希承诺需要多个非标准的交易。当彩票中有n个派对时,需要进行n的平方个承诺,因为每一方都需要为对方提供债券。玩家总共必须托管更多的钱,甚至比投注更多。但对于少数参与者来说是合理的,并且有一些变体具有更好的效率。最重要的是,它作为一个存在性证明,似乎不可能的协议,例如在因特网上翻转虚拟硬币,并且在比特币世界中可以惩罚中止协议的一方。

最近发表
2024“华文校园”全国大学生语文能力大赛

参赛须知

1.本大赛分为初赛和决赛两个阶段

2. 初赛提供练习题库(正式考试内容抽取于题库)考察题型分为判断题,单选题,考察范围包括但不限于读音、错别字、名句默写,病句、关联词、修辞等

【题库预计两周内上线 请各位参赛者耐心等待】

3. 初赛第一场考试时间:2024年6月15日【报名后四场任选一场参与即可】

 


      为提高大学生的语文综合素养、养成良好的语文学习习惯并培养实际的语文应用能力,现由中国语文报刊协会校园文化分会为主办单位举办“2024‘华文校园’全国大学生语文能力大赛”,旨在通过赛事激发学生对语文学习的兴趣和热爱,促进语文教育的全面提升和发展,培养优秀的语文人才。 

 

一、主办单位

中国语文报刊协会校园文化分会国家一级协会下设分会

官方网站:http://xywh.ihwrm.com/index/page/read.html?id=22

 

二、参赛对象

本次赛事面向全国在校大学生(包括研究生、本科生、高职高专学生)均可报名参赛,不限专业。同时欢迎对本次赛事感兴趣的社会各界人士积极参与。

 

三、参赛形式

本次大赛共分为初赛、决赛两个阶段。具体内容安排如下:

 

1.初赛:语言文字运用能力


      考察题型分为判断题,单选题。考察范围包括但不限于读音、错别字、名句默写,病句、关联词、修辞等,从多方面考察参赛者的语言文化基础。根据大赛上线时间,将提供练习题库供各位参赛者进行练习。

 

2.决赛:古诗词赏析


      大赛提供相关古诗词篇章,参赛者从中任选一篇进行多角度赏析(包括但不限于作者表达的情感态度、表达技巧以及思想感情等),字数为400-500字,最多不超过600字,作答时间为90分钟。

 

四、大赛日程

【开启报名】2024“华文校园”全国大学生语文能力大赛

【开启报名】2024“华文校园”全国大学生语文能力大赛

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP