VIEW THIS AS

Auto mode follows the Route Engine until you choose a viewpoint.

YOU ARE HERE

ROUTE CHECK

CONNECTED TO

WHAT NEXT

Use the canonical route for this room, or HELP if you are unsure.

区块链上的随机选择:承诺、证明与拒绝公开的影响

Three students in school uniforms work through open books at a classroom table, with textbooks and stationery nearby and study notes on the whiteboard behind them.

English version · 区块链学习导航 · 上一篇

区块链学习 · 延伸文章 BCX003

三名学生在教室桌旁一起阅读书本,身边放有课本和文具。
学习场景配图;不代表照片中的学生正在学习区块链。

可验证随机输出,并不会自动使选择过程公平。有人可能在得知有用信息后选择输入,替换应用输出的名单,拒绝揭示,或丢弃不喜欢的结果。应审查整段决策顺序,而不只是最终证明。

本课检查一个无害的虚构展览排序练习,区分四个问题:输入在相关阶段是否不可预测,输出是否正确验证,是否应用到冻结任务,以及流程是否按既定规则完成。这些问题可能有不同答案。

这里不涉及钱财、有价值奖品、赌博、交易或真实个人身份。例子是使用合成记录的纸面协议审查,不创建合约、不使用付费提供方、不生成密钥,也不发送实时请求。即使数学过程一致,也不能决定参与资格政策在社会层面是否合理。

选择适合你的阅读路线

本篇目录

第1至3节解释信息与权限问题;第4至5节检查双方承诺练习;第6至9节追踪可验证输出如何绑定请求与名单,并处理重复交付和映射。第10至11节建立审查记录,随后是练习和答案。基础数学词汇可参考随机数生成器、熵与统计检验。

返回目录 · 下一节

1. 获得结果之前,先冻结任务

虚构展览有A、B、C三张卡片,任务是选择哪张最先展示,其余卡片保持冻结名单中的相对顺序。这里没有奖品或稀缺权利,只考察选择程序的完整性。

名单V3的顺序为[A, B, C],位置编号为0、1、2。应用在取得选择输出前,冻结V3、其确切内容标识、映射规则和请求身份R7。后来结果必须关联到该请求和该名单。

如果选中位置1,B先展示,最终顺序为[B, A, C]。位置1并不是抽象地要求“选择当前排第二的任何卡片”,而是指确切冻结任务V3的第二项。

即使密码学组件完美,这个区别仍重要。对一个固定输入的正确答案,可能被误用于另一名单。应用必须保留关联,证明不会从不断变化的界面中猜出组织者原本想做什么。

返回目录 · 下一节

2. 记录每阶段谁知道什么、能选择什么

选择前,组织者可以定义合格名单和规则。冻结后,协议不应悄悄保留看到输出再改名单的选项,否则即使不伪造输出,也能人为决定展示结果。

类似地,如果某个区块值已经公开,之后才选择输入的人就不能把它视为不可预测。称它为哈希,并不改变它何时被知晓。关键是各参与者在仍有重要选择权时,能够知道什么。

协议层面,EIP-4399讨论拒绝提出区块等方式对随机性的影响。本课不采用其中数值风险示例,也不将信标值当成无条件应用公平保证;其意义是说明,公开和拒绝公开的选择必须纳入分析。

审查展览流程时,可在笔记中列四项:阶段、可获得信息、允许选择,以及不参与的后果。这样,“是否随机”这个模糊问题,就变成具体决策和依赖检查。

返回目录 · 下一节

3. 分开不可预测性、验证、使用和完成

不可预测性讨论某观察者在指定时点之前、给定前提下能够预见什么,并不表示任何人,包括计算输出的一方,永远不能比其他人先知道结果。

验证检查输出和证明是否满足特定输入及公钥的定义关系;正确使用检查应用是否将结果绑定到预定请求、冻结名单和映射;完成则检查所需参与者或服务是否提供足够信息,使流程结束。

系统可能验证通过却使用错误,也可能保持承诺值一致,却无法完成。已经完成的结果,也可能是某人从多个有效尝试中挑选、丢弃其他结果后留下的一个。

报告中应分开这些结论。“证明有效”是有用证据;“所以没人能影响谁先展示”是更大声明,需要整个过程的额外事实。

返回目录 · 下一节

4. 计算双方承诺练习

先看独立的两卡片演示,卡片为X、Y。参与者P、Q各选一个私有比特。题目假设使用正确域分离和编码、含新鲜秘密随机量的承诺方案,并在给定安全前提下具有隐藏性和绑定性。本课不实现方案,也不公开任何秘密。

双方必须先完成承诺,才能开始揭示。有效揭示应将该参与者先前承诺打开为同一个比特。最终方向比特为双方比特的异或:0保持[X, Y],1得到[Y, X]。

