数据安全复习笔记
安全存储与访问控制
早期访控技术
自主访控
基于主体的访控 :能力表
记录每一个主体与一个权限集合的对应关系
权限集合中的每个权限都描述了指定主体能够在某客体上执行的操作
基于客体的访控:访问控制列表
记录了每一个客体与一个权限集合的对应关系
权限集合中的每个权限都描述了指定客体能够被某主体执行的操作
强制访控(MAC)
BLP模型 (安全标记)
- 安全级别(Level):对应军事类型的安全密级分类,公开(UC),秘密(S),机密(C),绝密(TS), UC ≤ S ≤ C≤ TS
- 范畴(Category) 仅被需要知悉的人所知悉,具有该范畴的主体能够访问那些以该范畴子集为范畴的客体
- 安全标记:由安全级别和范畴构成的二元组
- 支配关系(dom)安全标记A和B, A dom B :$Level_A$≥ $Level_B$ & $Category_A$ ≥ $Category_B$
- 主体S可以读客体O,当$Label_S$ dom $Label_O$
- 主体S可以写客体O,当$Label_O$ dom $Label_S$
基于角色的访控
RBAC模型 (角色)
基于属性的访控
ABAC模型 (属性)
属性的管理和标记人工成本高,需要安全管理员有一定的专业领域知识
缺点
安全管理员的授权管理难度大
解决思路:自动化或半自动化技术简化权限管理
严格的访问控制策略难以适用
解决思路:在访控过程中自适应地调整权限
外包存储环境(数据所有者和数据存储服务提供者不同)下无法使用
解决思路:应用密码学,将数据的安全性建立在密钥的安全性上
基于数据分析的访控
角色挖掘
层次聚类角色挖掘
凝聚式角色挖掘
按自底向上的层次聚类算法,合并距离最近的类簇对产生新类簇。
两个类簇的距离通过共有的角色数量和包含的权限数量来表示。共有用户数量越多,且包含权限数量越多,则两个类簇被认为越接近
分裂式角色挖掘
将初始较大的权限集合不断地细分为更小的权限集合, 形成由权限类簇构成的树
若新产生的权限类簇没有用户持有, 则不作为候选角色,否则作为候选角色
生成式角色挖掘
从权限使用情况的历史数据来获得用户的权限使用模式, 进而产生 角色,并为它赋予合适的权限
根据用户属性数据为用户分配恰当的角色
风险自适应访控
风险量化
主客体的安全级别
- 高安全级别的主体访问低(同)安全级别的客体,无风险or风险可接受
- 低安全级别的主体访问高安全级别的客体,风险不可接受
客体敏感度
- 对客体重要性的评估结果
- 敏感度越高,重要性越大, 访问所带来的风险越大
被访问客体的数量
- 主体在一次访问请求中或一段时间内所访问的客体的规模
- 对客体的访问行为所带来的风险会被累加,访问客体的数量越大,累加风险越大
客体之间的互斥关系
- 两个客体满足:对一个客体访问后将不能访问另一个客体,或在访问另一个客体时风险急剧增加
- 描述了多次访问行为的风险累加是非线性的
访问目的与被访问客体的相关性
- 主体对客体的需求程度
- 两者相关性越高,则主体访问客体的风险越小,同时获得的收益越高
基于密码的防控
基于密钥管理的访控
通过严格的密钥管理来确保授权用户才拥有解密数据所需的密钥来实现访问控制
类型:(根据系统所支持的能够发送数据的数量划分)
基于单发送者广播加密的访问控制 (仅支持少量的可信的数据所有者向其他用户分享数据)
系统中的每个用户有一个自己的密钥,该密钥将作为用户密钥树的叶子节点。每个用户拥有从叶子节点密钥一直追溯到根节点每个节点的密钥
基于公钥广播加密的访问控制 (支持系统内所有用户间的数据分享)
基于属性加密的访问控制
CP-ABE,多权威CP-ABE, PP-ABE
核心思想:将属性集合作为公钥进行数据加密
访问树结构
(t,n)门限:秘密信息被分成n份,要重构秘密信息就必须获得其中至少t份
AND操作: (n, n) 门限; OR操作: (1,n) 门限
安全检索技术
对称密文检索(SSE):单用户,高效
非对称密文检索(ASE):多用户,低效
关键词检索:字符型数据,区间检索:对数值型数据进行范围查询
对称密文检索
基于全文扫描方法
基于文档-关键词索引方法
为每篇文档建立单独的索引,且服务器在检索时需要遍历全部索引,因此,这类方案的检索时间复杂度与文档数目成正比。
文档-关键词的问题在于查询效率与文档数目呈线性关系
基于关键词-文档索引方法
在初始化时为每个关键词生成包含该关键词的文档标识集合
最后将文档标识返回给数据所有者
密文区间检索
基于谓词加密的方案
将属性值和区间表示为节点集合的形式,进而再将其转换为向量形式
这里掌握CP和MCS是什么即可
基于矩阵加密的方案
安全性较差
秘密共享
门限秘密共享
现在应用广泛的的秘密共享主要框架即门限秘密共享
门限秘密共享的工作原理如下:
- 秘密分割:首先,一个秘密信息被分割成多个部分,通常是通过一些数学算法进行划分。这些部分称为“份额”(shares)或“部分秘密”(partial secrets)。
- 门限条件:定义一个门限值(threshold),只有在满足门限值要求的份额数量或者特定的份额组合之下,才能还原出原始的秘密信息。这个门限值可以是任何数字,通常是一个预先确定的整数。
- 分发份额:将这些份额分发给不同的参与者,每个参与者只持有其中的一部分份额,而且不知道其他参与者持有的份额内容。
- 重构秘密:当需要还原秘密信息时,至少要达到门限值数量的参与者合作,将他们的份额组合在一起,才能成功还原出原始的秘密。
比较常见的门限秘密共享方案基本都是基于数学问题
Shamir秘密共享方案
Shamir密码共享方案建立在一条数学定理上:
n次平面代数曲线(一次时为直线),至少需要知道该曲线上的n+1个点的坐标
当需要恢复秘密时,我们需要用到拉格朗日插值公式
基于中国剩余定理的秘密共享
顾名思义,该方案是基于中国剩余定理
中国剩余定理(CRT)是数论中的一个定理,描述了一组线性同余方程的解的存在性和唯一性。具体来说,如果有一组两两互质的正整数$ n_1, n_2, …, n_k $,以及任意整数$ a_1, a_2, …, a_k $,则下面的一组同余方程:
存在一个唯一解$ x $,在模$N = n_1n_2…n_k $的意义下唯一。CRT提供了一种算法来找到这个唯一解。
基于CRT的秘密共享步骤如下:
选择互质的模数:
选取$ k $个大的、两两互质的正整数$ n_1, n_2, …, n_k $,它们的乘积要大于秘密数$ S $。分配秘密:
对于秘密$ S $,选择$ k $个整数$ a_1, a_2, …, a_k $,使得$ a_i \equiv S \pmod{n_i} $。这里每个$ a_i $就是秘密的一个“份额”。分发份额:
将每个$ a_i $和对应的模数$ n_i $作为一个份额,分发给参与者。每个参与者只能得到一个$ a_i $和$ n_i $。秘密恢复:
当需要恢复秘密$ S $时,收集足够数量的份额$ (a_i, n_i) $对。只要收集到的份额数目大于或等于原来分割的份额数目,就可以利用CRT计算出原始的秘密$ S $。利用CRT计算原秘密:
为了恢复秘密,首先计算所有模数的乘积$ N = n_1n_2…n_k $。然后,对于每个份额$ (a_i, n_i) $,计算$ N_i = N / n_i $和$ N_i $的模$ n_i $逆元$ m_i $,即$ m_iN_i \equiv 1 \pmod{n_i} $。最后,利用下面的公式计算$ x $:这个$ x $在模$ N $下等同于原始的秘密$ S $。
Brickell秘密共享
该方案是Shamir秘密共享方案的推广,由一维方程转向多维向量
任意t个线性无关的行向量是为了保证少于 t 个参与者无法结合他们的份额来重构秘密。
正交向量组意味着向量之间相互独立,且内积为零,确保了参与者之间的份额没有直接关联,从而使得任何未达到阈值 t 的参与者组合都无法推断出秘密。
Blakley秘密共享
通过多维欧几里得空间来构造阈值秘密共享机制
任何t个非平行t-1维超几何平面在一个t维空间中交于一点。秘密通过编码在坐标中完成秘密共享
Feldman VSS密码共享
不经意传输
百万富翁问题
n选1 OT
混淆电路
思路
核心思想:将两方参与的安全计算任务转化成布尔电路的形式,并将真值表加密打乱,从而实现电路的正常输出而又不泄露参与计算的双方私有信息
一方将真值表中的输入作为对称加密的密钥,对真值表中的输出进行加密,并把真值表发给另一方,然后将自己的输入发送。
另一方使用OT协议获取自己输入的密文,并进行计算,将计算结果传回,最终只有一个结构正确
密文排序与单次解密
基本的GC协议需要对每个门电路进行多次解密尝试,能成功解密的才是该混淆电路的输出。这些尝试解密的操作都会带来额外的计算量。通常希望在不泄漏参与方输入信号的条件下省去多余的解密操作
我们可以使用密文排序与单次解密(P&P)
全同态加密
概述
同态加密(Homomorphic encryption)是一种在加密数据上进行计算的技术,同时保证结果在解密后仍然有效。这种加密方法允许用户在不解密的情况下对加密数据进行操作,这在保护隐私的同时实现了数据的处理和分析。
同态加密的意义在于,真正从根本上解决将数据及其操作委托给第三方时的保密问题,例如对于各种云计算的应用。
同态加密的算法需要满足以下属性:
正确性:
- 对于未使用Eval函数的密文,如果$E$代表加密函数,$D$代表解密函数,$m$为明文,则正确性可以表示为:这意味着如果你对一个明文$m$进行加密,然后再解密,你应该得到原始的明文。
- 对于使用Eval函数的密文,如果$F$代表在明文上的运算函数,正确性可以表示为:这表示如果你对多个加密后的数据应用Eval函数进行某种运算,然后解密,结果应该与在原始数据上直接应用该运算得到的结果相同。
隐私性:
- 隐私性可以用不可区分性(indistinguishability)来表述。如果$m_1$和$m_2$是两个不同的明文,它们的加密结果($E(m_1)$和$E(m_2)$)对于观察者来说应该是无法区分的。这通常表示为:
强同态:
- 强同态属性要求加密数据和经过Eval函数求值后的密文在分布上应该是不可区分的。虽然这是理想状态,但在实际中很难实现,因此通常关注紧致性。
紧致性:
- 紧致性关注的是密文尺寸的控制。如果$C$表示密文,$F$是计算函数,紧致性可以用以下方式表示:这意味着经过Eval函数处理后的密文大小是原始密文大小和计算函数复杂性的多项式函数,而不是与这些因素呈指数关系增长。
这些公式和属性共同定义了同态加密系统的基本特性,确保即使在加密状态下进行计算,也能保持数据的安全性和隐私性。
同态加密分为三类:部分同态加密(PHE)、近似同态加密(SHE)和全同态加密(FHE)
部分同态加密(PHE)
部分同态加密允许对加密数据执行一种类型的算术运算,通常是加法或乘法。在这种加密系统中,可以对加密数据进行无限次指定类型的运算
加法同态
在定义上,设$E$表示加密函数,$D$表示解密函数,$m_1$和$m_2$表示两个明文。如果系统是加法同态的,那么有:
$\begin{align}
D(E(m_1) \oplus E(m_2)) &= m_1 + m_2
\end{align}$
其中,⊕表示在加密数据上进行的某种操作,它相当于明文上的加法。
加法同态加密的代表算法是Paillier
Paillier加密算法是一种流行的非对称加密算法,由法国密码学家Pascal Paillier于1999年提出。
其安全性依赖于合数剩余判定假设
合数剩余判定假设(CRA)是基于对特定合数的剩余类的难以区分性。具体来说,假设有两个大质数$p$和$q$,则对于模$n^2$(其中$n = pq$)的乘法群,很难区分一个随机选择的群元素是否是模$n^2$的$n$次幂。
在数学术语中,如果$x$是一个随机选择的模$n^2$的群元素,则区分$x$是不是一个$n$次剩余(即存在某个$y$使得$y^n \equiv x \mod n^2$)是困难的。
具体加解密流程如下:
与传统的加法同态操作有所不同,Paillier加密系统中,明文的加法操作对应于密文的乘法操作
乘法同态
同样地,设$E$表示加密函数,$D$表示解密函数,$m_1$和$m_2$表示两个明文。如果系统是加法同态的,那么有:
$\begin{align}
D(E(m_1) \otimes E(m_2)) &= m_1 \times m_2
\end{align}$
比较具有代表性的乘法同态加密算法是RSA和ElGamal
近似同态加密(SWHE)
近似同态加密是一种介于PHE和FHE之间的加密形式。它支持对加密数据进行有限次的加法和乘法操作。然而,随着计算次数的增加,密文中的噪声也会增加,限制了可以执行的操作次数。
代表性的算法有下面几种
下面是BGN的具体原理和算法流程
全同态加密(FHE)
全同态加密是同态加密的最强形式,允许对加密数据执行无限次的加法和乘法运算。它使得在保持数据加密的情况下进行复杂计算成为可能。
全同态加密(FHE)的一个关键特性是其自举(bootstrapping)能力,这个概念是由Craig Gentry在他的博士论文中首次提出的。自举是一种技术,它使得全同态加密系统能够处理任意数量的计算操作,而不受到噪声的限制
自举是指在同态加密环境中,加密方案可以使用自己来刷新自己的密文。在同态加密操作中,计算会在密文中引入噪声。如果噪声积累到一定程度,将导致密文无法正确解密。自举技术允许对密文进行处理,以减少这种噪声,从而可以继续进行更多的计算操作。
这种操作可以递归地进行。也就是说,一个全同态加密方案可以对其自身的加密计算进行同态加密,并通过自举来去除在此过程中引入的噪声。
实现自举需要加密方案能够对其解密过程进行同态评估。这通常涉及到:
将解密算法表示为一个低复杂度的算术电路。
使用同态加密方案来加密该电路的输入(即密文和解密密钥的加密版本)。
运行同态加密的解密电路,这样做会生成一个新的加密版本的密文,其中包含较少的噪声。
第一代FHE
Gentry的方案被视为第一代FHE。它首次提出了自举(bootstrapping)的概念,即通过自解密来减少密文中的噪声。Gentry的构造基于理想格,并为未来的FHE构造提供了原型。
算法原理如下
其建立在AGCD困难问题上
由于要满足正确性成立条件,该算法只支持次数较低的多项式密文运算,原因如下:
假设$ B=O(2^\lambda) $为fresh密文的噪音边界,则经过$d$层的乘法电路之后,噪音边界变为$ B^{2^d} $,则有:
第一代FHE的缺点在于整数的尺度非常大,导致效率非常低
第二代FHE
第二代FHE的代表性算法为BGV
建立在困难问题LWE上
第二代FHE的特殊之处在于它在减小误差项上做出了探索
主要方法有两种,密钥交换和模块交换
密钥交换是一种在FHE中常用的技术,它允许将一个密文从一个密钥空间转换到另一个密钥空间,而不会解密密文本身。
首先生成一个包含旧密钥加密的新密钥的数据结构,这通常是通过旧密钥对新密钥的每个位进行加密得到的。然后通过这个数据结构将加密数据从旧密钥转换为新密钥的形式,这一步骤不涉及明文数据的解密过程。通过精心设计的密钥交换过程,可以限制或减少转换过程中引入的误差。
模块交换将密文中的每个系数从一个大模数环切换到一个小模数环,这通常也会减少误差项的大小。针对同一个明文消息,将在模q下的密文c转换成在模p下的密文c’ ,可将同态加密累积误差总量减少约p/q倍
第三代FHE
第三代FHE的代表算法是GSW
其核心思想是利用矩阵的近似特征向量
基础方案如下
但是通过线性代数方法,能够很容易找到C的特征向量与点对应的特征值,从而轻松破解该方案的加密体系
我们可以加入随机噪声
但是仍然有缺点
改进方案是利用二进制分解
第四代FHE
第四代FHE的代表性算法是CKKS
它的特点是支持浮点数运算
可信执行环境
远程认证
隔离执行
攻击1:恶意特权软件攻击
防御1:基于访问控制隔离特权软件
攻击2:恶意硬件攻击
防御2:基于内存加密防御物理攻击,CPU外皆为密文,CPU内部为明文
攻击3:基于访问模式的侧信道攻击,根据磁盘、网络和内存等访问模式
防御3:混淆访问模式+减少资源共享
联邦学习
联邦学习是一种革命性的机器学习方法,它允许不同设备和组织在保持数据隐私的前提下共同训练模型。这种方法的核心在于模型的训练发生在本地,只有模型更新(而非原始数据)被发送到中心服务器进行聚合。这样不仅保护了数据隐私,还减少了数据传输的需要,提高了效率。
联邦学习具有下面这些特性:
多方参与:两个或两个以上的参与方合作构建共享的机器学习模型,每个参与方都拥有一部分数据用以训练模型
不交换数据:在联邦学习训练过程中,任意一个参与方的任意原始数据不会离开该参与方,不会被直接交换和收集
保护传输信息:在联邦学习训练过程中,训练所需的信息需要经过保护后在个参与方之间进行传输,使得各参与方无法基于传输的信息推测出其他参与方的数据
近似无损:模型的量能要充分接近理想模型(即各参与方通过直接合并数据训练得到的模型)的性能
我们可以将联邦学习分为三种主要类型:横向联邦学习、纵向联邦学习以及联邦迁移学习
横向联邦学习
横向联邦学习适用于数据持有者拥有相似特征但不同样本的情况,例如不同用户的手机数据
横向联邦学习以数据的特征维度为导向,取出参与方特征相同而用户不完全相同的部分进行联合训练。在此过程中,通过各参与方之间的样本联合,扩大了训练的样本空间,从而提升了模型的准确度和泛化能力。
当然,想要在普通的模型测试中模拟横向联邦非常简单,我们只需将同一数据集分割成几份,作为不同的客户端上的数据即可
客户-服务器架构
横向和纵向是从参与方拥有的数据类型出发,对联邦学习进行分类
我们还需要关注具体架构
联邦学习有两种常用的架构:客户-服务器架构以及对等网络架构
客户-服务器架构也被称为主-从(master-worker)架构或者轮辐式(hub-and-spoke)架构。在这种系统中,具有同样数据结构的 K 个参与方(也叫作客户或用户)在服务器(也叫作参数服务器或者聚合服务器)的帮助下,协作地训练一个机器学习模型
步骤1:各参与方在本地计算模型梯度,并使用同态加密、差分隐私或秘密共享等加密技术,对梯度信息进行掩饰,并将掩饰后的结果(简称为加密梯度) 发送给聚合服务器。
步骤2:服务器进行安全聚合(secure aggregation)操作,如使用基于同态加密的加权平均。
步骤3:服务器将聚合后的结果发送给各参与方。
步骤4:各参与方对收到的梯度进行解密,并使用解密后的梯度结果更新各自的模型参数。
当然除了聚合梯度,服务器端也可以对收到的模型参数进行聚合
纵向联邦学习
对等网络架构
对等网络架构中不存在中央服务器或协调方
每一个训练方负责只使用本地数据训练同一个机器学习模型(如DNN)
训练方使用安全链路(channels)在相互之间传输模型参数信息
FedAvg算法
基于同态加密的参数聚合
隐私保护
K-匿名
通过Generalization & Suppression等技术,发布精度较低的数据,使得同一个准标识符至少有k条记录,使观察者无法通过准标识符连接记录
差分隐私
中心化差分隐私
ε 越小, 所加入的拉普拉斯噪声的概率密度越平均, 所加入的噪声为0的概率就越小, 对输出的混淆程度就越大, 保护程度也就越高
指数机制:通过返回分数近似最大的回复来实现差分隐私保护
本地化差分隐私
随机回答,需要有一个校正过程