自学内容网 自学内容网

【隐私计算】隐私计算技术的安全性风险分析及应对缓解措施

理解隐私计算原理和防御手段对于设计和使用安全系统至关重要

1. 背景介绍

        前期我们在《隐私计算使用不当也会泄露原始数据》中介绍了隐私计算可能存在的一些安全风险。本文则更聚焦分析联邦学习中基于半同态加密实现的逻辑回归、xgboost模型以及基于可信执行环境TEE的处理技术存在的安全风险,并给出相应的环节措施。业务中之所以使用隐私计算,主要是因为原始数据和敏感数据的安全保护需求。但如果仅一味强调隐私计算技术的安全性,可能会忽略隐私计算部分技术可能存在的安全风险进而造成数据泄露隐患。因此我们不仅希望能知道隐私计算如何保护数据,还希望某些技术存在的局限性,进而提出安全增强措施,让原始数据能够得到更好的保护。

2. 具体算法分析

2.1 攻击类型

        联邦学习是一种隐私保护的学习范式,允许多个参与方在不共享其私有数据的情况下,共同训练一个协同机器学习模型。根据协作的形式,FL 可以进一步划分为 横向联邦学习(Horizontal Federated Learning, HFL) 和 纵向联邦学习(Vertical Federated Learning, VFL)。在 HFL 中,参与方共享相同的特征空间并在数据样本上协作;而在 VFL 中,参与方共享相同的样本 ID,并在特征上进行协作。VFL特别适合面向to B的业务场景,因此我们重点关注VFL的算法。

        【1】给出了两种隐私攻击,即使中间输出经过加密以保护数据隐私,攻击者仍然可以成功窃取私有训练数据;

  1. 针对纵向联邦逻辑回归协议的反向乘法攻击;
  2. 针对纵向联邦XGBoost协议的反向求和攻击。

2.2 风险分析的前置条件

2.2.1 前置条件一:两方场景

        两方场景,假设有两个参与方A和B,按照纵向联邦学习框架共同训练分布式机器学习模型。令X \in \mathbb{R}^{n \times d}表示包含n个样本的完整数据集,Y \in \mathbb{R}^{n \times 1}表示标签集,I \in \mathbb{R}^{n \times 1}表示样本ID。参与方A和B拥有相同的样本ID,但各自持有互补的(非重叠的)特征:X = [X_A | X_B]。标签集Y由A持有。由于A拥有关键的类别标签信息,一般可以称其为主动参与方(active participant,也可以类似fate成为guest或者还有称为leader),而B仅持有特征信息,称其为被动参与方(passive participant,可以称为host也可以称为follower)。此外,令x_i表示X的第i行(即第i个样本),其中x_i在参与方A持有的部分为x_i^A​,在B持有的部分为x_i^B。因此,x_i = [x_i^A | x_i^B]

2.2.2 前置条件二:半同态加密

        纵向联邦学习一般采用加法同态加密(如Paillier )对中间输出(如梯度)进行加密。加法同态加密是一种公钥加密系统,允许参与方用已知的公钥对数据加密,并允许其他参与方使用相同的公钥在加密数据上进行计算。要提取明文,需将加密数据发送给私钥持有者解密。令一个数u的加密结果为[[u]]。对于任意明文u和v,满足以下加法操作性质:

[[u + v]] = [[u]] + [[v]]

        同样,可以将密文与明文相乘:

[[v \cdot u]] = v \cdot [[u]]

        其中v为未加密的明文。这些操作可以逐元素扩展到向量和矩阵。如一个明文向量v与密文向量[[u]]的内积为:

v^T \cdot [[u]] = [[v^T \cdot u]]

2.2.3 纵向算法协议

2.2.3.1 逻辑回归(带协调方角色)

        给定n个训练样本\{x_i\}_{i=1\cdots n}及其d个特征(x_i \in \mathbb{R}^d)和对应的输出标签\{y_i\}_{i=1\cdots n},线性回归旨在学习一个映射函数,使得f(x_i) = y_i, \forall x_i。假设f是线性的,可以表示为x_i与d维系数向量\theta的内积:

f(x_i) = \sum_{j=1}^d \theta_j x_{ij} = \theta x_i

        系数\theta可以通过最小化所有训练样本的经验误差来学习,误差由以下损失函数定义:

L(\theta) = \frac{1}{n} \sum_{i=1}^n \frac{1}{2} (\theta x_i - y_i)^2

        在传统的集中式机器学习中,该最小化问题可以通过随机梯度下降法以小批量迭代方式高效求解。

        不同于集中式学习,VFL中的每个x_i被分为x_i^A | x_i^B。相应地,系数\theta被分为\theta^A | \theta^B。损失函数的梯度可以分解为:

\Delta L(\theta) \approx \frac{1}{n} \sum_{i=1}^n \left( \frac{1}{4} \theta^A x_i^A + \frac{1}{4} \theta^B x_i^B - \frac{1}{2} y_i \right) \cdot [x_i^A | x_i^B]

        进一步简化:

\Delta L(\theta) \approx \frac{1}{n} \left( \frac{1}{4} \theta^A X^A + \frac{1}{4} \theta^B X^B - \frac{1}{2} Y \right) \cdot [X^A | X^B]

        参与方A和B分别在各自的私有训练数据上计算上述分解式的对应项,然后通过或不通过第三方协调者交换输出以生成完整的结果。

        为了在不暴露私有数据的情况下计算梯度,大多数纵向联邦协议采用Paillier等加法同态加密对中间输出进行加密并在密文上操作。loss对应的加密分布式梯度为:

[[\Delta L(\theta)]] \approx \frac{1}{n} \left( [[\frac{1}{4} \theta^A X^A]] + [[\frac{1}{4} \theta^B X^B]] - [[\frac{1}{2} Y]] \right) \cdot [X^A | X^B]

        在VFL中,【1】也使用SGD优化器更新模型参数。

2.2.3.2 XGBoost

        给定 n个训练样本 \{x_i\}_{i=1,...,n},每个样本具有 d 个特征(x_i \in \mathbb{R}^d),以及 n 个对应的输出标签 \{y_i\}_{i=1,...,n},XGBoost 通过学习 k 棵回归树组成的函数来拟合数据,使得

f(x_i) = \sum_{t=1}^k f_t(x_i), \quad \forall x_i \in \mathbb{R}^d

      为了学习这 k 棵回归树,XGBoost 在第 t 次迭代时添加一棵树f_t,以最小化以下损失函数:

L^{(t)} \approx \sum_{i=1}^n \left[ l(y_i, \hat{y}^{(t-1)}) + g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) \right] + \Omega(f_t)

        其中,g_i 和 h_i​ 分别是损失函数在f_{t-1}​ 上计算得到的一阶和二阶梯度统计量,而 Ω 是用于减少模型复杂性的正则化项。

        构建第 t 棵回归树时,XGBoost 从一个叶节点开始,逐步向树中添加最优分支,直到满足终止条件。分裂后的损失减少量计算公式为:

        其中,I_L 和 I_R​ 分别是分裂后左节点和右节点的样本空间。在实际操作中,XGBoost 会选择能够最大化上述损失减少量的最优分裂。在每次迭代中,XGBoost 枚举所有可能的分裂特征和分裂值,并找到能最大化损失减少量的分裂方案。

2.3 攻击风险描述

        考虑两方纵向联邦学习和一个半诚实的对手,该对手仅通过合作收集另一方参与者的私密数据,但不偏离协议规范。该对手试图窃取另一方的私密数据,但不会破坏学习协议(典型的半诚实模式)。

        如图所示,典型的两方纵向联邦场景(可以参考下Fate的算法实现),其中两个参与者(A和B)将各自的私密数据保留在本地,并通过仅共享加密的部分梯度共同训练一个全局模型。在安全逻辑回归中,A和B需要第三方协调者(arbiter)来处理加密的部分梯度并更新全局模型。另外在SecureBoost中,两个参与者独立地学习一个联合模型,无需任何第三方。

        假设两方中的一方是对手,可以发送或接收另一方训练数据的加密信息(例如,梯度和梯度与数据的乘积结果)。在第一次攻击中,反向乘法攻击,对手可能还会破坏第三方协调者以收集更多的私密信息。在第二次攻击中,反向求和攻击,提出针对SecureBoost的攻击,攻击者可能构造特定的字符串并将其插入到梯度的最低有效位,同时保持学习协议的完整性。