给定运行中,P承诺0,Q承诺1。P先揭示0,Q再揭示1;两次揭示均与先前承诺验证一致。异或结果为1,因此展示顺序为[Y, X]。

在给定前提下,绑定性防止Q看到P揭示后,把自己承诺的比特改成0。隐藏性在揭示前重要,因为另一方不应从承诺获知比特。直接对单个比特做裸哈希并不能提供这种保护,因为观察者可以比较仅有的两种输入。题目要求的秘密随机量与正确构造,是必要前提,不是装饰。

仅仅说出这些性质,并没有证明方案安全。本课假设它们成立,是为了检查即使承诺按设计工作,应用层仍有哪些选择。

返回目录 · 下一节

5. 最后揭示者仍能拒绝完成

保持相同承诺,但Q在得知P的比特后不揭示。Q知道自己的比特,能够算出最终方向。它不能改变已承诺值,却可以阻止这个要求两次揭示的流程按规定完成。

正确记录是“缺少Q揭示,按此规则没有完成的方向结果”。不能悄悄把缺失比特替换为0,那会引入回退规则,并可能使拒绝揭示变成选择不同结果的手段。

预先规定的超时,可以告诉观察者何时标记未完成,却不能强制缺失信息出现。回退、取消或重启政策,需要另外分析谁能触发,以及触发时知道什么。

本题没有提供处罚、恢复机制或额外参与方,因此不能声称保证完成,也不能声称中止运行得到无偏处理。应保留全部未完成尝试;只看完成运行,可能隐藏选择性拒绝揭示的模式。

承诺例子的核心结论是:正确打开的承诺可以确认已揭示输入的一致性,同时仍留下是否公开结果的重要选择。

返回目录 · 下一节

6. 可验证随机函数能证明什么

RFC 9381描述可验证随机函数,包括固定秘密密钥和输入对应确定输出,并可使用对应公钥验证。它于2023年8月作为IRTF信息类RFC发布,不是互联网标准轨道规格。其构造具有明确安全性质和前提。

在独立三卡片练习中,材料提供一个针对公钥K、输入I7、请求R7的正确验证输出。I7是冻结任务精确定义的输入,应用已认证K为指定密钥,并将R7绑定到V3。本课不展示真实密钥或密码学输出。

假设规定映射将这个给定输出转成位置1。这是课堂前提,不是RFC构造的测试向量。预期是B先展示,顺序为[B, A, C]。

仅有证明有效,不能确认K选择公正、I7在有用信息出现前已确定,或提供方总会响应。这些问题需要数学验证步骤之外的证据。

返回目录 · 下一节

7. 有效证明被应用到错误名单

案例A是正确路径:应用检查指定密钥、确切输入与R7关联,使用冻结V3,将结果映射为位置1,记录[B, A, C]。本题明确这些检查成功。

案例B收到同一个有效证明,却使用重排名单V4 = [C, A, B]。位置1现在指A,产生[A, C, B]。密码学证明并没有失效,而是应用把它用于错误的冻结任务上下文。

验收应拒绝将案例B显示选择当成R7/V3结果。“已验证随机性”的标签不能修复名单不匹配。审核者应分别保留证明有效和应用绑定失败两项发现。

案例C收到针对另一输入I8、关联R8的有效证明,却想拿来处理R7,也不符合R7验收。证明可以对其真实声明有效,同时与当前请求无关。

因此,完整证据身份应包含密钥、输入、请求、名单版本和映射规则。如果绿色验证标记没有说明验证了什么,它就隐藏了太多信息。

返回目录 · 下一节

8. 重复交付与任意重抽不同

假设正确R7结果交付两次。按给定应用规则,R7只能从Pending转为Applied一次。第一次有效交付记录结果;匹配重复交付不改变已选顺序,而是记录“已经处理”,不会产生第二次选择。

这与看到R7让B先展示后,再创建R9不同。如果组织者不断请求,直到A先展示,并只公布最后那次,每个单独证明都可能有效,但整体程序进行了选择性报告。

本虚构政策禁止仅因组织者不喜欢结果,就用同一冻结任务的新请求结果替换R7已接受结果。如果确实在任何结果产生前发生失败,也需要预先规定处理政策;本课不编造一种保证公平的政策。

Chainlink VRF v2.5安全指南针对其实现,提出将交付匹配请求标识、冻结相关输入,以及避免任意重新请求的建议。本课仅采用这些有限工程教训,不是服务背书、可用性保证,也不要求购买或充值账户。

返回目录 · 下一节

9. 检查映射,不要以为取模就均匀

