BGW协议(算数共享)

news2025/1/11 7:07:42

概述

BGW协议可以用于对域上包含加法、乘法、常数乘法门的算术电路求值,此协议强依赖Shamir秘密分享方案,利用其同态特性对各个秘密份额进行适当的处理,就可以在秘密值上进行安全计算。

加法门

算数加法共享(两方)

一方持有密文一方持有密钥。

image.png
显然算数加法门完成计算结果是无需交互的,在本地即可完成计算。(GMW协议相当于mod 2 计算。)

基于Shamir方案的加法共享(多方)

考虑两个输入门 x , y x,y x,y,一个输出门 z z z的加法门,计算 z = y + x z=y+x z=y+x。同样,为了达到共享,需要将两个输入门的输入导线值秘密拆分给多个参与方。首先对每个输入导线针对要输入的值 x o r y x \quad or \quad y xory,选择一个 t t t阶的多项式,然后进行Shamir的 ( t , n ) (t,n) (t,n)分享,将秘密份额分发给其他的参与方,这样假设有 n n n个参与方,那么就会得到 n n n份来自不同输入导线的秘密份额。本地求和累加,即可得到输出门 z z z值的一个 ( t , n ) (t,n) (t,n)分享。只需 t + 1 t+1 t+1个及以上联合重构秘密即可还原出最终的加法结果。

乘法门

算数乘法共享(两方)

image.png
如图显然,和GMW协议一样,除了自己能够计算出来的一部分外,还会多出一部分必须要交互才能计算出来的结果。如果采用和布尔共享一样的OT协议的话,那么每个未知数据的可能情况非常多,多个组合起来就更加多。为了保障隐私,掩盖子电路的输出,所以需要添加掩码了,这里采用了乘法三元组。

Beaver三元组(乘法三元组)

一种MPC协议的构造范式:分为参与方输入未知时的预处理阶段和参与方选择好输入时的在线阶段。预处理阶段会为参与方生成一些相互之间具有一定关联性的随机量。参与方于在线阶段的时候则可以消耗这些随机量。
在前面的方法中,我们可以看到,协议中唯一的实际开销是为每个乘法门求值时的通信开销,由此这里采用三元组将大部分通信量转移到预处理阶段。
所谓乘法三元组,即 a b = c ab=c ab=c, a a a b b b是从域中随机选择的一个随机数,每一个乘法门求值都需要消耗掉一个三元组

步骤
依旧考虑两个输入门 x , y x,y x,y,一个输出门 z z z的乘法门,计算 x ∗ y = z x * y = z xy=z,首先给两个输入值添加掩码,也就是把三元组的元素进行两方拆分。也就是 a = a 0 + a 1 , b = b 0 + b 1 a = a_0 + a_1,b=b_0+b_1 a=a0+a1,b=b0+b1,让两方分别持有一部分,注意到 a b = ( a 0 + a 1 ) ( b 0 + b 1 ) = a 0 b 0 + a 0 b 1 + a 1 b 0 + a 1 b 1 ab=(a_0+a_1)(b_0+b_1)=a_0b_0+a_0b_1+a_1b_0+a_1b_1 ab=(a0+a1)(b0+b1)=a0b0+a0b1+a1b0+a1b1,将其拆分为两部分 ( a b ) 0 (ab)_0 (ab)0 ( a b ) 1 (ab)_1 (ab)1
具体操作可以调用同态加密的方法,假设选定一个同态加密算法(如Paillier)

  • P 1 P_1 P1计算 E ( a 1 ) , E ( b 1 ) E(a_1),E(b_1) E(a1),E(b1)然后发送给 P 0 P_0 P0
  • P 0 P_0 P0计算 E ( b 1 ) a 0 E ( a 1 ) b 0 E ( a 0 b 0 − a 1 b 1 ) = E ( a 0 b 0 + a 0 b 1 + a 1 b 0 − a 1 b 1 ) E(b_1)^{a_0}E(a_1)^{b_0}E(a_0b_0-a_1b_1)=E(a_0b_0+a_0b_1+a_1b_0-a_1b_1) E(b1)a0E(a1)b0E(a0b0a1b1)=E(a0b0+a0b1+a1b0a1b1)发送给 P 1 P_1 P1
  • P 1 P_1 P1解密即可
  • 此时 ( a b ) 0 = a 1 b 1 (ab)_0=a_1b_1 (ab)0=a1b1,而 ( a b ) 1 = a 0 b 0 + a 0 b 1 + a 1 b 0 (ab)_1=a_0b_0+a_0b_1+a_1b_0 (ab)1=a0b0+a0b1+a1b0