2.3.1 反向乘法攻击

        反向乘法攻击针对基于安全逻辑回归的纵向联邦学习协议发起。在此攻击中,对手的目标是逆向推导矩阵乘积的每个乘法项,以此推断目标参与者的原始训练数据。矩阵乘法是许多联邦学习协议中的基本操作。

        如图所示为该攻击的流程管道。【1】针对Fate上实施反向乘法攻击,并通过实验测量了矩阵乘法在该攻击下引起的数据(隐私)泄露程度。

        攻击流程如下:逻辑回归依赖系数和参与者私密训练数据之间的一系列乘法来计算梯度。参与者A和B需要交换中间乘法结果以计算梯度。由于乘法结果由公钥加密,且不包含训练数据的直接信息,对手需要与私钥持有者(协调者)勾结以窃取加密乘法结果的原始值。一旦获得原始乘法结果,就可利用线性代数等手段逆向推导每个乘法项(即原始训练数据)。

        假设参与者A是对手,协调者C已被破坏。参与者A使用以下信息对B发起攻击:

  1. 来自B的中间输出 [[\frac{1}{4}{\theta^B_t}X^B_S]];
  2. C发回给B的部分梯度 g^B_t

        中间输出是B的部分梯度和特征的线性乘积。将B的特征视为未知参数,参与者A通过求解以下线性函数发起反向乘法攻击:

        反向乘法攻击的三个步骤:

        步骤1:对手存储每个小批次计算的中间加密乘法结果。具体来说,对于每个小批次 S,对手存储B的部分数据与系数的乘积结果 [[\frac{1}{4}{\theta^B_t}X^B_S]],以及梯度的系数更新  g^B_t​。B分享的加密乘积用于联合计算小批次上的加密梯度。

        步骤2:对手解密每个小批次计算的 [[\frac{1}{4}{\theta^B_t}X^B_S]]。A和B使用相同的公钥进行加密,而C使用私钥解密。因此,对手可利用C的私钥解密密文。

        步骤3:对手逆向推导乘法项以获取B的训练数据。对于特定小批次 X^B_S,对手在两个连续训练周期中拥有以下等式:

\frac{1}{4}{\theta^B_t}X^B_S - \frac{1}{4}{\theta^B_{t-1}}X^B_S = g^B_tX^B_S

        其中,唯一的未知参数为X^B_S。如果对手获得足够多的等式(至少需要 ∣B∣ 个方程,其中 ∣B∣ 表示B私密数据中的特征数量),即可求解未知参数。

        让我们来回顾一下此反向乘法攻击成功的条件:依赖于等式系数矩阵的秩。如果系数矩阵是满秩的,对手可以完全窃取私密数据;否则,矩阵的秩可以用来定量衡量数据泄露的程度。

2.3.2 反向加法攻击

        反向求和攻击针对 SecureBoost 设计。在此攻击中,对手尝试从总和中逆向推导每个加法项。假设 SecureBoost 中有两个参与者:主动参与者 A 和被动参与者 B,其中 A 是攻击者。A 已知以下信息:

  1. 来自 B 数据分箱的样本的一阶和二阶梯度总和;
  2. 数据分箱的顺序。

        因此,A 可以首先将关于训练数据的信息编码到梯度中,然后利用编码的信息从 B 接收的梯度总和中逆向推导每个加法项。这些加法项可以在一定程度上暴露 B 特征的样本顺序,将此类信息称为部分顺序。
        设 B^k_j 表示第 j 个特征的第 k 个数据分箱。对于特征 X,第 j 个特征的部分顺序定义为:

P_j={k ∣ ∀x_i∈X,∃B^k_j, x_iB^k_j}

        即,部分顺序反映了特定特征中样本与分箱的对应关系,从而揭示了数据分箱的顺序和分布特性。

        上图展示了反向求和攻击的流程,该攻击推测 B 的私有特征的所有部分顺序。攻击的主要四个步骤如下:攻击参与者 A 在一阶和二阶梯度中嵌入一个魔术数字 [31]。魔术数字指代具有独特性且全局唯一的值(例如全局唯一标识符),其含义不会被误解为其他内容。攻击者对一阶二阶梯度进行加密,并将它们发送给参与者 B。B根据数据分箱计算每个分箱的一阶和二阶梯度总和,然后将结果返回给 A。攻击者存储从 B 接收的一阶和二阶梯度总和,并通过利用嵌入的魔术数字逆向推导出所有加法项。这些逆向推导的项揭示了 B 特征的部分顺序。关于魔术数字的具体设置这里不做展开,仅说明一下实施的底层逻辑:针对返回的梯度和,可以获得魔术数字在分箱中的求和结果,再进一步区分魔术数字的求和结果的组成,通过穷举,可定位到对应的样本梯度,进而推测出B端数据的特征顺序。