以下是独立的小型算术模型。原始样本U被假设均匀分布在0至7这八个整数。如果对U取模3,位置0对应样本0、3、6;位置1对应1、4、7;位置2对应2、5。

计数为3、3、2,因此在模型前提下,三个位置概率为3/8、3/8和2/8。这个操作确定且容易验证,但在三个位置之间并非精确均匀。

一种演示性修正是拒绝6和7,然后将接受的0至5取模3。每个位置都有两个原像;在已接受的条件下,每个位置概率为1/3。计算假设来源确实均匀,并没有证明真实生成器满足这个前提。

若拒绝后再次取样,后续样本如何选择及其独立性,必须提前定义。按固定规则进行拒绝采样,不等于允许组织者在看到卡片结果后丢弃有效映射。连续拒绝也不保证在某个固定有限次数内完成。

这个算术模型不是只有八个值的VRF构造,也不改变前面给定R7映射结果。它是为了展示另一应用层问题:有效密码学证明不会自动保证映射正确。

返回目录 · 下一节

10. 建立分阶段审查记录

请求或揭示前,记录任务身份、冻结有序名单、资格政策、指定密钥或参与者、映射和未完成处理政策。标明哪些事实已有依据,哪些只是拟议安排。

承诺或请求时,记录相关身份,以及输入已经固定的证据。两比特演示中,两个承诺都必须早于第一次揭示;R7任务中,正确名单是V3,而不是后来界面显示的任意版本。

结果出现时,记录证明或揭示检查,以及它们支持的确切声明。缺失响应与失败也应保留,不能只留成功。缺失记录不能假装知道未公开秘密,也不能证明参与者为何拒绝提供。

应用结果时,记录请求关联、名单版本、映射位置、最终顺序,以及请求是否已经处理。如果运行未完成,就明确报告,不悄悄替换新结果。

在链上实现中,存储可见性也重要。Solidity 0.8.30安全指南提醒,private变量不会使区块链信息成为秘密。因此,本题假设隐藏的比特,不能仅因为源代码字段叫private就被当作隐藏。

返回目录 · 下一节

11. 给出范围有限的结论

完整参考结论是:“双方运行中,经验证揭示0和1得到异或1,但第二方拒绝揭示会使该流程未完成。独立给定的已验证R7输出映射到冻结V3的位置1,因此B先展示。将其用于V4或其他请求,不符合应用绑定检查。重复交付不授权重新选择。”

还要注明局限:密码学前提是给定的,没有在本课实现;练习不证明资格政策无偏、密钥选择公正、提供方可用,或生产协议能抵御所有对手。独立取模例子还说明,输出到位置的映射也需审查。

因此,有用报告可能同时包含不同判定:证明有效、任务绑定失败、揭示缺失、在模型分布下映射有偏,或请求已处理。把它们合并成“随机性通过”,会失去最重要的信息。

返回目录 · 下一节

练习与参考答案

  1. 两比特案例中,P揭示0、Q揭示1,方向是什么?异或1,顺序为[Y, X]。
  2. Q拒绝揭示时,审核者可以宣布异或0吗?不能,缺少必要第二次揭示,也没有替代规则。
  3. 有效R7证明映射位置1,却用了V4,谁先展示?它是有效R7/V3结果吗?A先展示,但不符合绑定要求。
  4. 匹配的R7重复交付会产生新选择吗?不会,给定状态规则只应用R7一次。
  5. 均匀0至7直接取模3为何有偏?三个位置原像数量为3、3、2,不相等。
  6. 拒绝6、7是否证明真实生成器安全?不是,它只在给定均匀来源前提下修正示例映射,不证明生成器或完整协议。

写作练习:问清谁在得知结果后仍有重要选择。承诺例子中,最后揭示者能拒绝公开;错误名单例子中,组织者改变任务映射;重抽例子中,组织者决定保留哪次有效尝试。这些路径不同,需要不同控制。

返回目录 · 下一节

常见问题

看起来随机的序列能证明过程公平吗?

单凭序列不能。输入、纳入的尝试或名单映射,可能在有用信息出现后才被选择。应检查流程和保留证据。

没有额外检查,VRF证明就没用吗?

不是,它提供具体且有价值的验证结果。错误在于要求它证明无关应用选择,或保证一定交付。

做了承诺,就必须揭示吗?

在方案前提下,绑定性限制改变已承诺值,但不能物理强制公开。完成和中止处理需要额外设计。

接下来学什么?

数学前置文章解释熵与统计检验;区块链应用方面,应先练习画出信息与权限时间线,再选择机制。真实实现审查仍需与本合成课程分开。

返回目录 · 下一节

来源与延伸阅读

可信解释应说明,每个阶段谁能够知道、选择、替换或拒绝公开什么,以及最终证明究竟留下哪些未解决问题。

返回目录