秘密共享 - 加法乘法运算

之前讲过Shamir秘密共享,目标是通过若干秘密分片恢复出原始秘密信息。本文介绍如何在不恢复秘密的前提下,计算多个秘密信息的加法和乘法。

本文只考虑两个参与方P1和P2的场景,涉及秘密x和y,介绍如何秘密计算x+y和x*y。

加法运算

加法场景比较简单,P1持有(x1, y1),P2持有(x2, y2),其中秘密x=x1+x2,秘密y=y1+y2

1)P1方本地计算z1=x1+y1

2)P2方本地计算z2=x2+y2

3)P1和P2交换z1和z2,很容易得到:x+y=z1+z2

三元组

乘法用到了Beaver三元组,先介绍三元组(a,b,c),其中c=a*b。 这里的a,b,c和秘密x,y不是一回事。我们要借助a,b,c计算x*y。

首先,P1 持有(a1, b1),P2 持有(a2, b2),取值没有任何关系限制

需要计算 c1和c2,满足c1+c2 = (a1+a2)*(b1+b2),令a=a1+a2, b=b1+b2, c=c1+c2,即c=a*b

展开式子:(a1+a2)*(b1+b2) = a1*b1+ a1*b2 + a2*b1 + a2*b2

其中, a1*b1由P1掌握,a2*b2 由P2掌握。借助加法同态加密算法,来计算c1和c2

1)P1生成同态公私钥对(sk, pk)
2)P1计算同态密文enc_a=Enc_pk(a1) 和 enc_b=Enc_pk(b1),并将enc_a, enc_b和同态公钥pk发送给P2
3)P2生成随机数r,并计算同态密文 enc = Enc_pk(a1*b2 + a2*b1 + r),将enc发送给P1
4)P1计算同态解密结果,得到a1*b2 + a2*b1 + r
5)令 c1=a1*b1 + a1*b2 + a2*b1 + r, c2=a2*b2 - r

很容易验证 c1+c2 = (a1+a2)*(b1+b2),即c=a*b

乘法运算

1)P1方本地计算e1=x1-a1,f1=y1-b1;P2方本地计算e2=x2-a2,f2=y2-b2
2)P1和P2交换e1, f1和e2, f2,并计算e=e1+e2=x-a, f=f1+f2=y-b
3)P1方本地计算z1=f*a1+e*b1+c1,P2方本地计算z2=f*a2+e*b2+c2+ef
4)P1和P2交换z1, z2,很容易计算得到z1+z2=x*y

验证:z1+z2
= (f*a1+e*b1+c1) + (f*a2+e*b2+c2+ef)
= f*a+e*b+c+e*f
= (y-b)*a+(x-a)*b+a*b+(x-a)*(y-b)
= ay-ab+xb-ab+ab+xy-xb-ay+ab
= x*y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值