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

用Python手把手模拟一个混淆电路(Garbled Circuit):从Alice和Bob的故事理解安全多方计算

用Python手把手模拟一个混淆电路从Alice和Bob的故事理解安全多方计算在数字时代数据隐私的重要性日益凸显。想象这样一个场景两位商业伙伴Alice和Bob希望共同计算一个商业决策但都不愿意透露自己的核心数据。这种需求催生了安全多方计算Secure Multi-party Computation, MPC技术而混淆电路Garbled Circuit正是实现这一目标的精妙工具。本文将带您用Python一步步构建一个完整的混淆电路模拟通过Alice和Bob计算逻辑与门的生动故事避开复杂的数学证明直接从代码层面理解这一密码学协议的核心思想。我们不仅会实现生成随机标签、构建混淆表、模拟不经意传输OT等关键步骤还会深入探讨每一行代码背后的设计哲学。1. 环境准备与基础概念在开始编码之前让我们先搭建开发环境并理解几个核心概念。您需要安装Python 3.8版本并确保已安装以下库pip install pycryptodome numpy混淆电路的核心思想可以用三个关键词概括电路加密将计算逻辑转化为布尔电路后对每个门的真值表进行加密和混淆输入隐藏参与方通过随机标签和OT协议隐藏真实输入协同解密只有拥有正确输入标签的参与方才能解密最终结果让我们用一个简单的表格对比传统计算与混淆电路的区别特性传统计算混淆电路输入隐私所有参与方可见各自输入保持私密计算过程明文执行加密电路执行结果验证直接可见需协作解密通信开销低中等2. 构建基础与门电路我们从最简单的逻辑与门开始。在布尔代数中与门的真值表如下XYX AND Y000010100111在混淆电路中Alice需要为这个真值表生成随机标签。以下是Python实现import os from Crypto.Cipher import AES def generate_labels(): 生成X,Y,Z的随机标签 return { X0: os.urandom(16), # X0的标签 X1: os.urandom(16), # X1的标签 Y0: os.urandom(16), # Y0的标签 Y1: os.urandom(16), # Y1的标签 Z0: os.urandom(16), # Z0的标签 Z1: os.urandom(16) # Z1的标签 }注意实际应用中应使用密码学安全的随机数生成器这里为简化使用os.urandom接下来我们需要构建混淆表。这个过程分为三个步骤用标签替换原始真值表对输出标签进行双重加密随机打乱行顺序3. 实现加密与混淆过程让我们深入混淆表的核心构建逻辑。首先定义加密函数def double_encrypt(data, key1, key2): 使用两个密钥进行连续AES加密 cipher1 AES.new(key1, AES.MODE_ECB) cipher2 AES.new(key2, AES.MODE_ECB) return cipher2.encrypt(cipher1.encrypt(data))然后构建完整的混淆表生成函数import random def build_garbled_table(labels): 构建混淆表 # 原始真值表 (X,Y) - Z truth_table [ (0, 0, 0), (0, 1, 0), (1, 0, 0), (1, 1, 1) ] garbled_table [] for x_val, y_val, z_val in truth_table: # 获取对应标签 x_label labels[fX{x_val}] y_label labels[fY{y_val}] z_label labels[fZ{z_val}] # 双重加密Z标签 encrypted_z double_encrypt(z_label, x_label, y_label) garbled_table.append(encrypted_z) # 打乱行顺序 random.shuffle(garbled_table) return garbled_table这个混淆表的神奇之处在于即使被窃听者获取没有正确的输入标签也无法解密出任何有意义的信息。4. 模拟不经意传输(OT)协议不经意传输是混淆电路的关键组件它允许Bob获取自己输入对应的标签同时Alice无法知道Bob的具体选择。以下是简化版的OT模拟def oblivious_transfer(alice_messages, bob_choice): 模拟1选2不经意传输 alice_messages: (msg0, msg1) bob_choice: 0或1 返回bob选择的消息alice不知道选择的是哪个 # 实际OT协议会更复杂这里仅作演示 return alice_messages[bob_choice]在实际应用中OT协议会使用更复杂的密码学原语来保证安全性但对我们理解混淆电路流程而言这个简化版本已经足够。5. 完整协议流程实现现在我们将所有组件组合起来模拟Alice和Bob的完整交互过程def simulate_garbled_circuit(alice_input, bob_input): 模拟完整混淆电路协议 # Alice生成标签和混淆表 labels generate_labels() garbled_table build_garbled_table(labels) # Alice发送自己输入对应的标签给Bob alice_label labels[fX{alice_input}] # Bob通过OT获取自己输入对应的标签 bob_label oblivious_transfer( (labels[Y0], labels[Y1]), bob_input ) # Alice发送混淆表给Bob # Bob尝试解密混淆表 result_label None for entry in garbled_table: try: # 尝试解密 cipher1 AES.new(alice_label, AES.MODE_ECB) cipher2 AES.new(bob_label, AES.MODE_ECB) decrypted cipher1.decrypt(cipher2.decrypt(entry)) # 检查解密结果是否是有效的Z标签 if decrypted in [labels[Z0], labels[Z1]]: result_label decrypted break except: continue # Bob将结果标签发送给Alice进行解码 if result_label labels[Z0]: final_result 0 else: final_result 1 return final_result让我们测试这个实现# 测试所有可能的输入组合 for alice_in in [0, 1]: for bob_in in [0, 1]: result simulate_garbled_circuit(alice_in, bob_in) print(fAlice输入{alice_in}, Bob输入{bob_in} - 结果{result}) assert result (alice_in and bob_in) # 验证与门逻辑6. 协议安全性与优化探讨虽然我们的实现展示了混淆电路的核心思想但在实际应用中还需要考虑以下安全增强措施认证加密使用AES-GCM等认证加密模式防止密文篡改哈希承诺Alice应提交对标签的承诺防止后期篡改重复使用防护确保混淆表一次性使用性能优化方面现代混淆电路实现常采用以下技术免费XOR对XOR门实现零成本计算行缩减将4行的混淆表压缩为2行管道化并行处理多个门电路以下是一个优化后的混淆表生成示例def build_optimized_garbled_table(labels): 使用行缩减技术优化混淆表 # 只加密Z1的情况Z0可以通过其他方式推导 encrypted_z1 double_encrypt(labels[Z1], labels[X1], labels[Y1]) return [encrypted_z1]这种优化可以显著减少通信量但需要更复杂的协议设计来保证安全性。7. 从与门到通用计算虽然我们只实现了简单的与门但混淆电路的美妙之处在于其通用性。任何可计算的函数都可以转化为布尔电路进而通过混淆电路安全计算。这包括算术运算加法、乘法等比较运算大于、等于等复杂函数如神经网络推理将复杂函数转换为电路时需要考虑以下设计选择电路深度影响协议交互轮数门类型分布不同门类型的计算成本不同并行度可并行计算的部分以下是一个将加法器转换为电路的示例结构A3 B3 A2 B2 A1 B1 A0 B0 │ │ │ │ │ │ │ │ └──┼──┴──┼──┴──┼──┘ │ XOR XOR XOR │ │ │ │ │ AND AND AND │ │ │ │ │ ... ... ... │ │ │ │ │ Cout S3 S2 S1 S0在实际工程实现中Gazelle等框架已经展示了如何用混淆电路高效实现神经网络推理等复杂计算。8. 混淆电路在实际中的应用挑战尽管混淆电路理论优美但在实际部署时仍需考虑以下挑战通信开销对于复杂计算混淆表可能非常大计算成本加密操作对性能影响显著协议组合如何与其他MPC技术如秘密共享结合针对这些挑战工业界已经发展出多种混合方法混合协议对线性部分使用秘密共享非线性部分使用混淆电路预处理将大部分计算移到离线阶段专用硬件使用SGX等可信执行环境加速以下对比展示了不同场景下的协议选择场景特征推荐协议原因低延迟需求混淆电路恒定轮数高带宽环境秘密共享计算密集型非线性操作多混淆电路门电路友好线性操作多秘密共享高效加法在开发实际系统时我通常会先分析计算任务的特征然后选择最适合的协议组合。例如在实现隐私保护的机器学习推理时通常将矩阵乘法等线性运算用秘密共享实现而激活函数等非线性部分则使用混淆电路。

相关文章:

用Python手把手模拟一个混淆电路(Garbled Circuit):从Alice和Bob的故事理解安全多方计算

用Python手把手模拟一个混淆电路:从Alice和Bob的故事理解安全多方计算 在数字时代,数据隐私的重要性日益凸显。想象这样一个场景:两位商业伙伴Alice和Bob希望共同计算一个商业决策,但都不愿意透露自己的核心数据。这种需求催生了安…...

Memo性能优化秘籍:提升Flutter应用响应速度的10个技巧

Memo性能优化秘籍:提升Flutter应用响应速度的10个技巧 【免费下载链接】memo Memo is an open-source, programming-oriented spaced repetition software (SRS) written in Flutter. 项目地址: https://gitcode.com/gh_mirrors/me/memo Memo是一款基于Flutt…...

人机协同智能体(Human-in-the-loop)设计模式与最佳实践

从零到落地:构建高效可控的人机协同智能体(Human-in-the-loop)设计模式与最佳实践副标题:从ChatGPT插件监控到企业级合规风控,覆盖全场景的HITL实践指南摘要/引言 问题陈述 2023年被称为大语言模型(LLM&…...

Petastorm实战:构建端到端TensorFlow训练管道的7个步骤

Petastorm实战:构建端到端TensorFlow训练管道的7个步骤 【免费下载链接】petastorm Petastorm library enables single machine or distributed training and evaluation of deep learning models from datasets in Apache Parquet format. It supports ML framewor…...

Go泛型实战经验总结:何时应该在新老项目中采用泛型

Go泛型实战经验总结:何时应该在新老项目中采用泛型 【免费下载链接】go-generics-the-hard-way A hands-on approach to getting started with Go generics. 项目地址: https://gitcode.com/gh_mirrors/go/go-generics-the-hard-way Go泛型是Go 1.18版本引入…...

探索混沌之美:Chaos项目中逻辑斯蒂映射的三种可视化方法

探索混沌之美:Chaos项目中逻辑斯蒂映射的三种可视化方法 【免费下载链接】Chaos Visualizations of the connections between chaos theory and fractals through the logistic map; made for Veritasium YouTube video 项目地址: https://gitcode.com/gh_mirrors…...

基于RBAC与工作流融合的企业办公自动化系统-开题报告

目录RBAC与工作流融合的企业办公自动化系统开题报告概述关键技术分析系统架构设计预期成果与创新点实施计划与风险评估项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作点击我获取源码->->进我个人主页…...

【信息科学与工程学】【解决方案体系】第一篇 黑灯工厂解决方案06

大型电力变压器设计与制造全流程深度解析 第一部分:铁芯制造工艺体系 工艺模块 详细工艺步骤 核心工艺参数 其他参数 部件/原材料 控制指标/目标 加工设备类型 设备工艺/技巧/经验 1. 硅钢片原料检验​ 1.1 材料牌号确认(30ZH120, 27QG100等) 1.2 厚度测量(0.23mm, …...

python微信小程序的运动健身计划推荐系统

目录 系统概述核心功能技术实现应用场景 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统概述 Python微信小程序运动健身计划推荐系统旨在为用户提供个性化的健身方案。该系统结合用户…...

现代Web开发工程化实践:从模板到自动化部署的完整指南

1. 项目概述:一个现代Web应用的基础设施蓝图 最近在梳理个人技术栈和项目模板时,我深度体验了 aerlinn13/saelind 这个仓库。它不是一个可以直接运行的业务应用,而是一个精心设计的、用于快速启动现代Web项目的 基础设施模板与开发环境配…...

Go语言ARP工具包:从协议原理到网络诊断实战

1. 项目概述:一个被低估的网络诊断利器 如果你在运维、网络安全或者仅仅是喜欢折腾家庭网络的圈子里混过一段时间,大概率听说过或者用过 arp 命令。但大多数人,包括很多从业者,对它的认知可能还停留在“查看IP和MAC地址对应关系…...

低功耗单板计算机在远程传感中的设计与优化

1. 低功耗单板计算机的远程传感革命在阿拉斯加的输油管道监控站里,一台体积仅相当于信用卡大小的计算机已经连续工作三年,仅靠两节锂电池和一块巴掌大的太阳能板维持运转。这个真实案例展示了低功耗单板计算机(SBC)在极端环境下的惊人潜力。不同于传统工…...

GUID partition table, GPT 磁盘分区表

GPT分割表 LBA0 (MBR 兼容区块) 与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,存储了第一阶段的开机管理程式! 而在原本的分割表的纪录区内,这个兼容模式仅放入一个特殊标志的分割,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分割…...

如何批量调整图片大小?跨境电商卖家必备效率工具(附实操教程)

一、前言:你可能低估了“图片处理”的成本 如果你在做电商(尤其是跨境、多平台),一定经历过这种情况: 同一款商品,不同平台尺寸要求完全不同一次上新几十个 SKU,每个商品多张图用 PS 一张张改…...

如何将图片上的中文翻译成西班牙语?一键搞定电商详情页,低成本出海拉美市场(实战教程)

前言 在跨境电商越来越卷的今天,很多卖家开始把目光从欧美市场转向一个被低估的区域——拉丁美洲(LATAM)和西班牙市场。 但真正做起来你会发现,第一个拦路虎不是物流、不是选品,而是: ❗ 图片语言问题 尤…...

ARM性能采样机制与PMSFCR_EL1寄存器详解

1. ARM性能采样机制概述在现代处理器性能分析领域,硬件辅助的采样技术已成为不可或缺的工具。ARM架构通过FEAT_SPE(Statistical Profiling Extension)扩展提供了一套完整的性能采样解决方案,其中PMSFCR_EL1寄存器扮演着采样过滤控…...

DPDK 教程(二):mbuf、mempool、ethdev 的数据路径

1 DPDK 教程(二):mbuf、mempool、ethdev 的数据路径 本文对应学习路径第二步:把“包从网卡进来到被应用消费”的主链路读成一张图。读完你应能口述:描述符环 → PMD RX → mbuf 与 mempool → 用户处理 → TX burst →…...

智能体开发爆发期!程序员现在转型,还能赶上红利吗?

文章目录 前言一、为什么2026年是智能体开发的爆发元年?1.1 市场数据说话:万亿级赛道正在加速形成1.2 企业需求爆发:从"要不要做"到"怎么做"1.3 薪资差距拉大:同样3年经验,薪资差一倍 二、90%程序…...

OpencvSharp 算子学习教案之 - Cv2.Scharr

OpencvSharp 算子学习教案之 - Cv2.Scharr 大家好,Opencv在很多工程项目中都会用到,而OpencvSharp则是以C#开发与实现的Opencv操作库,对.NET开发人员友好,但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳,因…...

AMiner:研究生必备 AI 科研工具|文献调研・文献管理・代码复现一站式平台(基于 GLM 大模型)

科研中常遇到文献难找、资料混乱、算法难复现三大难题。AMiner作为一款AI for Science的AI学术科研工具,由清华大学唐杰教授团队研发,介入最新 GLM 大模型,提供文献调研、知识管理、代码辅助一站式服务,覆盖 3.3 亿文献、1.8亿专利…...

一文讲透编程基础的3大核心模块,新手入门再也不迷茫

文章目录前言一、数据结构:程序的骨架,没有它代码就是一盘散沙1.1 为什么AI写的代码你改不动?因为你不懂数据结构1.2 新手必学的5个核心数据结构,多一个都不用先学(1)数组:最基础也最重要的数据…...

【花雕动手做】几美元芯片就能跑的AI Agent:ESP-Claw如何用“聊天”重新定义硬件

当AI Agent突破虚拟世界的边界,开始直接控制物理设备,智能硬件的发展范式正被彻底改写。无需复杂编程,只需一句自然语言,就能让廉价硬件完成预设任务——这不是科幻场景,而是乐鑫科技开源项目ESP-Claw正在落地的现实。 作为一款开源项目,ESP-Claw在GitHub上线仅一个月便…...

0-π量子比特设计原理与拓扑保护机制

1. 0-π量子比特的物理基础与设计挑战 在超导量子计算领域,0-π量子比特因其独特的拓扑保护特性而备受关注。这种量子比特的设计基于两个关键自由度:θ和φ相位变量,分别对应电路中的两个正交振荡模式。与传统transmon比特相比,0-…...

Ubuntu history 命令实用教程(设置记录命令行数或永久记录等)

Ubuntu history 命令实用教程简介一、认识 history 是什么二、查看本机当前历史配置1. 查看当前历史条数限制2. 查看历史文件实际已有多少条记录三、手动设置 history 指定记录行数1. 编辑配置文件2. 写入指定行数配置3. 保存退出并生效四、设置 history 永久不删除&#xff08…...

Overture:一站式AI应用开发框架,快速构建大模型服务

1. 项目概述:一个开箱即用的开源AI应用框架最近在折腾AI应用开发的朋友,估计都绕不开一个核心问题:如何快速、稳定地把一个大语言模型的能力,封装成一个可以对外提供服务的API,甚至是带界面的Web应用。从模型加载、推理…...

VSCode扩展一键克隆Git仓库:告别终端切换,提升开发效率

1. 项目概述:在VSCode里直接克隆仓库,告别终端切换如果你和我一样,每天的工作流都离不开Git和VSCode,那你一定经历过这个场景:在浏览器上看到一个不错的开源项目,复制它的GitHub链接,然后切到终…...

第26课:OpenClaw|日志审计与问题诊断

文章目录26.1 OpenClaw的日志体系与日志级别日志的“两个表面”日志级别的分层逻辑WebSocket日志的三级样式Cache-Trace日志:穿透Agent上下文的黑盒26.2 工作目录中的.jsonl日志文件分析三类关键日志文件读取日志的三种方式三类日志的关联追踪法26.3 结构化日志的收…...

如何在macOS上轻松运行Windows程序?Whisky完整指南教程

如何在macOS上轻松运行Windows程序?Whisky完整指南教程 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 想在macOS上运行Windows专属软件却不想安装虚拟机?Whi…...

基于cursor-maker构建可复用AI指令模板,提升开发效率与代码一致性

1. 项目概述:一个为开发者赋能的AI代码生成工具如果你是一名开发者,尤其是经常在VSCode里写代码的朋友,那么对Cursor这款集成了AI能力的编辑器一定不陌生。它最大的魅力在于,你可以用自然语言描述你的需求,AI就能帮你生…...

ARMv8/9架构中RMR_EL3与SCR_EL3寄存器深度解析

1. ARM架构中的RMR_EL3与SCR_EL3寄存器解析在ARMv8-A/v9架构中,EL3(Exception Level 3)作为最高特权级,负责系统的安全监控和资源隔离。RMR_EL3和SCR_EL3是EL3级别的两个关键系统寄存器,它们共同构成了安全启动和运行时…...