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

安全多方计算(MPC)技术解析及NssMPClib开源项目实践

在数字化时代,数据已成为推动经济发展和科技创新的核心要素。随着各行业对数据价值挖掘的需求不断增长,跨机构、跨组织的数据协作变得日益频繁。然而,数据隐私与安全问题也随之凸显,传统集中式数据处理模式下,数据的收集、存储与使用往往面临着信任缺失、隐私泄露风险,以及合规性挑战,如欧盟的《通用数据保护条例》(GDPR)、美国的《加州消费者隐私法案》(CCPA)等法规,对数据处理的隐私保护提出了严格要求。在此背景下,安全多方计算(Secure Multi - Party Computation,MPC)技术应运而生,它允许多个参与方在不泄露各自原始数据的前提下,协同完成特定的计算任务,实现 “数据可用不可见”,为解决数据隐私保护与数据价值共享的矛盾提供了创新性解决方案。

自 1982 年图灵奖得主姚期智提出混淆电路(Yao's Garbled Circuit)概念,奠定了两方安全计算的基础以来,MPC 技术历经 40 余年的发展,从理论研究逐步走向实际应用,在金融、医疗、政务、工业等众多领域展现出巨大的应用潜力。它不仅在技术层面构建了可证明安全的隐私计算框架,推动了密码学理论的创新发展,更在产业层面为数据要素市场化流通提供了底层支撑,成为数字经济时代可信计算基础设施的重要组成部分。本文将深入探讨安全多方计算的技术原理、实现机制、应用场景及面临的挑战与未来发展趋势,全面剖析这一前沿技术在数字化转型浪潮中的关键作用与深远影响。

一、安全多方计算基础

1.1 定义与概念

安全多方计算(MPC)可以被定义为在一个分布式网络环境中,且不存在可信第三方的情况下,多个参与实体各自持有秘密输入,共同完成对某一预定函数的计算,并得到正确结果,同时保证每个参与实体均无法获取除自身输入及最终计算结果外,其他参与实体的任何输入信息。例如,在一个多方联合贷款风险评估场景中,银行、电商平台、征信机构等作为参与方,各自拥有客户的不同维度数据(如信用记录、消费行为、资产信息等),它们希望通过协同计算评估客户的贷款风险,但又不能泄露自身数据给其他方,MPC 技术则能满足这种需求。

从形式化角度来看,假设有 \(n\) 个参与方 \(P_1, P_2, \cdots, P_n\),每个参与方 \(P_i\) 持有秘密输入 \(x_i\),它们共同计算一个函数 \(f(x_1, x_2, \cdots, x_n) = y\),最终所有参与方都能得到计算结果 \(y\),但在计算过程中,任何一方都无法从协议执行过程中获取到其他方输入 \(x_j (j \neq i)\) 的额外信息。这一特性使得 MPC 在数据隐私敏感的应用场景中具有极高的价值。

1.2 安全模型

在 MPC 中,根据攻击者的能力和行为假设,定义了不同的安全模型,其中最常见的是半诚实模型(Semi - Honest Adversaries’ Security)和恶意行为模型(Malicious Adversaries’ Security)。

1.2.1 半诚实模型

在半诚实行为模型中,假设敌手会诚实地参与安全多方计算协议,严格按照协议的每一步进行操作。然而,敌手会试图通过观察协议执行过程中获取的信息,如中间计算结果、消息传输内容等,来推测其他参与方的隐私数据。这种模型适用于一些参与方有一定合作意愿,但仍存在窥探他人数据隐私动机的场景,例如部分企业间的数据合作,企业需要遵循既定的合作协议,但可能对合作方的数据存在好奇心理。在半诚实模型下设计的 MPC 协议,主要目标是防止敌手从协议执行过程中获取额外的隐私信息,通过加密、混淆等技术手段,对传输数据和中间结果进行保护,使得敌手即使获取了这些信息,也无法从中解析出有价值的隐私内容。

1.2.2 恶意行为模型

恶意行为模型则更贴近现实中复杂的安全挑战,在该模型中,恶意节点可能完全不遵循协议规定,采取任意恶意行为来破坏计算过程或获取其他参与方的隐私信息。例如,恶意节点可能伪造消息内容、拒绝响应其他节点的请求、篡改计算结果等。为了应对恶意行为模型下的安全威胁,MPC 协议需要具备更强的安全性和健壮性。通常会采用零知识证明、认证机制、纠错编码等技术,一方面验证参与方行为的合法性,确保每个参与方都按照协议正确执行操作;另一方面,即使存在恶意节点的干扰,也能保证计算结果的正确性和完整性,以及其他诚实参与方的数据隐私不被泄露。恶意行为模型下的 MPC 协议设计难度更高,对密码学技术的综合运用要求更为严格,但能提供更高级别的安全保障,适用于对安全性要求极高、参与方信任度极低的场景,如涉及国家安全、金融核心交易等领域的计算任务。

1.3 数学基础

安全多方计算技术依赖于丰富的数学理论和密码学基础构件,以下是一些关键的数学概念和技术在 MPC 中的应用。

1.3.1 同态加密(Homomorphic Encryption)

同态加密是一类具有特殊性质的加密算法,它允许对密文进行特定的代数运算,其结果与对明文进行相应运算后再加密的结果相同。即存在加法同态和乘法同态等性质,若 \(E()\) 为加密函数,\(D()\) 为解密函数,对于明文 \(m_1, m_2\),有 \(D(E(m_1)+E(m_2)) = m_1 + m_2\)(加法同态)和 \(D(E(m_1)\times E(m_2)) = m_1 \times m_2\)(乘法同态)。在 MPC 中,同态加密可用于在密文状态下进行数据计算,避免了对明文数据的直接操作,从而保护数据隐私。例如,在多方联合统计数据求和或求平均值的场景中,各参与方可以先将本地数据加密后发送给计算节点,计算节点在密文上进行加法等运算,最后解密得到正确的统计结果,整个过程中计算节点无法知晓各参与方的原始数据。

1.3.2 秘密共享(Secret Sharing)

秘密共享是将一个秘密信息拆分成多个份额,分发给不同的参与者。每个参与者仅持有秘密的一部分,单独一个或部分份额无法恢复出原始秘密,只有当收集到足够数量(达到门限)的份额时,才能通过特定算法还原出原始秘密信息。例如,在一个基于门限为 \(k\) 的秘密共享方案中,将秘密 \(S\) 拆分成 \(n (n \geq k)\) 个份额 \(s_1, s_2, \cdots, s_n\),分发给 \(n\) 个参与者,只有当至少 \(k\) 个参与者将其持有的份额提供出来,才能计算出原始秘密 \(S\)。秘密共享在 MPC 中常用于保护重要信息不被丢失或篡改,同时也能在计算过程中隐藏原始数据。例如,在多方协同计算任务中,可将敏感数据进行秘密共享后分发给各参与方,各参与方基于自己持有的份额进行计算,即使部分参与方的份额被泄露,也不会导致原始数据泄露,且能保证计算的正常进行。

1.3.3 不经意传输(Oblivious Transfer)

不经意传输是一种密码学协议,解决了发送方拥有多个信息,接收方只能获取其中部分信息,且发送方不知道接收方获取了哪些信息的问题。例如,Alice 拥有两组密封的密码组合,Bob 只能获得其中一组密码,并且 Bob 希望 Alice 不知道他选择了哪一组密码,此时就可以利用不经意传输协议来实现。在 MPC 中,不经意传输常用于实现安全的信息传递,确保接收方能够安全地获取所需信息,同时不泄露其选择信息的意图给发送方,从而保护双方的隐私。在混淆电路等 MPC 实现技术中,不经意传输是关键的底层协议之一,用于在双方之间安全地传输加密电路的输入标签等关键信息,保证计算过程的隐私性。

1.3.4 零知识证明(Zero - Knowledge Proof)

零知识证明是指证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。在零知识证明中,存在示证者(prover)和验证者(verifier)两个角色,示证者宣称某一命题为真,验证者通过一系列交互过程来确认该命题是否为真,且整个过程中验证者无法从交互过程中获取除命题真假之外的任何额外信息。例如,在一个身份验证场景中,用户作为示证者可以向服务器(验证者)证明自己知道某个密码或私钥,但无需将密码或私钥的具体内容告知服务器。在 MPC 中,零知识证明常用于验证恶意节点是否发送虚假数据、参与方身份的真实性等,确保计算过程的可靠性和安全性,防止恶意节点干扰计算或冒充合法参与方。

二、安全多方计算原理

2.1 姚氏百万富翁问题与混淆电路

姚氏百万富翁问题是安全多方计算领域的经典示例,由姚期智院士于 1982 年提出。该问题描述为:在没有可信第三方的情况下,两个百万富翁 Alice 和 Bob,如何在不泄露自己真实财富值的前提下,比较谁的财富值更高。这一问题看似简单,实则蕴含了数据隐私保护与安全计算的核心挑战。

为了解决这一问题,姚期智提出了混淆电路(Garbled Circuit)协议,该协议成为了两方安全计算的重要基础。以百万富翁问题为例,假设 Alice 的财富值为 \(a\),Bob 的财富值为 \(b\),他们希望通过混淆电路协议比较 \(a\) 和 \(b\) 的大小。

首先,将比较大小的计算问题转换为由与门(AND)、或门(OR)、非门(NOT)等组成的布尔逻辑电路。例如,对于两个比特位 \(x\) 和 \(y\) 的比较,可以通过如下布尔逻辑实现:如果 \(x = 1\) 且 \(y = 0\),则 \(x > y\),这可以用一个与门来表示。对于更复杂的财富值表示(通常为多个比特位),需要构建相应复杂的布尔电路。

然后,Alice 生成混淆电路。她为电路中的每一根输入线和输出线都随机生成两个不同的标签(label),分别用来代表 0 和 1。对于电路中的每个逻辑门,Alice 根据其真值表,使用这些标签对真值表进行替换和加密。例如,对于一个与门,其真值表有四种输入组合(00、01、10、11),Alice 将每种输入组合对应的输出值用相应的标签替换,并使用输入标签作为密钥对输出标签进行加密,得到加密后的真值表,即混淆表(Garbled Table)。之后,Alice 将混淆电路(包括所有加密的逻辑门和混淆表)以及与自己输入对应的标签发送给 Bob。

Bob 在接收到混淆电路后,需要根据自己的输入获取相应的输入标签。由于标签是由 Alice 生成的,Bob 通过不经意传输协议与 Alice 交互,在不向 Alice 透露自己输入信息的情况下,安全地获取到与自己输入对应的标签。例如,Bob 的输入为某个比特位值,他通过不经意传输协议从 Alice 处获得该比特位值对应的标签,而 Alice 无法得知 Bob 获取的是哪个标签。

Bob 拿到输入标签后,开始对混淆电路进行解密。他使用输入标签作为密钥,对混淆表中的加密输出标签进行解密。由于每个逻辑门的混淆表中只有一行的输入标签与 Bob 的实际输入标签匹配,所以他只能成功解密出一行的输出标签,通过迭代地对各个逻辑门进行解密,最终得到电路的输出结果。Bob 将该结果返回给 Alice,双方即可得知比较结果,且在整个过程中,Alice 和 Bob 都无法获取对方的具体财富值信息。

2.2 秘密共享原理与应用

秘密共享的核心原理基于信息论和多项式插值等数学方法。以最简单的基于加法的秘密共享方案为例,假设要共享的秘密为 \(S\),将其拆分成 \(n\) 个份额 \(s_1, s_2, \cdots, s_n\),使得 \(S = s_1 + s_2 + \cdots + s_n\)。每个份额 \(s_i\) 可以随机生成,只要保证所有份额之和等于秘密 \(S\) 即可。在实际应用中,更常用的是基于门限的秘密共享方案,如 Shamir 秘密共享方案,它基于多项式插值原理。

Shamir 秘密共享方案中,假设要共享的秘密为 \(S\),门限为 \(k\),即需要至少 \(k\) 个份额才能恢复秘密。首先,构造一个 \(k - 1\) 次多项式 \(f(x) = a_0 + a_1x + a_2x^2 + \cdots + a_{k - 1}x^{k - 1}\),其中 \(a_0 = S\),其他系数 \(a_1, a_2, \cdots, a_{k - 1}\) 从有限域 \(GF(p)\)(\(p\) 为一个大素数)中随机选取。然后,在有限域 \(GF(p)\) 中选取 \(n (n \geq k)\) 个不同的点 \(x_1, x_2, \cdots, x_n\),计算 \(y_i = f(x_i)\),\(i = 1, 2, \cdots, n\)。将 \((x_i, y_i)\) 作为一个份额分发给第 \(i\) 个参与者。

当需要恢复秘密 \(S\) 时,至少需要 \(k\) 个参与者提供他们的份额 \((x_{i_j}, y_{i_j})\),\(j = 1, 2, \cdots, k\)。根据多项式插值公式,如拉格朗日插值公式 \(f(x)=\sum_{j = 1}^{k}y_{i_j}\prod_{l\neq j}\frac{x - x_{i_l}}{x_{i_j}-x_{i_l}}\),可以唯一确定多项式 \(f(x)\),进而得到秘密 \(S = f(0)\)。

在安全多方计算中,秘密共享有广泛应用。例如,在多方联合数据统计场景中,各方可以将本地数据进行秘密共享后,将份额发送给计算节点。计算节点基于这些份额进行计算,如求和、求平均值等,最后通过收集足够数量的份额来恢复出最终的统计结果。在这个过程中,任何单个或部分参与方的份额都不包含原始数据的完整信息,从而保护了数据隐私。同时,由于秘密共享方案的特性,即使部分份额丢失或被篡改,只要满足门限条件,仍能正确恢复计算结果,保证了计算的健壮性。

2.3 不经意传输协议详解

不经意传输协议存在多种实现方式,这里以基于公钥加密的不经意传输协议为例进行介绍。假设有发送方 Alice 和接收方 Bob,Alice 有两个消息 \(m_0\) 和 \(m_1\),Bob 有一个选择比特 \(b\)(\(b = 0\) 或 \(b = 1\)),他希望从 Alice 处获取 \(m_b\),且不让 Alice 知道他的选择。

首先,Alice 生成两个公钥 - 私钥对 \((pk_0, sk_0)\) 和 \((pk_1, sk_1)\),并将公钥 \(pk_0\) 和 \(pk_1\) 发送给 Bob。

Bob 随机选择一个随机数 \(r\),并计算两个密文 \(c_0 = E_{pk_0}(r)\) 和 \(c_1 = E_{pk_1}(r \oplus m_b)\),其中 \(E_{pk}()\) 表示使用公钥 \(pk\) 进行加密,\(\oplus\) 表示异或运算。然后,Bob 将 \(c_0\) 和 \(c_1\) 发送给 Alice。

Alice 收到 \(c_0\) 和 \(c_1\) 后,使用对应的私钥进行解密,得到 \(r_0 = D_{sk_0}(c_0) = r\) 和 \(r_1 = D_{sk_1}(c_1) = r \oplus m_b\)。接着,Alice 计算 \(e_0 = r_0 \oplus m_0\) 和 \(e_1 = r_1 \oplus m_1\),并将 \(e_0\) 和 \(e_1\) 发送给 Bob。

Bob 收到 \(e_0\) 和 \(e_1\) 后,计算 \(e_b \oplus r = (r \oplus m_b) \oplus r = m_b\),从而成功获取到自己选择的消息 \(m_b\)。而 Alice 由于不知道 Bob 的选择比特 \(b\),无法确定 Bob 获取的是 \(m_0\) 还是 \(m_1\),满足了不经意传输的隐私保护要求。

在安全多方计算中,不经意传输常用于混淆电路协议中安全地传输输入标签等关键信息。例如,在混淆电路生成过程中,Alice 生成了与输入对应的标签,Bob 通过不经意传输协议从 Alice 处安全获取与自己输入对应的标签,从而在不泄露自身输入信息的情况下

三、开源实践openHiTLS:NssMPClib安全多方计算库

NssMPClib项目是西安电子科技大学NSS实验室开源发布的一个通用的安全多方计算库,设计并实现了一系列基于算术秘密共享(Arithmetic Secret Sharing,ASS)和函数秘密共享(Function Secret Sharing,FSS)的隐私保护计算协议,并实现了神经网络密态推理等隐私保护机器学习应用。代码仓链接:GitCode - 全球开发者的开源社区,开源代码托管平台

项目架构

  • csprng
    定制化后的torchcsprng源码,作为计算库的外部依赖
  • data
    用于存放隐私保护神经网络推理的明文模型结构代码,其他应用所需的相关数据也可放在该文件夹下
  • debug
    本项目的测试代码
  • NssMPC
    计算库主体源码
    • application
      application包中是基于计算库的基础功能实现的应用,目前包括隐私保护的神经网络推理,支持明密文模型的自动转换与神经网络密态推理
    • common
      common包中包括该计算库用到的通用工具和基础数据结构,包括网络通信,随机数生成器和其他工具
    • config
      config包中包括该计算库的基础配置和网络配置
    • crypto
      crypto是该库的核心部分,包括该库支持的隐私计算密码学原语和协议
    • secure_model
      secure_model包中包括该库用到的系统模型和威胁模型及相关工具,如半诚实假设下的客户端-服务器模型
  • tutorials
    本项目的教程文档
http://www.dtcms.com/a/338600.html

相关文章:

  • 驱动开发系列65 - NVIDIA 开源GPU驱动open-gpu-kernel-modules 目录结构
  • ubuntu24 编译安装php-7.4.33
  • Python入门第11课:Python网络请求入门,使用requests库轻松获取网页数据
  • 什么是大数据平台?大数据平台和数据中台有什么关系?
  • RNN如何将文本压缩为256维向量
  • ubuntu下编译c程序报错“ubuntu error: unknown type name ‘uint16_t’”
  • 【保姆级教程~】如何在Ubuntu中装miniconda,并创建conda虚拟环境
  • ubuntu20.04 上 flathub summary exceeded maximum size of 10485760 bytes 的处理
  • 边缘智能体:Go编译在医疗IoT设备端运行轻量AI模型(上)
  • 分布式机器学习之流水线并行GPipe:借助数据并行来实现模型并行计算
  • JVM之Java内存区域与内存溢出异常
  • 微服务-06.微服务拆分-拆分原则
  • 117. 软件构建,拓扑排序,47. 参加科学大会,dijkstra算法
  • webpack》》Plugin 原理
  • VSCode 从安装到精通:下载安装与快捷键全指南
  • 视觉采集模块的用法
  • 企业知识管理革命:RAG系统在大型组织中的落地实践
  • 大数据数据库 —— 初见loTDB
  • 最新研究进展:2023-2025年神经机器翻译突破性成果
  • 【无标题】基于大数据+Python的共享单车骑行数据分析关系可视化 基于Spark+Hadoop的共享单车使用情况监测与数据可视化
  • AI 药物发现:化学分子到机器学习数值特征的转化——打通“化学空间”与“模型空间”关键路径
  • 大语言模型基本架构
  • 全网首发CentOS 7.6安装openGauss 6.0.2 LTS企业版(单机)
  • Linux------《零基础到联网:CentOS 7 在 VMware Workstation 中的全流程安装与 NAT 网络配置实战》
  • vue3实现实现手机/PC端录音:recorder-core
  • Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
  • Chrome原生工具网页长截图方法
  • 实现Johnson SU分布的参数计算和优化过程
  • STM32 vscode 环境, 官方插件
  • 进程通信:进程池的实现