【隐私计算笔谈】MPC系列专题(十一):共享随机数和比特分享

数字霜焰渡
• 阅读 1415

共享随机数

本次科普主要介绍多方比较的实现方法。回忆一下,之前介绍过的Shamir(t,n)秘密分享协议可以实现秘密分享,Shamir(t,n)协议主要基于拉格朗日插值,也可以通俗地理解成𝑛个方程求解𝑛个未知数。

BGW协议可以实现单比特分享,本次要介绍另一个比特分享方式。利用比特分享的方式,可以对𝑙比特的一个数按比特进行多方分享,之后可以据此实现多方比较。多方比较则可以用来构造安全多方计算的基础模块,无论是隐私保护的机器学习还是隐私保护的DNA比较等,都需要用到多方比较模块。

【隐私计算笔谈】MPC系列专题(十一):共享随机数和比特分享
按比特分享
 

如有一个比特串\( 𝑎 =𝑎_𝑙𝑎_{𝑙-1}…𝑎_1 \),\( 𝑎_1 \)到\( 𝑎_𝑙 \)分别是组成𝑎的各个比特,即𝑎的值为\( a=\sum {_{i=1}^{l}} 2^{i-1} a_{i} \)。对𝑎进行比特分享即对𝑎的各个比特进行分享,每个参与者拿到\( 𝑎_1,…,𝑎_𝑙 \)的𝑙个子秘密。将参与者\( 𝑃_𝑖 \)拿到的\( 𝑎_𝑗 \)的子秘密记为\( 𝑎_{𝑗,𝑖} \),则对𝑙比特长的𝑎进行比特分享后参与者\( 𝑃_𝑖 \)能够获得\( 𝑎_{1,𝑖},𝑎_{2,𝑖},…,𝑎_{𝑙,𝑖} \)。 

首先简要介绍一个多个参与者共同产生同一个随机数的方式:假设有𝑛个参与者\( 𝑃_1,…,𝑃_𝑛 \),每个参与者\( 𝑃_𝑖 \)都产生一个随机数\( 𝑟_𝑖 \),并通过Shamir(t,n)秘密分享机制将\( 𝑟_𝑖 \)进行分享,记\( 𝑟_{𝑖,𝑗} \)为参与者\( 𝑃_𝑗 \)获得的\( 𝑟_𝑖 \)的子秘密。因此当每个参与者都产生随机数并分享后,参与者\( 𝑃_𝑖 \)可以获得\( 𝑟_{1,𝑖},…,𝑟_{𝑛,𝑖} \)。

【隐私计算笔谈】MPC系列专题(十一):共享随机数和比特分享

多方随机数生成
 
参与者\( 𝑃_𝑖 \)获得子秘密\( 𝑟_{1,𝑖},…,𝑟_{𝑛,𝑖} \)之后,将它们进行累加,将累加结果记为\( {𝑟_𝑖}' \),\( r_{i}^{\prime}=\sum{_{j=1}^{n}} r_{j, i} \)。用符号𝑟表示\( 𝑟_1,…,𝑟_𝑛 \)之和,即\( r=\sum{_{i=1}^{n}} r_{i} \),则\( {𝑟_𝑖}' \)就是𝑟的一个子秘密。

因为\( 𝑟_{1,𝑖} \)是\( 𝑟_1 \)的一个子秘密,\( 𝑟_{𝑗,𝑖} \)是𝑟𝑖的一个子秘密,由于Shamir(t,n)具有可加性(在第二次科普中介绍过)。假设参与者\( 𝑃_1 \)的\( 𝑟_1 \)的秘密分配函数是\( 𝑓_1(𝑥) =𝑎_{t-1}𝑥^{t-1}+⋯+𝑎_1𝑥+𝑟_1 \),参与者\( 𝑃_2 \)的\( 𝑟_2 \)的秘密分配函数是\( 𝑓_2(𝑥)=𝑏_{t-1}𝑥^{t-1}+⋯+𝑏_1𝑥+𝑟_2 \),则参与者\( 𝑃_1 \)和\( 𝑃_2 \)分配给参与者\( 𝑃_𝑗 \)的子秘密分别为\( 𝑟_{1,𝑗}=𝑓_1(𝑗) \)和\( 𝑟_{2,𝑗}=𝑓_2(𝑗) \),二者相加为:

\( 𝑟_{1,𝑗}+𝑟_{2,𝑗}=𝑓_1(𝑗)+𝑓_2(𝑗)=(𝑎_{t-1}+𝑏_{t-1})𝑗^{t-1}+⋯+(𝑎_1+𝑏_1)𝑗+𝑟_1+𝑟_2 \)

即\( 𝑟_{1,𝑗}+𝑟_{2,𝑗} \)也是\( 𝑟_1+𝑟_2 \)的一个子秘密,\( 𝑟_{1,1}+𝑟_{2,1},𝑟_{1,2}+𝑟_{2,2},…,𝑟_{1,𝑛}+𝑟_{2,𝑛} \)也是\( 𝑟_1+𝑟_2 \)的子秘密。

