(阅读笔记)ABY3: A Mixed Protocol Framework for Machine Learning

ABY3 [Arithmetic-Binary-Yao; Three-party with one malicious adversaries]

代码在这里

引言

机器学习被广泛用于为图像分类、生物特征匹配等应用生成模型,越来越多的技术公司,例如微软、谷歌,为客户提供基于云的机器学习模型推理和训练服务。然而,这些数据通常是敏感的,并可能具有不同等级的隐私要求。在通用数据保护条例等法规的约束下,不同实体之间难以共享数据和协同训练模型。
基于安全多方计算的隐私保护机器学习是一个活跃的研究领域,有助于解决这些问题。探索基于三方服务器的隐私保护机器学习框架,现有工作存在的挑战包含以下几个方面:
(1)在机器学习中,参数和中间计算结果都是以小数的形式存在,不能直接应用到模运算的代数系统上,例如整数环。目前有两种解决方案,一是将小数乘上一个大因子使其成为整数,同时使用一个大的模数来避免绕环,这样的弊端就是当计算大量浮点乘法的时候将不满足结果的正确性,同时采用了更大的模数增加了计算和通信的复杂度;二是使用基于布尔电路和混淆电路的定点小数乘法方法,但是其通信轮数又大大增加。
(2)机器学习涉及大量的算术计算与布尔运算,往往使用混合协议的方式比使用单一协议的方法要更高效,例如,可以使用算术秘密共享实现加法和乘法,使用布尔秘密共享或Yao共享实现比较。然而,在不同共享类型之间进行转换的标准方法代价高昂,并很快成为主要的性能瓶颈。
(3)如果攻击者存在恶意的行为,那么有效地解决上述挑战将更加困难,因此需要考虑恶意安全模型下的安全计算协议设计。
为了解决上述问题,本文[18]作出了如下贡献。
(1)设计了一种用于共享小数的近似定点乘法协议,其计算开销接近于标准的秘密共享模乘法,可以应用于半可信模型和恶意模型(三方中有一方是恶意的)。
(2)设计了一种通用的三方计算框架,用于实现在算术共享、布尔共享、和Yao共享之间进行转换。
(3)面对半可信安全模型,甚至是恶意模型(本文考虑安全三方计算,至多存在一台服务器被腐蚀)。

三方秘密共享

算术共享

在这里插入图片描述
在这里插入图片描述

布尔共享

在这里插入图片描述

姚式共享

在这里插入图片描述
在这里插入图片描述

ABY3框架

  • 三种秘密共享类型:算术加法秘密共享;二进制秘密共享;姚式电路秘密共享;不同类型的秘密共享切换通信开销:
    在这里插入图片描述
  • 安全三方计算
    秘密 x = x 1 + x 2 + x 3 x=x_1+x_2+x_3 x=x1+x2+x3,三方分别拥有 ( x 1 , x 2 ) , ( x 2 , x 3 ) , ( x 3 , x 1 ) {(x_1, x_2), (x_2, x_3), (x_3, x_1)} (x1,x2),(x2,x3),(x3,x1),显然任意两方可以重构出秘密 x x x,且允许且仅允许一个参与方被腐蚀(即任意少于两方不能重构出秘密),相当于(3,2)门限秘密共享,3为参与方总数量,2为可重构秘密参与方数量(重构门限)。
    注意,任意一方拥有两份秘密份额!(是为了使得任意两方可以重构出秘密的前提)

共享转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定点乘法与截断

  • 定点数运算:表示为k比特,固定小数位长度为d,在 Z 2 k \mathbb{Z}_{2^k} Z2k内可以执行与整数类似的运算。
    1. 定点乘法协议有两个误差来源:①第d+1位小数被截断,导致 2 − d 2^{-d} 2d的误差,可以通过增大d控制误差大小;②符号位溢出,例如负数误判为正数。
    2. ①本文方法1:分享截断值,最小化通信开销,其中 x 3 = r = x 3 ′ / 2 d x_3=r=x'_3/{2^d} x3=r=x3/2d在这里插入图片描述
      ② 借助二进制秘密共享。
      在这里插入图片描述
  • 向量化运算
  • 秘密共享类型转换
  • 混合秘密共享运算
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
通过3点坐标计算圆形的方法是使用三角形相似性质和勾股定理,具体步骤如下: 1. 计算出三个点之间的距离,即AB、BC、CA的长度。 2. 判断三个点是否共线,如果共线则无法构成圆形,返回错误信息。 3. 计算出三角形ABC三边的中垂线交点O(即圆心)的坐标,可以使用向量法计算,具体可参考以下代码: ```csharp // 计算向量AB和BC的中垂线的法向量 float ABx = b.X - a.X; float ABy = b.Y - a.Y; float ABz = b.Z - a.Z; float BCx = c.X - b.X; float BCy = c.Y - b.Y; float BCz = c.Z - b.Z; float ABBCx = ABy * BCz - ABz * BCy; float ABBCy = ABz * BCx - ABx * BCz; float ABBCz = ABx * BCy - ABy * BCx; // 计算向量OA和OB的中点坐标 float OAx = (a.X + b.X) / 2; float OAy = (a.Y + b.Y) / 2; float OAz = (a.Z + b.Z) / 2; float OBx = (b.X + c.X) / 2; float OBy = (b.Y + c.Y) / 2; float OBz = (b.Z + c.Z) / 2; // 计算直线AB和BC的交点O float t = (ABBCx * (OAx - OBx) + ABBCy * (OAy - OBy) + ABBCz * (OAz - OBz)) / (ABBCx * ABBCx + ABBCy * ABBCy + ABBCz * ABBCz); float Ox = OAx + ABBCx * t; float Oy = OAy + ABBCy * t; float Oz = OAz + ABBCz * t; ``` 4. 计算出圆心到任意一点的距离即为半径R,可以使用勾股定理计算,具体可参考以下代码: ```csharp float ABx = b.X - a.X; float ABy = b.Y - a.Y; float ABz = b.Z - a.Z; float ACx = c.X - a.X; float ACy = c.Y - a.Y; float ACz = c.Z - a.Z; float AB2 = ABx * ABx + ABy * ABy + ABz * ABz; float AC2 = ACx * ACx + ACy * ACy + ACz * ACz; float BC2 = (b.X - c.X) * (b.X - c.X) + (b.Y - c.Y) * (b.Y - c.Y) + (b.Z - c.Z) * (b.Z - c.Z); float R = (float)Math.Sqrt(AB2 * AC2 * BC2) / (2 * Math.Sqrt((AB2 + AC2 + BC2) * (AC2 + BC2 - AB2) * (AB2 + BC2 - AC2))); ``` 5. 计算圆心到任意一点的向量和X轴正方向的夹角即为弧度,可以使用反正切函数计算,具体可参考以下代码: ```csharp float dx = b.X - Ox; float dy = b.Y - Oy; float radian = (float)Math.Atan2(dy, dx); ``` 至此,我们已经完成了通过3点坐标计算圆形的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值