安全多方计算(MPC)

article/2025/9/13 1:37:51

MPC既适用于特定的算法,如加法、乘法、AES,集合交集等;也适用于所有可表示成计算过程的通用算法。
根据计算参与方个数不同,可分为只有两个参与方的2PC和多个参与方(≥3)的通用MPC
1)安全两方(2PC)计算所使用的协议为:Garbled Circuit(GC)+Oblivious Transfer(OT);
2)安全多方计算(MPC)所使用的协议为:同态加密+秘密分享+OT。

GC+OT的两方计算基本框架

在这里插入图片描述
1). 电路( Circuits)

  • 任一个多项式时间的功能函数 f 都存在一个与之对应的布尔电路图片 C ,可描述为电路 C 计算 f
  • 电路C由众多的门电路g(如或门、与门、非门等)连接组成,
  • 门电路 g 的两个输入线路分别为: α \alpha α, β ∈ \beta\in β {0,1};
  • 输出路线为: γ \gamma γ =g( α \alpha α, β \beta β),该输出线路的值可能为其他门电路的输入线路值或函数最终结果。
  • 电路C计算由输入值确定的门电路开始,按照电路拓扑一层一层往下计算,最后总能在电路的输出线路上得到最终输出结果。 这种原始的计算方式,电路 C 上各线路的值均为明文形式的比特值(0 or 1)。

2). 混淆电路(Garbled Circuits)

  • 为了实现安全计算,姚期智先生提出了一种方法对电路计算过程中所有门电路上的计算值进行加密,即每一条线路上的值: α \alpha α, β ∈ \beta\in β{0,1},随机选取两个值 k 0 k^0 k0, k 1 k^1 k1 α \alpha α, β \beta β 一一对应,称为混淆密钥,显然观察者并不能确定该线路上呈现的某一混淆值所对应的比特值,而仅能以的概率猜测正确。
  • 对电路 C 的每一条线路都选取一对随机混淆密钥,所构造的电路称为混淆电路(Garbled Circuits),记为 GC
  • 接着使用了“双重加密”方式,即对每个门电路,分别将两输入线路上的混淆值作为加密密钥,加密这两个输入混淆值所对应的输出混淆值,得出该门电路的“加密计算表”。

Fig1.或门:真值表

α \alpha α β \beta β γ \gamma γ
000
011
101
111

Fig2.或门:加密计算表

α \alpha α β \beta β γ \gamma γ
k α 0 k_\alpha^0 kα0 k β 0 k_\beta^0 kβ0 E k α 0 E k β 0 ( k γ 0 ) E_{k_\alpha^0}E_{k_\beta^0}(k_\gamma^0) Ekα0Ekβ0(kγ0)
k α 0 k_\alpha^0 kα0 k β 1 k_\beta^1 kβ1 E k α 0 E k β 1 ( k γ 1 ) E_{k_\alpha^0}E_{k_\beta^1}(k_\gamma^1) Ekα0Ekβ1(kγ1)
k α 1 k_\alpha^1 kα1 k β 0 k_\beta^0 kβ0 E k α 1 E k β 0 ( k γ 1 ) E_{k_\alpha^1}E_{k_\beta^0}(k_\gamma^1) Ekα1Ekβ0(kγ1)
k α 1 k_\alpha^1 kα1 k β 1 k_\beta^1 kβ1 E k α 1 E k β 1 ( k γ 1 ) E_{k_\alpha^1}E_{k_\beta^1}(k_\gamma^1) Ekα1Ekβ1(kγ1)
  • 加密计算表中各行应随机排序后存储,防止因位置而泄露门电路的输入信息。
  • 另外,GC 在最终输出的各个线路上,需要保存各输出线路上的随机混淆值与其对应真实值的映射关系,称为“输出解密表”,否则由于混乱值的相同分布将难以解得最终的计算结果。