同理\( {𝑟_𝑖}'=𝑟_{1,1}+⋯+𝑟_{𝑛,1}, {𝑟_2}'=𝑟_{1,2}+⋯+𝑟_{𝑛,2}, {𝑟_𝑛}'=𝑟_{1,𝑛}+⋯+𝑟_{𝑛,𝑛} \)是\( r=\sum{_{i=1}^{n}} r_{i}=r_{1}+\cdots+r_{n} \)的子秘密。 

注意此时每个参与者\( 𝑃_𝑖 \)都不知道其他参与者产生的随机数\( 𝑟_𝑗 \),因此参与者\( 𝑃_𝑖 \)也无法计算出𝑟的具体值,但是他通过计算\( r_{i}^{\prime}=\sum{_{j=1}^{n}} r_{j, i} \)可以计算出𝑟的一个子秘密\( {𝑟_𝑖}' \)。通过每个参与者都产生一个随机数并进行秘密共享,所有参与者共同协作产生了一个随机数\( r=\sum{_{i=1}^{n}} r_{i} \),但是每个参与者\( 𝑃_𝑖 \)都不知道𝑟的具体值,都只掌握𝑟的一个子秘密\({𝑟_𝑖}' \)。

随机单比特分享(Joint Random Bit Sharing)

在学习了多方共同产生随机数后,可以利用此来实现多方的随机单比特分享,每个参与者拿到一个随机比特的Share,在重构之前每个参与者都不知道该随机比特的具体值。首先所有参与者利用上节所讲述的共享随机数生成方式共同生成一个随机数,将其记为𝑟,将参与者\( 𝑃_𝑖 \)拿到的𝑟的子秘密记为\( {𝑟_𝑖}' \)(保持与上节的符号统一),用[𝑟]表示𝑟处于被分享成子秘密的状态,[𝑟]由\( {𝑟_1}',…,{𝑟_𝑛}' \)组成。

之后通过第二次科普介绍的Shamir多方乘法,计算\( [𝑟^2] \),参与者\( 𝑃_𝑖 \)能够计算出\( 𝑟^2 \)的一个子秘密。之后所有参与者分享自己计算出的\( 𝑟^2 \)的子秘密,即公开\( [𝑟^2] \),每个参与者通过公开的\( [𝑟^2] \)都可使用拉格朗日插值法重构出\( 𝑟^2 \),若重构出的\( 𝑟^2=0 \)则各方再重新生成随机数𝑟。

参与者\( 𝑃_𝑖 \)在计算出\( 𝑟^2 \)后,计算\( r=\sqrt{r^2} \) ,由于这些操作都是在有限域𝐹𝑞内进行,因此0<𝑟<𝑞,此时能够计算出两个𝑟′′,𝑟′′=𝑞−𝑟或𝑟′′=𝑟。则\( (𝑟′′)^{-1} \)的逆乘上𝑟有两种结果,\( (𝑟′′)^{-1}𝑟=𝑞^{−1} \)或者\( (𝑟′′)^{-1}𝑟=1 \)。因为\( 𝑟′′\cdot(𝑟′′)^{-1}=1 \),当𝑟′′=𝑟时,\( (𝑟′′)^{-1}𝑟=𝑟^{-1}𝑟=1 \);当𝑟′′=𝑞−𝑟时,\( (𝑟′′)^{-1}𝑟= (−𝑟)^{-1}𝑟 =(−1)\cdot𝑟^{-1}𝑟=𝑞−1 \)。 参与者可以约定选取\( 0<𝑟′′<\frac{q}{2} \),那么所有参与者就可以计算出相同的𝑟′′,参与者\( 𝑃_𝑖 \)设置\( 𝑟^{-1}=(𝑟′′)^{-1} \)

对于参与者\( 𝑃_𝑖 \)来说,\( 𝑃_𝑖 \)掌握𝑟的子秘密\( {𝑟_𝑖}' \),\( 𝑃_𝑖 \)设置\( 𝑎_𝑖=2^{-1}((𝑟^{-1}){𝑟_𝑖}'+1) \),\( 𝑎_𝑖 \)即为\( 𝑃_𝑖 \)获得的随机比特𝑎的一个子秘密。因为参与者\( 𝑃_𝑖 \)只知道𝑟,对于\( 𝑃_𝑖 \)来说𝑟依旧有两种可能,分别是\( ±\sqrt{r^2} \),因此\( 𝑃_𝑖 \)无法确定𝑎的值是0还是1,只有所有参与者对𝑟进行重构才能确定𝑟的值,从而计算出𝑎。𝑟是所有参与者共同产生的随机数,因此𝑎的值也是随机的,且在重构之前每个参与者都只掌握随机比特𝑎的一个子秘密,不知道𝑎的具体值。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql中时间比较的实现
MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
贾蔷 贾蔷
2个月前
力扣1137题 解题思路和步骤 C++代码实现,力扣一共多少题
一、题目分析力扣1137题要求我们找到第N个泰波那契数。泰波那契数的定义是:T00,T11,T21,且在n0的条件下Tn3TnTn1Tn2。,当n4时,T4T3T2T14。这道题主要考查我们对递归或动态规划的理解和运用。在思考解题方法时,我们