当前位置:首页 区块链 正文

来自同态时间锁难题的计票隐私的Cicada

2023-05-29

Cicada采用了一种全新的加密方式来实现加密算法。

 

首先, Rivest、 Shamir和 Wagner1996年提出的“时间锁谜”是一种加密谜题,该谜题需要经过一定时间后才能解开,具体而言,就是需要反复执行某些非平行运算才能解开谜题。在投票环境下,时间锁定谜题有助于保证统计数据的保密性:用户可以以“时间锁定谜题”的形式提交投票,从而保证投票过程中的隐私,但是在投票之后才会公开。有别于多数个人投票系统,该系统不依赖于统计机构(如选举人员统计纸质选票和电子选票),也不依赖于门限加密技术(门限加密技术),也不依赖于任何一方,即任何一方都能破解一道“时间锁”,从而确保投票结果的公正性。

 

其次,同构时间锁谜(Malavolta Thyagarajan,2019)具有附加属性,即当已知密码、解密密码或使用“后门”时,可以计算出一定的加密值。具体来说,线性同态时间锁拼图可以让我们把拼图组合起来,生成一个新的拼图,并把原来的拼图的所有私密值都包起来。

 

研究人员指出,线性同态时间锁谜题是一类适用于私人投票的特殊基元:将选票编码成谜题,然后通过同态组合得到一个谜题。这就是说,只需计算一次,就能得出最后的结果。

 

正如上面所提到的, Cicada提供了运行计票隐私保护,即在投票过程中,时间锁的特性可以保证计票过程中的隐私。但是,每一张选票都需要用相同的公共参数进行加密,这也是一种时间锁定问题。这意味着每一张选票都能被解密(通过进行必要的计算)。换言之, Cicada只在投票过程中对选票进行保密,如果有兴趣的观察者想要解密某一特定投票者的选票,他们也可以这么做。对每一张选票进行解密就像对最后一张选票进行解密一样费时费力,所以要对 n个投票者的选票进行完全解密,就需要对 n个投票者进行工作。不过,如果机器足够多的话,所有的选票都可以被同时解密,只需要花同样的时间就可以完成。

 

对一些选票来说,这种做法可能并不可取。当我们对于暂时执行计票私密性感到高兴的时候,我们可能会想要永久的私密性投票。为了达到这个目的,我们可以结合 Cicada和无记名选民资格协定,用零知识群体的成员认证来实现。因此,即便选票被解密,它也只是透露出一个人是如何投票的,这一点我们已从计票中得知。

 

在我们的知识库中,我们包含了一个样例合约,该样例合约使用了 Semaphore来实现投票人的匿名化。但要注意的是,该合同本身并没有任何关于选民资格是如何被决定或被执行的假设。尤其是,你可以用例如 Semacaulk或者 ZK状态证明来替代 Semaphore (这里和这里建议)。

 

为了实现投票方案的实用化,有一些问题需要考虑。首先,攻击者可能通过投出错误代码的一票来试图操纵选票。举例来说,我们可以把每一张选票上的时间锁用布尔值来编码:“1”代表对投票中的提案的支持,“0”代表反对。一位热情支持提案的人也许会试着编码,如“100”,以扩大其有效的投票权。

 

我们可以通过要求选民在递交选票时,提供有关选票有效性的零知识证明,来防范此类攻击。但零知识证明的计算量太大了,为了降低投票人的参与成本,证明必须要有两种方式:(1)可计算性,(2)可验证性。

 

为提高证明效率,本项目不再使用一般的证明体系,而是使用定制的 sigma协议,即针对具体代数关系的零知识证明。这使得证明者的时间变得极短:在一台手提电脑上,用 Python生成一份投票有效性证明信只需14毫秒。

 

尽管这个 sigma协议的验证器在概念上是非常简单的,但是它需要大量的模幂。由于 Malavolta和 Thyagarajan等人提出的线性同态算法采用了 Paillier加密技术,所以对于某些 RSA模 N,我们将采用 N^2作为模来进行计算。对于合理尺寸的 N,大多数 EVM链取幂代价很大(几百万加号)。为了降低计算成本, Cicada采用了指数型 ElGamal,该指数型 ElGamal也提供了可加同态,但是它只工作于较小的模(N^2)。

 

使用 ElGamal的不足之处在于最后一步的解密需要对分立的记录进行暴力破解(注意,这个过程是在链下进行的,而在链上进行有效的验证)。因此,只有当预期投票数很少时(如小于2^32,即约430万票左右),才能使用该算法。在原有的基于 Paillier的加密方案中,不管该方案的大小,都能有效地对该计数器进行解密。