3). 姚氏两方协议

  • 姚期智在1986年提出了一个安全两方计算的通用协议,称为姚氏两方协议,该协议是基于混乱电路(Garbled Circuits) 和 不经意传输(Oblivious Transfer)协议设计的,并被证明在半诚实敌手模型下是安全的。
    现假设有两个参与方Alice,Bob,各自拥有私有数据 x,y, 这两个参与方希望在不泄露自己私有数据的前提下计算函数值f(x,y)。

  • Alice首先将整个计算函数 f(x,y)转换为电路C,并构造电路C的混淆电路GC,并将图片GC的混淆表(由所有门电路的加密计算表组成)发送给Bob

  • Alice将自己的私有数据 x 转化成GC电路中相应输入线路上的混淆值 k α k_\alpha kα,并发给Bob

  • Alice 和 Bob 通过逐比特执行二选一的茫然传输协议(1-out-of-2 oblivious transfer),经过多次茫然传输协议后,Bob 获得其私有数据y对应的混淆值, OT协议保证了Alice不能获取Bob的私有输入数据

  • Bob 使用所得的所有输入混淆值,正确计算GC,得到最终结果f(x,y),并将结果告诉Alice。因为Bob拥有的只是混淆电路GC,以及Alice的混淆输入值,所以Bob不能根据Alice的输入混淆值推出Alice的私有数据。


http://chatgpt.dhexx.cn/article/OQ08fJ1Y.shtml

相关文章

安全多方计算之二:一文搞懂百万富翁问题

百万富翁问题 1. 解决方案2. 协议描述3. 协议说明4. 协议举例5. 协议扩展 两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方及其他第三方知道自己财富的任何信息,这是由中国计算机科学家、2000年图灵奖获得者姚启智教授于1982年在论文《…

安全多方计算-入门学习笔记(三)

四、基于非噪音的安全多方计算介绍 1概念 非噪音方法一般是通过密码学方法将数据编码或加密,得到一些奇怪的数字,而且这些奇怪的数字有一些神奇的性质,比如看上去很随机但其实保留了原始数据的线性关系,或者顺序明明被打乱但人们…

基于隐私保护的安全多方计算区块链融合技术的智能合约

安全多方计算与区块链的融合技术 SMPC-安全多方计算综述安全的定义安全模型SMPC效率问题 区块链应用:智能合约智能合约的问题SMPC需求引入 基于SMPC的智能合约辅助:MPI协议-效率提升 SMPC-安全多方计算综述 随着物联网、移动计算、大数据、云计算的快速…

安全多方计算之GMW协议

安全多方计算之GMW协议 一、背景 论文原文《How to play any mental game》。作者:Micali S, Goldreich O, Wigderson A. 发表在:Proceedings of the Nineteenth ACM Symp on Theory of Computing, STOC. GMW协议可以同时适用在布尔电路和算术电路&am…

多方安全计算概述

多方安全计算(Secure Multi-Party Computation, MPC)是密码学的一个分支,在无可信第三方的情况下,仍可安全地按照公开的计算逻辑,进行数据协同计算,并输出结果。 即使参与各方输入的数据只有自…

安全多方计算之一:什么是安全多方计算

安全多方计算 1. 安全多方计算简介2. 基本概念2.1 参与者2.2 攻击者 3. 安全多方计算的模型4. 安全多方计算的密码学工具5. 学习参考 1. 安全多方计算简介 安全多方计算问题SMC,Secure Multi-party Computation)由由中国计算机科学家、2000年图灵奖获得…

安全多方计算简介

