From Bingo to ADKG
Bingo: ADKG_i ()
零、开始阶段:
- 初始化 prop dealer sigs 集合均为空
- 取任意的秘密值
- 作为dealer调用 BingoShare 分享 f+1 个秘密值
- 对于其他参与者
发来的 BingoShare 请求都进行参与
一、当用户
- 将用户
添加到自己的集合 中 - 如果
集合中有f+1个用户,则 - 向所有人发送 proposal 消息:
二、如果从用户
当集合
中每个用户k都作为dealer完成 BingoShare 时: 向参与者
发送signature消息:
三、如果从其他某个参与者
如果自己的 prop 集合不为空 并且使用参与者
验证这条 sig 消息正确,则: 将参与者
和他的签名信息添加到自己收集的签名集合 中 ==抗量子生成协议== 如果收集到了其他 f+1 个人的签名,则:
调用
, 并且调用 checkValidity 校验有效性
四、当VABA终止并输出结果
当集合
中每个用户k都作为dealer完成 BingoShare 时: 调用
五、当BingoSumExpAndRec终止并输出结果
- 输出公钥
并终止
总结:
一旦某个参与方完成了至少 f+1 个消息发放者们的 BingoShare ,这个参与方就会要求另外 f+1 个参与方通过 proposal 消息验证这些 BingoShare 确实完成了。在完成所有这些消息发放者们的 BingoShare 后,各方在f + 1消息发放者们的集合上签字回复。
然后所有的参与者都会在一组有 f+1 个消息发放者们的集合上、和 f +1 个签字集合上达成一致,然后调用VABA。
上述过程正常情况下意味着至少有f+1方为消息发放者们提供了签名,那么至少有一个没有问题的参与方提供了签名。因此,这个没有错误的参与方完成了BingoShare,并且正常终止,每个没有错误的参与方最终也会这样做。各方然后等待 f+1 个消息发放者们的 BingoShare 完成。然后参与者 i 可以调用 BingoSumExpAndReci 输出pk和ski。
Bingo: VABA Leader Election()
注:当前操作用户始终是用户
零、开始阶段:
- 用户
初始化各集合为空集 - 用户
为每个其他参与方随机抽样一个秘密 - 作为 dealer 分三次调用 BingoShare 分享上述n个秘密 ==(为什么是3次,不懂?)==
- 对于其他参与者
发来的三次 BingoShare 请求都进行参与
一、如果完成了其他某个参与者
- 将参与者
加入 集合中 - 如果
集合中有f+1个参与方,则 - 向所有人发送attach消息:
二、如果从其他某个参与者
如果收到的
集合是自己的 集合的子集,则 向参与者
发送signature消息:
三、如果从其他某个参与者
如果自己的 attached 集合不为空 并且使用参与者
验证这条sig 消息正确,则: 将参与者
和他的签名信息添加到自己收集的签名集合 中 如果收集到了其他 f+1 个人的签名,则:
调用
, 并且调用 checkValidity 校验有效性
四、当Gather协议输出集合
中每一项的下标,即 - 广播indices消息:
五、当第一次从其他某个参与者
调用
并得到结果 ,并且等待自己的 调用输出结果时, 对于
中的每个 : 对于
中的每个 ,以作为秘密发放者终止的所有BingoShare调用时:==== 调用
六、如果BingoReconstructSum输出结果
- 将
添加到集合 中
七、如果
- 检查哪些参与方具有最大的关联值,并选择它作为领导者。====
Verifiable gather
the goal of Gather is to have some common core gather-set such that all parties output a super-set of this core.
For Verifiable Gather, the goal is to limit the power of the adversary to generate inconsistent outputs. Intuitively, for any gather-set produced by the adversary, if it passes some verification protocol, it must also be a super-set of the common core.
零、开始阶段:
- 初始化各集合
- 可靠广播消息
一、如果从用户
- 将
添加到自己的 集合中,将用户 添加到自己的 集合中 - 如果
集合中已经有 个用户,则广播消息
二、如果从用户
当 收到的
是自己的 的子集的时候,即收到的集合中的用户的广播也已经被此用户收到时: 将用户
添加到自己的 集合中 如果
集合中已经有 个用户,则广播消息
三、如果从用户
当 收到的
是自己的 的子集的时候,即收到的集合中的用户的广播也已经被此用户收到时: 将
中每个用户 的 集合并起来,和用户 ,加入自己的集合 中 如果
集合中已经有 个用户,则输出集合 ,并且继续监听接受信息