现在两方分别持有 x i , y i , a i , b i x_i,y_i,a_i,b_i xi,yi,ai,bi

  • x , y x,y xy以掩码方式 e = x + a e=x+a e=x+a f = y + b f= y+b f=y+b输出,即公开 x i + a i , y i + b i x_i+a_i,y_i+b_i xi+ai,yi+bi,这样双方就能本地计算出 e , f e,f e,f
  • 计算得到 x y = ( e − a ) ( f − b ) = e f − f a − e b + a b \begin{aligned} xy&=(e-a)(f-b)\\ &= ef-fa-eb+ab \end{aligned} xy=(ea)(fb)=effaeb+ab,那么将其拆分一下,得到 ( x y ) 0 = − f a 0 − e b 0 + ( a b ) 0 ( x y ) 1 = e f − f a 1 − e b 1 + ( a b ) 1 \begin{array}{lcl} (xy)_0=-fa_0-eb_0+(ab)_0 \\ (xy)_1=ef-fa_1-eb_1+(ab)_1 \end{array} (xy)0=fa0eb0+(ab)0(xy)1=effa1eb1+(ab)1
  • 配合上前面计算出来的 ( a b ) 0 (ab)_0 (ab)0 ( a b ) 1 (ab)_1 (ab)1即可在本地得到结果。

多方的乘法共享

基于Shamir秘密分发方案

=还是考虑两个输入门 x , y x,y x,y,一个输出门 z z z的乘法门,计算 x ∗ y = z x * y = z xy=z,直观上来看,实质是两个输入门的 t t t阶多项式相乘,这将得到一个阶数为 2 t 2t 2t的多项式,假定为 q ( x ) q(x) q(x),每个参与方的秘密份额就是这个多项式上的一个点 q ( i ) = [ v x ] [ v y ] q(i)=[v_x][v_y] q(i)=[vx][vy]注意: [ ] [] []代表 ( t , n ) (t,n) (t,n)的Shamir秘密分享的秘密份额),显然恢复出正确的结果是需要至少 2 t + 1 2t+1 2t+1个秘密份额,这已经超过了Shamir秘密分享方案的阈值 t t t,那么如何解决阈值溢出问题呢?毫无疑问需要对乘积多项式进行降阶。
注意: 这里需要满足要求 2 t + 1 < n 2t+1<n 2t+1<n,即安全性基于多数诚实假设。
目标:获取 q ( 0 ) q(0) q(0)的有效秘密份额,且多项式阶不超过阈值 t t t,从而能够让 t + 1 t+1 t+1个人能够恢复出秘密 q ( 0 ) q(0) q(0)
核心思路:使用参与方的秘密份额的线性函数表示 q ( 0 ) = ∑ i = 1 2 t + 1 λ i q ( i ) q(0)=\sum^{2t+1}_{i=1} \lambda_i q(i) q(0)=i=12t+1λiq(i),这是一个 ( t , n ) (t,n) (t,n)共享转加法 t t t的一个形式,也就是将 q ( 0 ) q(0) q(0)转换为了 2 t + 1 2t+1 2t+1份秘密份额的和。然后参与方的编号如果自始至终都默认为 [ 1 , 2..2 t ] [1,2..2t] [1,2..2t]这样的增长方式的话,加上 λ i \lambda_i λi是一个知道编号就能计算出的一个值,那么就可以在本地模拟 2 t + 1 2t+1 2t+1个秘密份额进行求和。

具体降阶步骤如下,

  1. 首先每个参与方基于自己的 q ( i ) q(i) q(i)进行一次Shamir的 ( t , n ) (t,n) (t,n)秘密共享,并将对应的秘密份额 [ q ( i ) ] [q(i)] [q(i)]发送给其他参与方,也就是每个参与方将 q ( i ) q(i) q(i)作为秘密和常数项,选择一个 t t t阶多项式,分发对应子秘密份额给其他参与方。
  2. 各个参与方在本地计算 [ q ( 0 ) ] = ∑ i = 1 2 t + 1 λ i [ q ( i ) ] [q(0)]=\sum^{2t+1}_{i=1} \lambda_i [q(i)] [q(0)]=i=12t+1λi[q(i)] [ q ( 0 ) ] [q(0)] [q(0)]表示乘积秘密值 q ( 0 ) q(0) q(0)的有效份额, λ i \lambda_i λi是对应的拉格朗日系数。

此时因为 [ q ( i ) ] [q(i)] [q(i)]是一个 ( t , n ) (t,n) (t,n)共享,那么此时每个人计算出的 [ q ( 0 ) ] [q(0)] [q(0)]也就是一个 ( t , n ) (t,n) (t,n)共享。这就完成了降阶的操作。