文章目录 一、安全多方计算定义二、安全多方计算安全模型1.行为模型2.安全门限 三、安全多方计算关键技术1.秘密共享(Secret Sharing, SS)2.不经意传输(Oblivious Transfer, OT)3.混淆电路(Garbled Circuit, GC) 参考资料 一、安全多方计算定义 安全多方计算(Secure Multi-Par…

安全多方计算 # 个人笔记

一个优美令人如痴如醉的领域。 Data is the oil of the 21st century 欢迎读者拍砖和提供本文修改建议。本文长期维护。 第二次编辑于2021/10/20,新增了部分阅读材料,调整了文章内容的组织。 0 研究背景 【最后更新于2021/10/20】 时代背景&#xff1…

Verilog操作符

操作符优先级表 Verilog中的大小(size)与符号 Verilog根据表达式中变量的长度对表达式的值自动地进行调整; Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度; 当一个负数赋值给无符号变量如reg时,Verilog自动完成二进制补码计算; 算术运算符 加(+)、减(-…

C语言——操作符详解

目录 一、算术操作符 二、移位操作符 三、位操作符 四、赋值操作符 五、单目操作符 六、关系操作符 七、逻辑操作符 八、条件操作符 九、逗号表达式 十、下标引用、函数调用和结构成员 以上就是C语言中涉及到得操作符,我将用代码实例配合说明&#xff0c…

教妹学Java(十一):操作符简介

大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。本篇文章通过我和三妹对话的形式来谈一谈“Java 中的操作符”。 教妹学 Java,没见过这么有趣的标题吧?“语不惊人死不休”,没错&…

位运算操作符详解

文章目录 一. 移位操作符>> <<1. 整数的二进制表示Ps:怎么确定一个数在内存中占几位呢&#xff1f; 2. <<左移操作符3. >>右移操作符 二. 位操作符& &#xff5c;^1. &按&#xff08;二进制&#xff09;位与2. &#xff5c;按&#xff08;二进…

【C语言】操作符详解

文章目录 前言一、操作符分类二、用法详述1.算数操作符2.移位操作符2.1左移操作符2.2右移操作符2.3警告&#xff1a; 3.位操作符3.1 & 按位与3.2 | 按位或3.3 \^ 按位异或 4.赋值操作符5.单目操作符5.1逻辑反操作符 !5.2 自增、自减操作符 、--5.3 按位取反 ~ 6.关系操作符…

集合类型的操作符(共10个)

注意&#xff1a;本次所有的举例均为s{1,2,3,4,5},t{4,5,6,7} 1.S - T 或 S.difference(T): 返回一个新集合&#xff0c;包括在集合S中但不在集合T中的元素 eg:2.S - T或S.difference_update(T): 更新集合S&#xff0c;包括在集合S,包括在集合S中但不在集合T中的元素。 eg: 3.S…

c++ 操作符大全-算术操作符、关系操作符、逻辑操作符、位操作符、自增自减操作符、赋值操作符、条件操作符、逗号操作符、操作符优先级

文章目录 操作符1、算术操作符2、关系操作符3、逻辑操作符4、位操作符5、自增自减操作符6、赋值操作符7、条件操作符8、逗号操作符9、操作符优先级 操作符 计算机程序可以看作一串运算式&#xff0c;可以对各种运算类型进行运算。这种运算不仅仅是代数上的加减乘除&#xff0c…

操作符详解—c语言

目录 1. 操作符分类&#xff1a; 2. 算术操作符 3. 移位操作符 3.1 左移操作符 3.2 右移操作符 4. 位操作符 5. 赋值操作符 6. 单目操作符 6.1 单目操作符介绍 7. 关系操作符 8. 逻辑操作符 9. 条件操作符 10. 逗号表达式 11. 下标引用、函数调用和结构成…

【SV】流操作符

流操作符 作用 把其后的数据打包成一个比特流 >>和<< 操作符>>把数据从左向右变成流&#xff0c;<<则把数据从右到左变成流。 注意&#xff1a; 可以指定一个片段宽度&#xff0c;把源数据按照这个宽度分段以后再转变成流。 例如 h{>>1{j}} 或…

C语言操作符总结

目录 1.算术操作符 2.移位操作符 3.位操作符 4.赋值操作符 5.单目操作符 6.关系操作符 7.逻辑操作符 8.条件操作符 9.逗号表达式 10.下标引用、函数调用和结构成员 C语言中操作符总共有10种&#xff0c;分别是&#xff1a; 算术操作符&#xff0c;移位操作符&#xf…

C语言操作符汇总

目录 一、算术操作符 二、移位操作符 三、位操作符 四、赋值操作符 五、单目操作符 六、关系操作符 七、逻辑操作符 八、条件操作符 九、逗号表达式 十、下标引用、函数调用和结构成员 C语言的操作符分为以下10种&#xff1a; 算术操作符移位操作符位操作符赋值操作…

python 操作符

1.注释: 三种 # " " " 2.输入输出 输出:print() 输入input() 3.变量 保存数据的,就是一个容器 变量名 值 修改变量的值:变量名 新值 *变量的命名: a-z A-Z 0-9 _ 注意:不能以数字开头,就以字母开头就好,_有特殊的作用,不能使用关键字 关键字: …