【隐私计算】安全三方计算(3PC)的加法和乘法计算协议

2023-12-06 00:36

本文主要是介绍【隐私计算】安全三方计算(3PC)的加法和乘法计算协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ABY3中采用replicated secret sharing(复制秘密分享)机制,即2-out-of-3秘密分享,三个参与方的每一方都拥有share中的两份。下面来看一下这样做有什么好处。

2-out-of-3秘密分享

x , y x, y x,y两个操作数,先进行秘密分享:

  • P 1 P_1 P1拥有 ( x 1 , x 2 ) , ( y 1 , y 2 ) (x_1, x_2), (y_1, y_2) (x1,x2),(y1,y2)
  • P 2 P_2 P2拥有 ( x 2 , x 3 ) , ( y 2 , y 3 ) (x_2, x_3), (y_2, y_3) (x2,x3),(y2,y3)
  • P 3 P_3 P3拥有 ( x 3 , x 1 ) , ( y 3 , y 1 ) (x_3, x_1), (y_3, y_1) (x3,x1),(y3,y1)

常见的计算

1 加法

⟨ x + y ⟩ = ( x 1 + y 1 , x 2 + y 2 , x 3 + y 3 ) \langle x+y\rangle=(x_1+y_1, x_2+y_2, x_3+y_3) x+y=(x1+y1,x2+y2,x3+y3)

2 加常数

⟨ x ⟩ + c = ( x 1 + c , x 2 , x 3 ) \langle x\rangle+c=(x_1+c, x_2, x_3) x+c=(x1+c,x2,x3),注意只需要加一次 c c c

3 数乘

⟨ c x ⟩ = ( c x 1 , c x 2 , c x 3 ) \langle cx\rangle=(cx_1, cx_2, cx_3) cx=(cx1,cx2,cx3)

4 乘法

⟨ x y ⟩ = ( x 1 + x 2 + x 3 ) ( y 1 + y 2 + y 3 ) = ( x 1 y 1 + x 1 y 2 + x 1 y 3 ) + ( x 2 y 1 + x 2 y 2 + x 2 y 3 ) + ( x 3 y 1 + x 3 y 2 + x 3 y 3 ) 调整一下顺序 = ( x 1 y 1 + x 1 y 2 + x 2 y 1 ) + α 1 [ P 1 → z 1 ] + ( x 3 y 2 + x 2 y 2 + x 2 y 3 ) + α 2 [ P 2 → z 2 ] + ( x 3 y 1 + x 1 y 3 + x 3 y 3 ) + α 3 [ P 3 → z 3 ] \langle xy\rangle=(x_1+x_2+x_3)(y_1+y_2+y_3)\\=(x_1y_1+x_1y_2+x_1y_3)\\+(x_2y_1 + x_2y_2 + x_2y_3)\\+(x_3y_1 + x_3y_2 + x_3y_3)\\调整一下顺序\\=(x_1y_1+x_1y_2+x_2y_1)+\alpha_1 [P_1\rightarrow z_1]\\+(x_3y_2 + x_2y_2 + x_2y_3)+\alpha_2 [P_2\rightarrow z_2]\\+(x_3y_1 + x_1y_3 + x_3y_3)+\alpha_3 [P_3\rightarrow z_3] xy=(x1+x2+x3)(y1+y2+y3)=(x1y1+x1y2+x1y3)+(x2y1+x2y2+x2y3)+(x3y1+x3y2+x3y3)调整一下顺序=(x1y1+x1y2+x2y1)+α1[P1z1]+(x3y2+x2y2+x2y3)+α2[P2z2]+(x3y1+x1y3+x3y3)+α3[P3z3]
暂不管 α \alpha α,可以看到,三个参与方可以分别在本地计算出 z 1 , z 2 , z 3 z_1, z_2, z_3 z1,z2,z3,也就是交叉项的结果。
然而,我们要求各方都持有三份share中的两份,所以需要re-sharing操作,也就是 P i P_i Pi z i z_i zi发给 P i − 1 P_{i-1} Pi1
现在来看 α \alpha α的作用, α \alpha α用于随机化 z z z,我们需要让 α \alpha α满足: α 1 + α 2 + α 3 = 0 \alpha_1+\alpha_2+\alpha_3=0 α1+α2+α3=0。每一方都完全知道这三个值中的一个,这样的三元组 ( α 1 , α 2 , α 3 ) (\alpha_1, \alpha_2, \alpha_3) (α1,α2,α3)被称为zero-sharing(零共享),在one-time setup后的计算无需任何交互。
那么如何生成三元组?基于伪随机函数(PRF)生成,这部分本文不展开。

由此可见,3PC和2PC都在本地计算加法,他们最大的不同就是乘法:在2PC乘法中,交叉项需要借助OT或HE计算,带来巨大的通信或计算开销;而基于复制秘密分享的3PC乘法完全在本地计算交叉项,无需通信,在re-sharing时需要少量的通信。

5 截断

方法1: Π T r u n c 1 \Pi_{Trunc1} ΠTrunc1
核心想法是在一方不参与的情况下,运行两方协议。
令各方有 ⟨ x ′ ⟩ = ⟨ y ⟩ ⟨ z ⟩ \langle x^\prime\rangle=\langle y\rangle \langle z\rangle x=yz的2-out-of-3的share(上面乘法后的结果),现在的目的是计算截断 ⟨ x ⟩ = ⟨ x ′ ⟩ / 2 d \langle x\rangle=\langle x^\prime \rangle/2^d x=x/2d
定义 P 1 , P 2 P_1, P_2 P1,P2之间的2-out-of-2 share为 ( x 1 ′ , x 2 ′ + x 3 ′ ) (x_1^\prime, x_2^\prime+x_3^\prime) (x1,x2+x3),然后双方在本地截断 ( x 1 ′ / 2 d , ( x 2 ′ + x 3 ′ ) / 2 d ) (x_1^\prime/2^d, (x_2^\prime+x_3^\prime)/2^d) (x1/2d,(x2+x3)/2d),最后的结果为 ⟨ x ⟩ : = ( x 1 , x 2 , x 3 ) = ( x 1 ′ / 2 d , ( x 2 ′ + x 3 ′ ) / 2 d − r , r ) \langle x\rangle:=(x_1, x_2, x_3)=(x_1^\prime/2^d, (x_2^\prime+x_3^\prime)/2^d-r, r) x:=(x1,x2,x3)=(x1/2d,(x2+x3)/2dr,r),其中, r ∈ Z 2 k r\in\mathbb Z^k_2 rZ2k是一个 P 2 , P 3 P_2, P_3 P2,P3知道的随机数。最后,为了让三方拥有两份share,需要再做一次re-sharing操作。
这个方法的局限性是两轮计算需要乘法和截断。

在这里插入图片描述

方法2: Π T r u n c 2 \Pi_{Trunc2} ΠTrunc2

这篇关于【隐私计算】安全三方计算(3PC)的加法和乘法计算协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/459748

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <