Commit-Reveal方案:区块链世界的安全守护者

 2023-11-23 21:47:34发布 2023-11-23 21:47:43更新

区块链技术带来了可实现共识、安全和隐私的创新方法,其中一项创新方法就是commit-reveal方案,一种增强区块链用户隐私和安全性的加密协议。

什么是区块链

本质而言,区块链就像一个有变化的数字分类账,与传统分类账不同,它是去中心化的,这意味着没有任何一个实体能控制整个区块链,并且任何人都可以访问它,他们是网络的组成部分。

区块链中的每个“块”都带有一个交易列表,一个区块充满交易后,就会形成另一个新区块,从而创建一个连接的区块“链”,因此得名“区块链”。

区块链的特点之一是信任和透明度,网络中的任何人都能访问并查看区块链上的每笔交易,这种开放性可阻止不诚实行为并增强社区之间的信任。

而区块链实现这种透明度的原因,在于其独特的共识机制和密码学原理。

Commit-Reveal方案是什么

Commit-Reveal 方案,这就像一场魔术表演,魔术师(用户)首先表示会进行某种表演,而不向观众(网络)透露,然后在稍后阶段揭晓该表演。

用区块链术语来说,这是一个两步过程:“提交(commit)阶段”和“揭示(reveal)阶段”。

Commit-Reveal方案

Commit-Reveal方案步骤

在提交阶段,用户将哈希后的信息提交到区块链。这个哈希版本就像原始信息的乱序版本,隐藏了实际内容。哈希函数的神奇之处在于,它是单向的,你无法将哈希值解密回其原始形式,从而暂时保密信息。

然后是揭示阶段,用户揭示原始信息,然后由网络再次对其进行哈希验证,并将其与初始提交的哈希进行比较(如果匹配),那么网络证实了这一点,魔术完成了。

通过 Commit-Reveal 方案,区块链网络可在拍卖、投票系统等应用程序中实现新的参与水平。

提交(Commit)阶段

在此阶段,用户“提交”某个值,但他们的方式是对实际值保密。

假设你心中有一个秘密号码,但你没有告诉每个人它是什么,而是将其放在一个上锁的盒子里并向每个人展示。他们知道你有一个号码,但他们不知道它是什么。这就是区块链中“提交”的意义所在。

在区块链领域中,我们使用“哈希函数”锁定我们的秘密值,哈希函数就像一个神奇的搅拌机。你输入你的秘密值,它就会输出它的乱序版本,称为哈希值。

这个哈希值是唯一的,即使原始值发生微小变化也会产生截然不同的哈希值。,而且这是一个单向过程,即一旦值被哈希,就没有简单的方法可以从哈希中找出原始值。

因此,当用户提交他们的价值时,他们实际上是在与区块链上的每个人分享他们价值的哈希值。

揭示(Reveal)

揭示(commit)阶段是最终向区块链上的所有参与者揭示所提出的价值的阶段。

在上锁的盒子的比喻中,此时就是打开盒子的时刻,每个人都能看到你隐藏的号码。在区块链世界中,揭示是一个简单但至关重要的过程,它为各种应用程序提供了透明度和公平性。

当用户透露其提交的值时,网络可对揭示的值进行哈希并将其与提交阶段共享的原始哈希进行比较,以此来轻松验证其真实性。

如果哈希值匹配,则确认用户没有中途改变想法。这个简单而强大的验证过程有助于维护一个每个人都遵守规则的信任环境。这就像比赛中有裁判一样,确保所有玩家都遵守商定的规则。

在智能合约中实现Commit-Reveal

智能合约就像传统合约一样,但它是数字化且自动执行的,该工具采用了 Commit-Reveal 的理论思想,并将其应用于数字领域。

通过智能合约实施 Commit-Reveal 方案就如编排舞蹈一样,每一步都遵循设定的节奏。

Commit-Reveal方案编排过程

创建合约

首先在以太坊等区块链平台上创建智能合约,该合约将包含编码在其中的 Commit-Reveal 方案的参与规则。

提交函数

在智能合约中设计提交函数。该函数将允许用户向合约提交其哈希值(提交阶段)。

存储提交的值

当用户提交他们的值时,智能合约会将这些哈希值安全地存储在区块链上,等待揭示阶段。

揭示函数

接下来,在智能合约中创建一个揭示函数。届时,此函数就会让用户揭示自己原来提交的值。

