我正在尝试构建一个包含多个组件的密码系统,并且遇到了一个秘密共享方案的问题。
让$v$成为我们感兴趣的值。我生成一个承诺$P = aG + vH$,其中$a\in \mathbb{Z}_q$、$G$和$H$是该组的生成器(Pedersen承诺方案,如果给定$a$,则有人可以导出值$v$)。
现在假设我想使用shamir秘密共享方案( $a$共享可以生成$a$ ($k,n$共享方案)来破解$n$共享(我们称之为盲密钥)。因此,如果$P$是众所周知的,那么是否有一种方法可以让玩家在不公开$a$的情况下验证他们所获得的份额是否真的产生了$a$?这意味着他们知道合并的股票会产生令人眼花缭乱的密钥。
我知道有一种方案可以验证所有的股票都来自同一个多项式(Paul的方案),但是有什么可以阻止对手计算和分配来自某个randomly生成的无关多项式(其中的秘密是$c\neq a$)的份额呢?
发布于 2018-01-04 15:44:49
很明显,这样做的方法是对提交的值进行秘密派生,并让经销商显示导出的提交值与他最初提交的值相同。
为此,我假设秘密共享方案位于素域$GF(q)$上。
经销商发布承诺$P$,并记住承诺值$v$。
并且,当经销商生成共享$i$ (用于参与者$i$)时,它将生成共享id (我们将假设为$i$)、实际的共享值$a_i$ (即在共享id $i$处计算的秘密多项式的值)和承诺值$v_i$。然后,它将值$a_i、v_i$秘密地提供给共享持有者$i$,并发布承诺$P_i = a_iG + v_iH$以及共享id $i$。经销商还会记住所有的$v_i$值。当一个股东得到他的股份时,他可以证实他的公开承诺与他得到的秘密价值是一致的。
然后,我们选择$k$参与者(你已经证明了股东拥有一个一致的秘密,所以我们选择哪一个并不重要)。
然后,实际的秘密值是$a = f_1a_1 + f_2a_2 +.+ f_ka_k \bmod q$,对于一些可公开计算的值-- $f_1、f_2、.、f_k$ (这取决于实际的共享集)。因此,某个人,可能是交易商,计算值:
$$Q = f_1P_1 + f_2P_2 +.+ f_kP_k -P$
每个人都可以验证,因为所有参数都是公开的。
经销商可将此表述为:
$$Q = \sum f_i(a_iG + v_iH) \- (aG + vH) = (\sum f_ia_i - a)G + (\sum f_iv_i -v)H$
经销商知道的值$f_i,v_i,v$。因此,如果$a = f_1a_1 + f_2a_2 +.+ f_ka_k$,则交易商可以生成一个ZKP,即他知道$Q$的离散日志到基本$H$;如果不知道,则不能生成这样的证明(因为,如果它知道该离散日志,则它可以(假设它还记得$a,a_i$)计算$G$到基本$H$的离散日志,我们认为这是一个困难的问题。
https://crypto.stackexchange.com/questions/54454
复制相似问题