当前位置: 首页 > news >正文

【隐私计算篇】混淆电路之深入浅出

        入门隐私计算的阶段,一般都会涉及对于混淆电路的学习,这是因为混淆电路是多方安全计算中的基础密码原语,也是隐私保护中重要的技术。为了帮助更好地理解混淆电路的原理,今天对其进行原理以及相关优化手段进行解析和分享。

1. 混淆电路简介

        混淆电路,也被称为Yao-garbled circuits,是一种用于在加密输入上安全计算函数的密码学技术,广泛应用于安全多方计算协议中。

        在混淆电路中,函数的输入和输出被加密,同时电路本身被混淆以隐藏其内部结构,接收方不知道电路中的具体门结构和逻辑。混淆的过程包括为电路的输入和输出线路分配随机标签,并加密每个逻辑门的真值表条目。混淆后的电路会被发送给接收方,接收方拥有必要的解密密钥。

        接收方在评估混淆电路时,使用输入标签确定每个逻辑门的正确真值表条目,并解密这些条目以获得输出标签。通过将输出标签与预定义的期望输出标签进行比较,接收方可以获取计算结果,而不会泄露输入或计算函数的任何信息。

        混淆电路提供了一种在不向参与计算的任何一方透露敏感信息的情况下,在加密数据上执行安全计算的方法。它们在安全计算协议、隐私信息检索和隐私保护机器学习等各个领域都有广泛应用。

2. 实现原理

        混淆电路的实施,主要分为四个主要步骤:混淆方(发送方)准备(生成混淆电路)、通信(OT及混淆表)、评估方(接收方)计算(执行电路)、解码及共享(获得最终结果)。原理图参考OSU Mike Rosulek教授关于GC的分享【1】。

2.1 准备阶段

        发送方(混淆方)将要计算的函数表示为一个布尔电路,其中包含输入门、输出门和内部逻辑门。


        发送方为每个输入和输出门生成两个随机的比特字符串,称为标签(labels)。一个标签对应于0的输入,另一个标签对应于1的输入。


        发送方为每个内部逻辑门生成一个加密的真值表。每个真值表条目包含对应的输入标签的加密结果。

'''
pre-generate garbled truth table
'''class PreGenerateGTT(object):def __init__(self, bits=64, file='compare.json'):self.circuit = parse_json(file)self.GTTs = []self.bits = bitsdef generate_k_garbled_table(self, k):for i in range(k):b_labels, c_labels, tables, circuit_info = generate_labels(self.circuit)self.GTTs.append((b_labels, c_labels, tables, circuit_info))return self.GTTsdef generate_alice_labels(self, batch_a, gtts):a_labels_arr = []for i in range(len(batch_a)):a_bytes = intToBin(batch_a[i], self.bits)[::-1]b_labels, c_labels, tables, circuit_info = gtts[i]a_labels = generate_a_labels(self.circuit, circuit_info, a_bytes)a_labels_arr.append(a_labels)return a_labels_arr

2.2 传输阶段

        发送方将加密的真值表和标签发送给接收方。
        发送方还将混淆电路的结构信息(如门之间的连接关系)发送给接收方,但接收方不知道具体的门结构和逻辑。

2.3 执行阶段

        接收方根据自己的输入值,使用输入标签替换电路的输入门,这里涉及到1-out-of-2 OT技术,也就是接收方需要将自己的输入值作为选择bit,从混淆方获得对应的随机标签信息。


        接收方根据混淆电路的结构信息,使用加密的真值表来计算每个内部逻辑门的输出标签。这里涉及到使用输入的label对每一个对应的门混淆表进行解密,只能正确解密其中的一个真值标签。
        接收方根据输出标签替换电路的输出门。


        接收方将最终的输出标签发送回发送方。

2.4 解码阶段

        发送方使用自己持有的解密密钥,解密接收到的输出标签。
        发送方根据解密的结果确定最终的输出值。

         Yao‘s混淆电路的实现依赖于加密技术和零知识证明的概念。通过对输入和输出进行加密和混淆,以及仅通过标签的比较来传递计算结果,Yao‘s混淆电路实现了对计算过程的保密性和隐私性。这种技术被广泛应用于安全多方计算和隐私保护领域,以实现在保护敏感数据的同时进行计算。

