Pedersen commitments详解

https://medium.com/coinmonks/zero-knowledge-proofs-um-what-a092f0ee9f28

https://blog.csdn.net/liangyihuai/article/details/103465533?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-103465533-blog-137889359.235^v43^control&spm=1001.2101.3001.4242.1&utm_relevant_index=3

Pedersen 承诺是一种加密算法,它允许证明者在不透露或无法更改它的情况下承诺某个值。

当您花费Token时,您花费的输入值和您发送的输出值被加密并且对每个人(每个输出的接收者除外)都是不透明的。 Pedersen的承诺允许您发送Token,而无需透露交易的价值。

Pedersen 承诺的核心公式:

c = g * v + h * r

其中,c为生成的承诺值,g, h 为椭圆曲线上的生成元,v为原始信息,r为盲因子。由于g, h 为椭圆曲线上的生成元,因此 g*v,h*r可以视为公钥。同理,v, r也可以视为私钥。

由于盲因子r是一个随机数,因此针对相同的 v 也会产生不同的承诺 c,从而提供了信息论安全的隐藏性。这一点类似 ECDSA、Schnorr 签名采用的手法。

Pedersen 承诺的构造分为 3 个阶段:

  1. 初始阶段:选择阶为大素数 q 的乘法群G、生成元g 和 h,公开元组 ( g , h , q ) ;
  2. 承诺阶段:承诺方选择随机数r作为 盲因子,计算出 承诺值 c后发送给接收者;
  3. 打开阶段:承诺方发送 ( v , r ) 给接收者,接收者验证 c是否等于$(gv + hr)$ 如果相等则接受承诺,否则拒绝承诺。

Pedersen 同态性:

Pedersen 承诺的同态性是指,如果$c_1,c_2$分别使用盲因子$r_1,r_2$对密文$v_1,v_2$计算承诺,那么$c_1*c_2$可以有盲因子$r_1+r_2$对密文$v_1+v_2$计算得到。 这是因为:$r_3=r_1+r_2$

c=c_1+c_2=g*{v_1}+h*{r_1}+g*{v_2}+h*{v_2}=g*{(v_1+v_2)}+h*{(r_1+r_2)}

Pedersen承诺的应用

  1. 恒等关系验证

!https://pic3.zhimg.com/80/v2-d4dc9d7f1b0213943f7e1c4a50c36fea_720w.webp

只要第一个数等于后两个数之和,验证者不会看到交易量具体值,但是又不得不承认A真的分了一部分钱给B,然后还有一部分钱又退回给了A。这样既隐藏了数据本身,又证明了数据的关系。虽然Pederson承诺证明了数字之间的关系,但是并没有限制任何数字的取值区间,因此还需要对隐藏的数值进行范围证明!

刚才我们说了Pddersen在不泄漏转账数字的情况下可以把交易这个活干了,他是怎么实现的呢?

首先是一个等式,大家想想看,如果我有8个mw 币 ,给你转了6个,1个是找零,还有1个是矿工费用

这个等式为 8 - 6 =1 + 1,这个对吧?把P承诺公式套进来尝试看一下它的交易逻辑!

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0LzM0MWM2NWMwNGEwZDUwZTJiZWVmMGRiYjE5MDkwZTA3MTU3MDhhNTYucG5n?x-oss-process=image/format,png

左上角的那个是传统的UTXO,一个UTXO 5个token,一个UTXO 3个Token ,如果Alice想给Bob转6个Token,找零1个,交易费1个。左下角那个图是MW里的交易过程,看不到数额,右边2个图是Alice 在MW里转移6个Token 给Bob的过程,这里面利用了前面说的Pederson等式!

  1. Cin1 = r1G + 5H (r1是Alice的私钥 5是数量), 同理Cin2 = r2G + 3H, 5 和3即为Alice持有的token数量
  2. C change (找零) = r3G + 1H, r Alice = r1 + r2 - r3(加加减减还是一堆秘钥,不告诉你就破解不了)
  3. 对于Bob来说,他利用自己的私钥r4 和G, H还有他要收到数量6一样生成个Pedersen等式,在生成一个K,利用r alice 和自己的r4 产生的,每一个交易都会产生这么个东西,留着给矿工用。
  4. 大家回过头来看看,Bob知道r alice的结果,但是解不出来 r1 r2 和r3,即他不知道Alice的秘钥,或者你再给其一个系数G,变成Ralice=r alice *G,离散对数里的方程,假如已知 R 和G,你是计算不出来r alice的。
  5. Bob可以检查等式两边是否相等,同样矿工利用公布出来的数据也可以检查两边的数据是否相等,也不需要知道里边的秘钥细节,总之out=in+找零 相等就行了。

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值