详解信任初始化阶段的5种设置( 三 )


请注意 , 此处存在循环论证的风险:有了 PKI 设置 , 就可以分别在 n=2f+1 时实现同步模型中的拜占庭共识 , 还能在 n = f+1 时实现拜占庭广播(参见 Dolev 和 Strong) 。 但如果没有 PKI 设置(标准模型) , 那么初始化 PKI 的广播环境需满足 n > 3f 。
优点:完全公开设置的一个重要优点就是它相对简单 , 并且可以减少受攻击面 。
风险:这类设置的失败通常会导致模棱两可 。 给不同的参与方提供不同的密钥可能会导致未来的协议失败 。
4. 部分公开设置
部分公开意味着来自受信任实体 T 的输出对所有参与方都公开 , 然而可能要求参与方的输入 x1 , ... , xn 和 T 的随机字符串 r 应当保密 。 例如 , 设想一个持续接受用户消息、并需要在未来那么某个时间 t 将所有消息一次性全部显示出来的系统 。 这样一个系统可以使用如下初始化设置:函数 F 不接收任何来自参与方的输入 , 并执行如下操作:生成用于加密机制的密钥对(sk , pk) , 然后生成一个 Rivest、Shamir 和 Wagner 时间锁谜题 p , 用于在到达时间 t 之前隐藏 sk;最后 , 向各参与方输出谜题 p 和加密密钥 pk , 从而结束初始化阶段 。 在主阶段 , 用户可以使用 pk 加密他们的消息并广播 。 此外 , 他们开始解决谜题以在时间 t 内获得解密密钥 sk , 从而解密所有消息 。 请注意函数 F 的所有输出都是对参与方公开的 , 但这个被信任的实体的内部状态(也就是说 , 用于生成密钥对(sk , pk)的随机字符串)必须保密 。
信任一个带有秘密值的预计算流程通常效益显著 。 此类设置的风险是 , 系统的属性现在依赖于初始化阶段的隐私性 。 而在初始化过程中想要检测信息泄漏事件是非常困难的(在执行初始化设置过程中获得机密信息的攻击者可以不让他人获知自己获得了机密信息) 。
要求初始化过程公开一个公共值的好处是更容易确保这一属性(比起向各参与方发送私有值而言) 。 这一模型通常被称为公共参考串(Common Reference String , CRS)模型 。 这里我们举两个例子:

  1. 针对高效可验证秘密共享(Secret Sharing)的设置 —— Kate、Zaverucha 和 Goldberg 提出了一种机制 , 该机制要求一个信任初始化阶段来生成一个随机的公开生成器 g 和一个私钥 α 。 然后 , 初始化阶段以 g(ai) 的形式广播幂 。 使用这一设置 , 可以获得最高效的异步可验证秘密共享机制 。
  2. 针对高效零知识证明的设置 —— 少数高效的零知识协议要求 CRS 设置 。 要让这种初始化过程值得被信任 , 通常需要一些难度较大(non-trivial)的 MPC 协议 。 比如 , 参见 Bowe、Gabizon 和 Miers 。 实际上 , 仅仅运行一个 MPC 协议是远远不够的 , 通常来说 , 必须进行一个完整的初始化仪式才能建立公开的可验证性 。
5. 完全私有设置
这是最通用的一种初始化形式 , 即便是函数发送给各参与方的输出也是彼此保密的 。 显然 , 该设置最大的优点就是允许在它们之上运行强大的协议 。 此类初始化的实例化(或实现)相当复杂 , 并且面临更大的受攻击面 。
我们在这里集中讨论两种实例:分布式密钥生成和安全多方计算的离线阶段 。
分布式密钥生成和门限签名设置
门限签名机制通常在降低词语复杂度(word complexity)和减少总计算开销(案例参见此处)上表现突出 。 而门限签名的问题在于该机制要求有个初始化过程 , 通常被称为分布式密钥生成(DKG)初始化 。
DKG 函数只从每个参与方那里接收随机的比特 , 生成一个密钥对(sk , pk) , 然后输出 pk 给所有人并单独分享 sk 给每个参与方 , 使得参与方 Pi 收到 ski , sk 在每个参与方之间必须保密 。
风险:在这一初始化过程中 , 有两个地方可能会失败 。 一是当共谋者数量达到门限值时秘密将会泄漏 , 二是某些参与方可能会收到错误的 sk 。 参与方有多种方式来验证其收到的 sk 的有效性 , 因此主要的风险发生在参与方掉线时 。


推荐阅读