顺着前一个帖子的未尽事宜自行考虑了以下问题:两方各自有一个Pedersen Commitment,想要证明其承诺值相同,且证明过程不能对第三方泄露承诺值;如果实际上承诺值不相同,则甚至不能让对方知道本方的承诺值。给出一个解法:
甲方:;生成随机数 ,公开
乙方:;生成随机数 , 公开
定义
甲方计算 ,
用作为私钥,为生成Schnorr签名
乙方计算,
用作为私钥,为生成Schnorr签名
甲乙双方公开和。包括甲乙和第三方,任何人都可以计算如下定义的
上式中,对sig的两个分量分别记为R和s。
甲乙双方共同拥有(但任何一方都不单独知道)的共同私钥 , 对应的共同公钥。
包括甲乙和第三方,任何人都可以计算,其值等于。只有当v1==v2时,cm才正好等于PK
包括甲乙和第三方,任何人都可以验证sig = <R, s> 是否是对应cm(此时当做是一个公钥)的对e的签名:
演算后易知:只有在 (v1=v2)时上面的式子左右两边才相等!也就是时候,如果能够验证这个签名,就证明了两个Pedersen承诺的值恰好相等。
这个算法只能用于半诚实敌手模型。