基于随机输入以及三元组方案 (加法秘密分享)

每个参与方为每个乘法门构造三元组 [ a ] [ b ] = [ c ] [a][b]=[c] [a][b]=[c](自己持有,其他参与方不知道,已知ab,c就定了),各个参与方持有秘密份额 [ v x ] , [ v y ] [v_x],[v_y] [vx],[vy](对于每个参与方的输入导线都会随机分配一个秘密份额,只有对应参与方知道其值,同样满足 v = ∑ i = 1 n [ v ] v=\sum^n_{i=1}[v] v=i=1n[v])想要计算 [ v x v y ] [v_x v_y] [vxvy]
注意: [ ] [] []为加法分享的子秘密份额,即 a = ∑ i = 1 n [ a ] , b = ∑ i = 1 n [ b ] a=\sum^n_{i=1}[a],b=\sum^n_{i=1}[b] a=i=1n[a],b=i=1n[b]),计算步骤如下

  1. 各个参与方在本地计算 [ d ] = [ v x − a ] [d] =[v_x - a] [d]=[vxa]并公开
  2. 各个参与方在本地计算 [ e ] = [ v y − b ] [e] =[v_y - b] [e]=[vyb]并公开
  3. 则有下列等式

v x v y = ( v x − a + a ) ( v y − b + b ) = ( d + a ) ( e + b ) = d e + d b + a e + a b = d e + d b + a e + c \begin{aligned} v_x v_y &=(v_x -a +a)(v_y-b+b) \\ &= (d+a)(e+b) \\ &= de+db+ae+ab \\ &= de+db+ae+c \end{aligned} vxvy=(vxa+a)(vyb+b)=(d+a)(e+b)=de+db+ae+ab=de+db+ae+c
d , e d,e d,e是被公开了的,而 [ a ] , [ b ] , [ c ] [a],[b],[c] [a],[b],[c]各个参与方均持有,因此各个参与方均可计算秘密份额
[ v x v y ] = d e + d [ b ] + e [ a ] + [ c ] [v_x v_y]=de+d[b]+e[a]+[c] [vxvy]=de+d[b]+e[a]+[c]

参考

实用安全多方计算导论
Arithmetic Sharing(算术共享)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++ 友元介绍

友元的目的就是让一个函数或类访问另一个函数中的私有成员 友元函数 &#xff08;1&#xff09;普通函数作为友元函数 class 类名{friend 函数返回值类型 友元函数名(形参列表);//这个形参一般是此类的对象.... } 经过以上操作后&#xff0c;友元函数就可以访问此类中的私有…

Vue最新快速上手教程(狂神)

文章目录 前端核心分析1. 第一个Vue程序2. Vue基本语法3. Vue绑定事件4. Vue双向绑定5. 组件讲解6. Axios异步通信7. 计算属性8. 插槽slot9. 自定义事件内容分发10. 第一个vue-cli程序11. webpack学习使用12. vue-router路由13. vueelementUI14. 路由嵌套15. 参数传递及重定向1…

【JAVA】黑马程序员JAVA教程笔记 基础篇 Day 1

常用命令行DOS命令 Path环境变量 用途 1. 可以理解为系统中的一个大管家&#xff0c;记录了很多软件的完整路径。 2. 将常用的软件都交给Path环境变量&#xff0c;便于用命令行打开。 设置步骤 复制要使用的软件的存储地址右键点击 此电脑&#xff0c;打开属性点击 高级系统…

【2023最新】几乎涵盖你需要的Android性能优化的所有操作

前言 现如今&#xff0c;Android开发在市面上的需求不再像以前一样一人难求&#xff0c;僧多认识的情况直接导致整个行业对Android开发岗位的要求越来越高&#xff0c;Android 开发越来越规范&#xff0c;间接导致项目对质量要求的提升。启动优化、内存优化、App 崩溃监控等性…

【网络安全CTF】BUUCTF(Basic篇)

Linux Labs 解题思路&#xff1a;已给用户名密码&#xff0c;直接用ssh工具连接即可获取flag 查找flag在跟下 提交完成。 BUU LFI COURSE 1 访问链接&#xff1a;为php代码审计题&#xff0c;看题目要求构造GET请求读取文件 http://9a7d4988-99f9-4c29-88d8-600e19887723.n…

三极管知识大全

一、三极管的使用 一般可以当做开关管来使用&#xff0c;也可以利用三极管的放大特性&#xff0c;来搭建恒流源&#xff0c;恒压源等等&#xff0c; 三极管当做开关管来使用的话&#xff0c;三极管输出的是高、低、高、低的方波信号 BUCK电源的开关频率在65KHz&#xff0c;也…