验证和确认

揭示后,智能合约将对揭示的值进行哈希并将其与最初提交的哈希进行比较,以此来验证揭示的值。如果一切匹配,则揭示内容得到确认。

最终确定

一旦收集并验证了所有信息,智能合约就可以自动执行后续步骤,无论是统计选票、确定拍卖获胜者,还是任何其他特定于应用程序的操作。

审核和测试

在部署之前,请全面测试智能合约,以确保其按预期运行并免受潜在攻击。通过这些步骤,智能合约精心安排了 Commit-Reveal 过程,确保了公平透明的过程。

代码示例

Commit-Reveal方案代码示例

Commit-Reveal方案代码示例

代码解释:

  • 创建合约:CommitReveal 合约已创建
  • 提交函数:提交函数接受哈希值 (_hash) 并将其存储在发送者的地址中
  • 存储提交的值:哈希值存储在称为提交的映射中
  • 揭示函数:揭示函数允许用户提交其原始值 (_value) 和盐 (_salt)。它检查这些哈希值是否与最初提交的哈希值相匹配
  • 验证和确认:这是通过比较哈希值在揭示函数中完成的
  • 最终确定:tallyVotes 函数简化演示了如何统计选票过程,它迭代所有可能的地址(对于大型数据集来说不切实际)并对显示的值求和
  • 审计和测试:审计函数是一个非常简单地演示说明如何检查合约状态

需要注意的是,该示例非常简单,缺乏生产系统所需的许多实际考虑因素,例如防止溢出、优化 Gas 使用、管理大型数据集以及添加适当的访问控制等,不是可用于实际生产的解决方案。

区块链中Commit-Reveal方案的用例

通过 Commit-Reveal 方案,区块链技术能够让拍卖变得公平、投票系统诚实可信,以及让游戏场景更具创意等。

提升拍卖平台

在线拍卖是 Commit-Reveal 方案的典型应用之一。

为了防止其他人利用投标金额作为杠杆,参与者可以在提交阶段秘密地提交投标。当投标期结束时,揭示阶段开始,允许参与者披露其投标。然后,确定最高有效出价,确保拍卖过程公平且有竞争力。

创建公平投票系统

投票系统可从 Commit-Reveal 方案获得多重优势,特别是在要求选民匿名和诚实的情况下更是如此。

在这种设置中,在选举或任何投票活动期间,选民在提交(commit)阶段提交其选择,而不向其他人透露,从而确保投票的诚实性和保密性。

投票期结束后,揭示(reveal)阶段就会开始,此时选民可公开其选票。然后,系统对这些结果进行统计以确定结果,这实现了公平和透明的投票过程。

密封投标合同

在密封投标合同中,投标人使用Commit-Reveal方案秘密提交其投标。这一过程确保任何投标人都不知道其他投标人的投标金额,从而实现公平竞争。

投标提交(commit)期结束后,进入揭示(reveal)阶段,合同将授予具有最佳报价的合格投标人。

游戏场景

Commit-Reveal 方案在游戏场景中找到了一个有价值的应用,例如数字版的石头剪刀布游戏。玩家在不透露自己想法的情况下做出选择,确保游戏公平。

两名玩家都提交想法后,接下来进入揭示阶段,根据所做的选择确定获胜者。

随机数生成

在区块链环境中,由于区块链协议具有确定性,要生成随机数将不容易。

Commit-Reveal 方案是在以太坊区块链上生成随机数的去中心化替代方案。例如,Randao 是一种 Commit-Reveal RNG 实现,它利用公共数据源并激励参与随机数生成。

减轻抢先交易问题

在区块链环境中,令人担忧的问题之一是抢先交易,恶意行为者可能会从待处理交易的信息中受益。

Commit-Reveal 方案通过最初隐藏交易细节来帮助减轻此类问题,当揭示阶段到来时,恶意行为者对信息采取行动就为时已晚,从而保持交易的诚实性。

低延迟Commit-and-Reveal架构

F3B 等较新的架构已发展到可以减少与传统 Commit-Reveal 方案相关开销的地步。 F3B最大限度地减少写入区块链的数据,提供低延迟的Commit-and-Reveal架构。

这一发展标志着 Commit-Reveal 方案在不断优化和创新,将能更加高效运用到实际应用中。

推荐阅读