3.优化手段

        混淆电路虽然是一种比较有效的多方安全计算技术,但是目前业内的应用相对有限,这可能是因为其工程实现以及大规模数据上、低带宽下的性能问题。从章节2中可以看到混淆电路可能涉及大量的逻辑门,将会带来庞大的混淆表通信消耗,。因此,自从Yao提出混淆电路后,后续有一系列对该算法的优化,如下图所示,Classical是经典的实现,之后学术界相继提出了点和置换(Point&Permutation)、Garbled Row Reduction(GRR3)、Free XOR、GRR2、FleXOR、半门(HalfGates),可以看到HalfGates在电路大小和garble环节相对classical有了很大的优化。

3.1 点和置换(Point&Permutation)

        随机分配颜色对给每对电线标签,在电线标签中包含颜色 (例如,作为最后一位),按密钥的颜色规范地排列四个密文,过解密由你颜色索引的密文来评估。点和置换技术 [BMR90] 使接收方无需尝试解密所有四个密文。它将每根电线 w与两个选择位 p0和 p1以及标签 W0 和 W1相关联。在评估一个门时,接收方使用对应于两个输入电线的选择位(例如, pi和 pj对应于电线 wi和 wj)来确定解密门k中的哪个密文。

def point_and_permute_garble(left_wire, right_wire, output_wire, gate_type):truth_table = generate_truth_table(gate_type)garbled_table = [None] * 4for line in truth_table:output_label = output_wire.get_label_by_value(line[2])key_left = left_wire.get_label_by_value(line[0])key_right = right_wire.get_label_by_value(line[1])ciphertext = enc_hash(key_left.label, key_right.label, bytes_to_int(output_label.label))garbled_table[2 * key_left.pp_bits + key_right.pp_bits] = ciphertextreturn garbled_table

3.2 混淆行减少 (Garbled Row Reduction, GRR3)

        混淆行减少 [NPS999],允许消除一个密文。这是通过选择一个标签使得对应的密文为0来实现的。(被消除的密文总是由选择位决定的顶部密文。)

def grr3_garble(left_wire, right_wire, output_wire, gate_type):set_zero_ciphertext(left_wire, right_wire, output_wire, gate_type)garbled_table = [None] * 3for left_label in left_wire.labels():for right_label in right_wire.labels():left_pp = left_label.pp_bitsright_pp = right_label.pp_bitsif left_pp or right_pp:in1 = left_label.valuein2 = right_label.valueboolean_to_str = {True: '1', False: '0'}logic_value = boolean_to_str[logic(int(in1), int(in2), gate_type)]output_label = output_wire.get_label_by_value(logic_value)ciphertext = enc_hash(left_label.label, right_label.label, bytes_to_int(output_label.label))garbled_table[2 * left_pp + right_pp - 1] = ciphertextreturn garbled_table

3.3 自由XOR(FreeXOR)

        FreeXOR技术 [KS08] 使得计算XOR门变得无通信代价。它通过固定标签 W0​ 和 W1之间的关系来实现这一点。在混淆电路时,发送方选择一个随机字符串 R \in \{0,1\}^b。发送方然后随机选择每个标签 W0​ 并设置 W1=W0⊕R。如果门 gk是一个XOR门,并且以电线 wi​ 和 wj作为输入,那么电线 wk的新标签可以通过简单地取标签 Wi和 Wj的XOR来计算【2】。

def free_xor_garble(left_wire, right_wire, output_wire, gate_type):if gate_type == 'XOR':C0 = xor(left_wire.label0.label, right_wire.label0.label)C1 = xor(C0, gloVar.R)pp_bit = get_last_bit(C0)f_label = output_wire.label0t_label = output_wire.label1f_label.label = C0f_label.pp_bits = pp_bitt_label.label = C1t_label.pp_bits = not pp_bitreturn None

3.4 GRR2

        混淆行减少(Garbled Row Reduction,GRR2)[PSSW09],第二种形式的混淆行减少,允许消除两个密文而不是一个。然而,虽然第一种形式的混淆行减少与Free异或(free-XOR)技术兼容,但这种形式(GRR2)却不兼容。在GRR2中,评估者不是通过解密一次性填充加密来恢复输出标签,而是通过对二次曲线进行多项式插值来完成。输出标签被编码为y轴截距。评估者将拥有三个点来进行插值,这是进行插值所需的最低点数。由于可能存在两个输出标签,因此需要考虑两个不同的二次多项式。它们被设计成在混淆门中包含的两个点上精确相交。

3.5 FleXOR

        Kolesnikov等人 [KMR14]提出了通过动态转换电线标签以保持恒定距离R,从而将自由XOR技术与AND门优化相结合的方法。根据是否需要这种转换(即,XOR门的输入是否是AND门的输出),XOR混淆门包含0到2个密文。