2.4 防护手段

2.4.1 超参数的设置调整

        如果批量大小较小,反向乘法攻击能够准确推断出目标参与方的所有私有数据;

        如果增大学习率,攻击性能会显著提高。

        因此可以通过使用较大的批量大小和较小的学习率来缓解反向乘法攻击。当然如果采用ss-lr或者全匿踪联邦lr,就不存在这类问题,因为采用的是端到端的处理,中间信息并不会暴露给任意一方,也就不存在反向乘法攻击的风险。

2.4.2 隐藏偏序关系

        对于SecureBoost,一个可能的防御方法是通过秘密共享隐藏偏序关系。具体来说,引入一个指标向量,用于记录哪些样本属于各个节点,并将指标向量转换为秘密共享变量以保护隐私。通过这种方式,可以将单个节点中样本导数的总和计算为指标向量与导数向量的内积。        

3. 可信执行环境的安全性风险

        除上述针对半同态加密的联邦算法风险分析之外,我们还想提一下可信执行环境的风险,最常见的就是侧信道攻击【2,3】。  侧信道攻击是一种基于系统泄露信息的被动攻击技术,因其可以避开直接破解加密算法而变得十分危险。

        侧信道攻击(Side-Channel Attack) 是一种通过观察和分析计算机系统运行过程中泄露的非正常信息(侧信道信息)来推断或获取系统内部敏感数据的攻击技术。这种攻击不依赖于直接破解加密算法或协议,而是利用系统在运行中产生的物理或时间特性等信息来推测秘密数据。

3.1 常见的侧信道信息

  1. 时间信息(Timing Information)
    攻击者通过测量操作的执行时间,推断密钥或算法分支执行情况。例如,不同输入可能导致不同的执行时间,从而泄露信息。

  2. 电磁辐射(Electromagnetic Radiation)
    系统运行时发出的电磁波可能包含信息,攻击者可通过探测设备捕获这些辐射并进行分析。

  3. 功耗(Power Consumption)
    计算设备的功耗模式通常与处理的数据和操作类型相关联。攻击者通过测量功耗曲线可以推断敏感信息。

  4. 缓存行为(Cache Behavior)
    缓存命中与未命中模式可能泄露正在访问的数据或执行的操作。例如,利用 CPU 的缓存时间差,可以推断加密密钥。

  5. 错误信息(Fault Information)
    故意引入硬件或软件错误,并从错误响应中获取秘密信息。

3.2 攻击步骤

  1. 信号采集:通过特定的设备(如功率分析仪、电磁探测仪)采集侧信道信号。
  2. 数据处理:对采集到的信号进行降噪和分析,提取有意义的模式或特征。
  3. 信息推断:将侧信道特征与已知模型进行匹配,推断密钥或其他敏感信息。

3.3 防御措施

  1. 时间均衡:通过固定执行时间或加入随机延迟,防止时间信息泄露。
  2. 随机化:对操作顺序、内存访问和加密参数进行随机化,增加攻击复杂度。
  3. 屏蔽技术:减少设备的电磁辐射或通过物理屏蔽阻止信号泄漏。
  4. 抗功耗攻击算法:使用恒定功耗的算法或添加噪声来隐藏真实的功耗信息。
  5. 安全硬件设计:在硬件设计时引入侧信道攻击防护措施,如对功耗和电磁泄露进行控制。

扩展阅读:

多视角解读隐私计算技术小结

4. 参考材料

【1】Practical Privacy Attacks on Vertical Federated Learning

【2】Side Channel Risks in Hardware Trusted Execution Environments (TEEs)

【3】QuanShield: Protecting against Side-Channels Attacks using Self-Destructing Enclaves


原文地址:https://blog.csdn.net/weixin_65514978/article/details/143920485

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!