【刷题笔记】另类加法+走方格的方案数

一、另类加法 题目&#xff1a; 牛客网链接&#xff1a;另类加法_牛客题霸_牛客网 描述 给定两个int A和B。编写一个函数返回AB的值&#xff0c;但不得使用或其他算数运算符。 测试样例&#xff1a;1&#xff0c;3 返回&#xff1a;4 解析&#xff1a; 因为无法使用算数运算符…

网易云音乐开发--完善video模块

解决多个视频同时播放问题 老样子&#xff0c;npm start开启服务器 说一下问题 现在打开多个视频会让他&#xff0c;同时播放&#xff0c;相当的吵闹。我们只需要一次只有一个视频播放 看文档&#xff0c;我们的思路是点击这个视频&#xff0c;关闭上次视频 我们传入这个id …

shell脚本语言

# 编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 #!/bin/bash# 1、包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的 # 杨轩 # myfirstshell.sh # 脚本命令的练习# 2、和当前用户说“hello 用户名” echo "hello xuan"# 3、…

Vue生命周期函数执行顺序(使用注意事项)

文章目录 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed Vue.js 是一个基于 MVVM 模式的前端框架&#xff0c;它的核心是一个响应式的数据绑定系统。在 Vue.js 中&#xff0c;组件是一个可复用的 Vue 实例&#xff0c;它拥有自己的生命周期…

第二章 进程管理

2.1 进程的引入 2.1.1程序的顺序执行 1.程序的顺序执行 程序是人们要计算机完成特定功能的一些指令序列&#xff0c;是一个按严格次序、顺序执行的操作序列&#xff0c;是一个静态的概念。 如&#xff1a;有一个程序&#xff0c;要求先输入数据&#xff0c;再做相应的计算…

platform_get_resource=NULL内核源码分析

platform_get_resourceNULL内核源码分析 文章目录 platform_get_resourceNULL内核源码分析1.第一步&#xff0c;我们看一下什么情况下platform_get_resource函才会返回NULL,也就是没有获取到资源。2.第二步&#xff0c;因为myled这个设节点会转成了platform_device&#xff0c;…

suricata中DPDK收发包线程模型和配置说明

《基于DPDK收包的suricata的安装和运行》中已经讲过基于DPDK收发包的suricata的安装过程&#xff0c;今天我们来看一下&#xff0c;suricata中DPDK的收发包线程模型以及相关的配置。 1、收发包线程模型&#xff1a; 通过分析代码&#xff0c;suricata中DPDK收发包线程模型如下…

C高级 day03

1.编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 1、包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOM…

采药 DP 裸01背包 java

&#x1f351; 采药 import java.util.*;class Main{static int N 1010;static int[] f new int[N];public static void main(String[] aaa){Scanner sc new Scanner(System.in);int m sc.nextInt();int n sc.nextInt();for(int i 0; i < n; i){int v sc.nextInt()…

s2021ss62找规律

代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,ans; int main() {cin>>n>>m;for(int i1;i<n-1;i)ansi;cout<<ansm;return 0; }

一文了解支付卡行业数据安全标准(PCI DSS 4.0)新要求

在接下来不到一年的时间里&#xff0c;将有越来越多的企业要遵守支付卡行业数据安全标准 (PCI DSS) 4.0 版的多项新要求。 关于 PCI DSS PCI DSS 包含 12 项保护支付卡数据的要求&#xff0c;在过去十年中都没有更新。但经过三年的商讨&#xff0c;现在已经进行了重大改革。 …

JavaScript基础语法篇超详解

目录 一. 什么是JavaScript? 概念 JavaScript可以做的事情 JavaScript和HTML, CSS之间的关系 JavaScript运行过程 二. 基础语法篇 第一个JavaScript程序 JS的书写形式 JS的代码注释 输入输出 变量的使用 变量命名 数据类型 变量的声明和使用 理解动态类型 JS变量类型 JS数组…

一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

一、分区的定义 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c; Hive 中的分区就是分目录 &#xff0c;把一个大的数据集根据业务需要分割成小的数据集。 在查询时通过 where 子句中的表达式选择查询所需要的指定的分区&#xff0c;这样的查询效率 会…

【教程】手把手教你用Clion进行STM32开发【如何优雅の进行嵌入式开发】

通过Clion进行嵌入式开发 一、工具安装 1、安装Clion 因为众所周知的原因&#xff0c;Clion的安装就不解释了&#xff0c;有需要的同学自行检索 2、安装STM32CubeMX 正常去官网下载最新版的安装就行了&#xff1a;STM32CubeMX - STM32Cube initialization code generator …