3.6 Half Gates

        Zahur等人[ZRE15]介绍了第一种仅需要每个混淆AND门两个密文并且与FreeXOR优化兼容的技术。他们利用了对于任意 b \in \{0,1\}v_i \land v_j = (v_i \land (v_j \oplus b)) \oplus (v_i \land b)这一事实。在Half Gates技术中, b 被确定为用来计算选择位 p_j = v_j \oplus r_j的随机值r_jb = r_j由混淆方选择,并且v_i \oplus b = p_j被透露给评估方。利用她对 b的了解,混淆方可以通过单个密文有效地混淆“混淆方半门”v_i \land b。由于评估方知道v_i \oplus b,因此可以基于该值进行不同的操作,混淆方可以同样有效地通过单个密文混淆“评估方半门” v_i \land (v_j \oplus b)。对这两个AND操作取XOR是无通信代价的,因此只需要两个密文。        

def half_gates_garble(left_wire, right_wire, output_wire, gate_type):if gate_type == 'AND':def H(x):return hashlib.sha256(x).digest()p_a = left_wire.label0.pp_bitsp_b = right_wire.label0.pp_bitsC0 = H(left_wire.label0.label)# Generator Half Gateentry1 = xor(C0, H(left_wire.label1.label))if p_b:entry1 = xor(entry1, gloVar.R)if p_a:C0 = xor(C0, entry1)# Evaluator Half GateC0_ = H(right_wire.label0.label)entry2 = xor(C0_, H(right_wire.label1.label))entry2 = xor(entry2, left_wire.label0.label)if p_b:C0_ = xor(C0_, xor(entry2, left_wire.label0.label))table = [entry1, entry2]xor_c0_c0_ = xor(C0, C0_)update_output_wire(xor_c0_c0_, xor(xor_c0_c0_, gloVar.R), output_wire)return tableelif gate_type == 'XOR':return free_xor_garble(left_wire, right_wire, output_wire, gate_type)else:return grr3_garble(left_wire, right_wire, output_wire, gate_type)

4.参考材料

【1】Practical Garbled Circuit Optimizations

【2】A Gentle Introduction to Yao’s Garbled Circuits

        

相关文章:

【隐私计算篇】混淆电路之深入浅出

入门隐私计算的阶段,一般都会涉及对于混淆电路的学习,这是因为混淆电路是多方安全计算中的基础密码原语,也是隐私保护中重要的技术。为了帮助更好地理解混淆电路的原理,今天对其进行原理以及相关优化手段进行解析和分享。 1. 混淆…...

基于GRU神经网络的微博分类预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 gru的原理 GRU神经网络微博分类 结果分析 展望 参考论文 背影 传统的方法微博分类预测准确率低,为提高精度,本文用gru进行预测 摘要 LSTM原理,GRU原理,MATALB编程gru的微博分类预测 LSTM的基本定义 LSTM是一种含有LST…...

LVS-DR模式集群:案例与概念

DR模式(直接路由) 概念 Direct Routing,简称DR模式采用半开放式的网络结构,与TUN模式的结构类似,但内网服务器并不是分散在各地,而是与调度器位于同一个物理网络负载调度器与内网服务器通过本地网络连接&a…...

拓扑排序:Kahn算法与DFS算法

引言 拓扑排序是有向无环图(DAG)中的一种线性排序,使得对于图中的每一条有向边 ( u \rightarrow v ),顶点 ( u ) 在排序中出现在顶点 ( v ) 之前。本文将详细介绍两种实现拓扑排序的算法:Kahn算法和基于深度优先搜索&…...

图像处理 -- Sobel滤波器的实现原理与使用案例

Sobel滤波器 概述 Sobel滤波器是一种边缘检测方法,用于图像处理和计算机视觉领域。它通过计算图像灰度值的梯度来检测边缘。Sobel滤波器结合了高斯平滑和微分操作,以减少噪声并增强边缘检测效果。 实现原理 Sobel滤波器通过使用两个3x3卷积核&#x…...

机器学习 第10章-降维与度量学习

机器学习 第10章-降维与度量学习 10.1 k近邻学习 k近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督学习方法其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。通…...

linux驱动:(7)物理地址到虚拟地址映射

单片机、裸机、linux操控硬件方法 在单片机和裸机中操作硬件是通过指针来对寄存器赋值来进行操控 但对于linux中不能这样,不能直接对物理地址直接修改,因为linux使能了mmu,所以不能直接菜操作物理地址 如果要操作硬件,需要先把…...

