基于Pedersen承诺的准“全同态”运算

源自壹账通公开的一个专利

初始化

1) 有一个 群,基点g

2) 有一个双线性pairing  e(p,q)

3)  可信第三方(或一堆人构成的整体可信第三方共同)生成随机数a,这个a的知识意味着莫大的能力。注意作为一个整体的可信第三方并不一定知道a

4)  可信第三方计算 ,  并公布之 。共同生成的时候,实际生成的a = a1*a2*a3...*an。只要有一个人诚实地销毁了自己的ai,a就无人知道了。

5) 数值v用Pedersen承诺表示: ,  r是随机数

6)为便于打字,记号pow(g, r) = 

同态加法

Pedersen承诺直接是加法同态的

 

准同态乘法(达到乘法的效果)

两个数值v1和v2,各自的Pedersen承诺是 ,  , 

据此构造一个对v1和v2乘积的承诺

pow(k, r1 * r2)被看作某个公钥后公开,同时附带一个sig := sign( cm3, r1 * r2),这样可以证明示证人真的知道对应的私钥 (r1 * r2)。 

现在各方都可以计算 cm4 := cm3 * pow(k, r1*r2),并且验证 e(g, cm4) ?= e(cm1, cm2)。

当该验证通过时,验证者确认cm3确实是对v1*v2的承诺



有2个承诺

如果同一个人知道两个承诺的opening方式,要证明 v1 = v2 很简单:cm = cm1/cm2,看作公钥,用(r1-r2)当私钥作一个签名,就证明了这个。如果直接提供(r1-r2)给人验证pow(h, r1-r2) ?= cm也可以。


下面是另外一个很好的方法:

你可能感兴趣的:(基于Pedersen承诺的准“全同态”运算)