Shamir's Secret Sharing and Verifiable Secret Sharing (VSS)
Table of Contents
1. 背景介绍
问题描述:有一个秘密值
Adi Shamir(2002 年图灵奖获得者)于 1979 年在论文 How to share a secret 中提出的一种共享秘密的方案。
2. Shamir's Secret Sharing 方案
Shamir 方案的秘密分发过程为:随机取
秘密值
显然,Shamir's Secret Sharing 能正确工作的核心在于: 2 个点可以唯一确定一个 1 次多项式(直线),3 个点可以唯一确定一个 2 次多项式(抛物线),依此类推,
图 1(改编自 https://arxiv.org/pdf/1302.1185.pdf )是 Shamir's Secret Sharing 方案的示意图。
Figure 1: Shamir's Secret Sharing 示意图
Shamir 方案中,
2.1. Shamir's Secret Sharing 实例
2.2. 系数在有限域中的多项式运算
在 2.1 中介绍的例子使用的是普通整数系数的多项式运算,这只能用于原理性演示,不能直接用于真实环境,因为它是不安全的。系数是普通整数这个约束,会让秘密值
为了解决这个问题,可以使用系数在有限域中的多项式运算,有兴趣的读者可参考:密码编码学与网络安全——原理与实践(第七版),5.5 节多项式运算。
3. Verifiable Secret Sharing(VSS)
Shamir's Secret Sharing 方案中,有个假设:Dealer(即编码秘密值,分配部分秘密给各个参与者的人)是可信的。如果 Dealer 做恶,比如分配给各个参与者的部分秘密是不一致的随便的值,那么造成的结果是灾难性的:可能某 3 个人恢复出来的完整秘密值是
Verifiable Secret Sharing(VSS)可以解决这个问题,它能检测出做恶的 Dealer。
3.1. Feldman's Verifiable Secret Sharing
下面介绍 1987 年 Feldman 在论文 A Practical Scheme for Non-interactive Verifiable Secret Sharing 中提出的 VSS 方案(
- Dealer 随机选择多项式
这里, 是秘密值,把 通过加密通道分配给参与者 ,任意 个参与者可以恢复出 ,少于或者等于 个参与者无法恢复出 。 - Dealer 同时公开下面信息:
由这些公开的信息是不能反推出多项式系数的(本文表述中的模运算全部省略了)。 - 每个参与者
验证自己收到的 ,如果 成立(注:把 中的 按定义展开就可推导出右边),则通过验证,如果不成立就终止协议。
3.2. Pedersen's Verifiable Secret Sharing
下面介绍 1991 年 Pedersen 在论文 Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing 中提出的 VSS 方案(
- Dealer 随机选择两个多项式
需要满足条件:秘密值 ,任意 个参与者可以恢复出 。 - Dealer 计算
,其中 ,通过加密通道把 分配给参与者 。 - Dealer 同时公开下面信息:
其中 。这里, 也被称为 commitment。 - 每个参与者
验证自己收到的 ,如果 成立,则通过验证,如果不成立就终止协议。
和 Feldman VSS 不同,Pedersen VSS 具有 Information-Theoretic Secure 属性。
4. Publicly Verifiable Secret Sharing(PVSS)
在前一节介绍的 VSS 中,参与者在校验阶段中都用到了 Dealer 在加密通道中向其发送的数据。这样,对于 VSS 来说,只有参与者才可以校验 Dealer 分发的秘密分片是否正确。
是否可以去掉这个限制,也就是说任何人(不一定是参与者)都可以校验 Dealer 分发的秘密分片是否正确呢?答案是肯定的,这就是 Publicly Verifiable Secret Sharing(PVSS)问题,它由 Stadler 于 1996 年在论文 Publicly Verifiable Secret Sharing 中首先提出。
1999 年,Berry Schoenmakers 在论文 A Simple Publicly Verifiable Secret Sharing Scheme and its Application to Electronic Voting 中给出了性能更好的 PVSS 方案,这里不详细介绍。
5. Asynchronous Verifiable Secret Sharing(AVSS)
在分布式系统中,有下面网络模型:
- synchrony:节点发出的消息,在一个确定的时间内,肯定会到达目标节点;这是一种理想情况。
- partial synchrony (weak synchrony):节点发出的消息,虽然会有延迟,但是最终会到达目标节点。
- asynchrony:节点发出的消息,可能丢失,不能确定一定会到达目标节点。
对于 Synchronous VSS 模型来说,我们可以简单地等待
而对于 Asynchronous VSS 来说,要相当困难一些,因为这种模型下,“节点失败”是必须考虑的场景。假设
这里不具体介绍 Asynchronous Verifiable Secret Sharing,可参考:Asynchronous Verifiable Secret Sharing and Proactive Cryptosystems, Christian Cachin 2002
6. Distributed Key Generation(DKG)
在 VSS 协议中,都需要一个 Dealer(他掌握着完整的秘密值)参与,有没有不需要 Dealer 参与的秘密值分享算法?答案是有的,它们被称为 Distributed Key Generation(DKG)算法。
有两个使用较广的 DKG 协议:
- 1991 年,Pedersen 在论文 A Threshold Cryptosystem without a Trusted Party 中提出的,可称为 Pedersen's DKG(又可称为 Joint Feldman DKG,或者简称 JF DKG)。
- 2006 年,Rosario Gennaro 等在论文 Secure Distributed Key Generation for Discrete-Log Based Cryptosystems 中提出的协议,可称为 Gennaro DKG。这个 Gennaro DKG 和 Pedersen's DKG(Joint Feldman DKG)的主要区别在于:Pedersen's DKG(Joint Feldman DKG)使用了 Feldman VSS,而 Gennaro DKG 使用了 Pedersen VSS。
7. 参考
- How to share a secret, Shamir
- A Practical Scheme for Non-interactive Verifiable Secret Sharing, Feldman
- Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing, Pedersen
- https://en.wikipedia.org/wiki/Lagrange_polynomial
- A tour of Verifiable Secret Sharing schemes and Distributed Key Generation protocols
- Distributed Key Generation and Its Applications