我正在努力理解基于Wesolowski和Pietrzak RSA群的VDF (可验证的延迟函数)。这些基本工作是要求验证者在未知阶的半素群G内进行一串重复的平方运算,然后计算一个验证器可以进行检查的证明,而不需要做重复平方模G的耗时工作。这些可以用于工作证明、可信赖的随机信标、垃圾邮件预防等。
我很好奇为什么两者都依赖于计算( G ^(2^t) mod G)作为要完成的工作,而不是仅仅计算g到某个任意大指数mod的幂(巨大指数可以通过运行一个已知输入的CSPRNG来生成)。在这种情况下,你可以计算g^bignum mod G的指数的证明,并提供给验证者。
使用重复的平方而不是任意的指数是否有密码意义?只是简单点吗?只是好奇,这样我才能理解为什么会做出这些选择。
对发电机(g)也很好奇。有任何理由它需要是一个特定的数字,还是应该仅仅是3?也许我没听明白,但我没看到讨论的内容。
发布于 2020-12-10 22:38:14
使用重复的平方而不是任意的指数是否有密码意义?只是简单点吗?
更重要的是,它使描述更简单。
验证者和验证者共同计算g^{2^t} \bmod G,但是他们并没有以平衡的方式完成它。
证明器完成大部分工作,计算除指数的\ell因子(其中\ell是适度素数)的所有因子;也就是说,它计算g^{\lfloor 2^t / \ell \rfloor};验证器以其馀的方式(将\ell的最终指数应用于它),并验证最终乘积(在乘以g^{2^t \bmod \ell}的最终因子之后)是期望值。
现在,我们可以重写它来使用一个大的随机T值,而不是2^t,但是它更复杂(因为T / \ell和T \bmod \ell的计算必然更复杂),而且还不清楚额外的复杂性会带来什么好处。
先前的错误答案
2^T方法确实降低了执行验证步骤的成本;考虑到这是我们期望的廉价步骤,降低成本是非常重要的。
使用2^T,验证器将需要计算2^T \bmod p-1和2^T \bmod q-1 (其中p, q是G的主要因素);这可以使用O(\log T)模块乘法来完成。
相反,如果我们使用CSRNG生成的T位数字,验证器将需要生成T位号(这显然需要O(t)时间)。
我不知道这是否是他们用来选择平方方法的理由;然而,这似乎是一个合理的决定。
https://crypto.stackexchange.com/questions/86818
复制相似问题