浏览器用户文件夹详解 - Preferences(十)

1.Preferences简介 1.1 什么是Preferences文件? Preferences文件是Chromium浏览器中用于存储用户个性化设置和配置的一个重要文件。每当用户在浏览器中更改设置或安装扩展程序时,这些信息都会被记录在Preferences文件中。通过这些记录,浏览…...

Robot Operating System——电池电量通知

大纲 应用场景定义字段解释 案例 sensor_msgs::msg::BatteryState 是 ROS 2 中定义的消息类型,用于表示电池状态。它包含了电池电量、电压、电流、温度等信息。 应用场景 机器人 电池监控:在移动机器人中,电池是主要的电源。BatteryState 消…...

二进制安装docker

目录 一、准备 Docker CE 二进制包 二、解压.tgz包 三、复制二进制文件到/usr/bin/目录 四、创建用户组 五、配置相关服务配置文件 六、拷贝配置文件到指定目录 七、启动 dockerd 服务进程 八、shell脚本一键安装 一、准备 Docker CE 二进制包 https://download.docker…...

@SpringBootConfiguration重复加载报错

Junit单元测试Test启动报错,SpringBootConfiguration注解重复问题排查: SpringBootApplication 注解的 exclude 属性用于排除特定的自动配置类,而不是用于排除主配置类本身。因此,不能通过 exclude 属性来排除主配置类的加载。 …...

【SpringBoot】数据验证之分组校验

分组校验 在不同情况下,可能对JavaBean对象的数据校验规则有所不同,有时需要根据数据状态对JavaBean中的某些属性字段进行单独验证。这时就可以使用分组校验功能,即根据状态启用一组约束。 Hibernate Validator的注解提供了groups参数&#…...

MySQL Galera Cluster 部署与介绍

目录 主要特点 组件 一. 环境准备 二. 配置 1. 配置 galera1 主机的my.cnf的文件 2. 配置 galera2 主机的my.cnf的文件 3. 配置 galera3 主机的my.cnf的文件 4. 在给galera1 主机的my.cnf的文件增加节点 5. 写入数据验证同步 6. 配置 galera4 主机的my.cnf的文件 M…...

RuoYi-Vue-Plus (XXL-JOB任务调度中心二:配置管理与定时任务编写、执行策略、命令行任务、邮件报警等等

一、后端xxl job的配置属性介绍 enabled : 是否开启执行器,如果为false,调度中心就调用不了后端定时任务admin-addresses:调度中心的地址,多个则可以逗号拼接: url1,url2,url3access-token: 执行器通讯TOKEN ,必须和x…...

【docker】虚拟化与docker基础

一、虚拟化 1.虚拟化概述 什么是虚拟化? 虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率 2、虚拟化的功能 将虚拟化的性能优化趋近于物理资源的性能,主要用于提高资源利用…...

Vue3安装ffmpeg做视频截取报错

通过 yarn 安装 ffmpeg 时报错。 即,执行以下指令时报错: yarn add ffmpeg/ffmpeg^0.10.0 yarn add ffmpeg/core^0.10.0错误信息: node_modules\pngquant-bin: Command failed. Error: pngquant failed to build, make sure that libpng-d…...

如何在 Java 中实现自定义的排序算法?

在Java中实现自定义排序算法的步骤如下: 创建一个类,实现Java的Comparator接口,该接口包含一个compare方法,用于比较两个对象的大小。在compare方法中,根据自定义的排序规则,比较两个对象的大小并返回-1、…...

【Homebrew】brew 命令

Brew(也称为Homebrew)是Mac OS上的一款包管理器,它允许用户通过简单的命令行界面来安装、更新、卸载和管理软件包。以下是一些常用的Brew命令及其功能说明: 安装与卸载 安装Brew 命令(适用于大多数用户,可…...

【https】无法安装OpenSSL时如何在局域网开通https服务

【背景】 做Stream传输服务,需要用到fetch方法,所以自然也需要https服务。 公司的开发机由于某些管理上的原因无法直接安装openssl for win的安装包。 【分析】 没有命令行工具,就试试看万能的python包吧,直接安装cryptography包。 pip install cryptography【方法】 …...

OpenGL实现3D游戏编程【连载1】——初探3D世界

1、前言 在我学习C的过程中,研究了一下OpenGL编程,打开了3D世界的编程世界,3D世界的效果还是相当不错。而且OpenGL能够支持跨平台兼容,是不错的学习方向,于是就自己学习了网上的很多教程,并将所有学到的知…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

离线语音识别方案分析

随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...