大数据安全 | 隐私保护 |
---|---|
数据机密性、数据完整性、真实性、不可否认性,以及平台安全,数据权属判定 | 匿名性 |
安全需求的机密性:要求数据对于非授权用户完全不可访问 | 数据匿名需求:防止攻击者将已公布的信息与现实中的用户联系起来 |
数据对象是有明确定义 | 所指的用户“隐私”则较为笼统,可能具有多种数据形态存在 |
传统加密技术的主要目标是保护数据的机密性。
一个加密算法被定义为一对数据变换,其中一个变换应用于数据的起源项,称为明文;所产生的相应数据项称为密文。这个变换称为加密变换。而另一个变换应用于密文,恢复出明文,称为解密变换。
明文和密钥通常都可以用比特串的形式存储;但密文较长,密钥较短。
加密和解密密钥相同,或可以互相推导。就像需要用钥匙才能锁上的门锁。
具备机密性、可鉴别性、完整性;不保证抗抵赖性。
机密性:
可鉴别性:
完整性:
抗抵赖性:
由于数字世界中,复制件和原件是无法区分的,因此加密者和解密者对密文有相同的生产能力。
采用两个不同的密钥将加密和解密功能分开。
公钥密码必须具有如下重要特性:给定公钥,要确定出私钥在计算上是不可行的。就像常见的门,锁门很容易,但开门需要钥匙。
非对称加密技术的六要素:
Tip:
项目 | 对称加密技术 | 非对称加密技术 |
---|---|---|
特征 | 双方信息对等 | 双方信息不对等,根据公钥计算私钥是困难的 |
条件 | 实现密钥交换 | 不需要密钥交换 |
效果 | 保证机密性、可鉴别性、完整性;不保证抗抵赖性 | 保证机密性;不保证可鉴别性、抗抵赖性、完整性 |
缺点 | / | 解密加密效率低 |
密钥个数 | n个人两两秘密通信需要 n(n-1)/2个密钥 | n个人两两秘密通信需要n对密钥 |
为克服非对称加密技术的缺点——解密加密效率低
发送者A用对称密钥加密明文,用公钥加密对称密钥,接受者B用私钥解密对称密钥,用对称密钥解密密文得到信息。
非对称加密技术保证信息的机密性,数字签名保证可鉴别性、抗抵赖性、完整性。
是否存在一种方法,同时满足四条性质?
答:先私钥后公钥
Hash函数(也称哈希函数)可将任意长的消息压缩为固定长度的Hash值,Hash函数需满足如下性质:
可用于文件完整性检验,密码保存,软件下载等场景。
不使用密码,任何人都可以计算,因此不能避免恶意篡改。比如在流氓软件的场景中,可以通过同时修改软件和Hash的方式实现恶意篡改。
Hash通常和非对称密码技术配合实现数字签名,避免用私钥加密明文而导致的效率低下。保证完整性、可鉴别性、抗抵赖性。
MAC(Message Authentication Code,消息认证码/报文鉴别码)基于一个大尺寸数据生产一个小尺寸数据,在性能上也需要避免碰撞,但MAC算法有对称密钥参与,计算结果类似于一个加密的Hash值。
保证可鉴别性和完整性,不能抗抵赖(因为使用了对称密钥)。
加密技术 | 机密性 | 可鉴别性 | 完整性 | 抗抵赖性 |
---|---|---|---|---|
对称加密技术 | √ | √ | √ | × |
非对称加密技术 | √ | × | × | × |
Hash+非对称密码技术 | - | √ | √ | √ |
MAC+对称加密技术 | √ | √ | √ | × |
首先假设双方分别是Alice和Bob,他们就一个随机的初始的颜色达成了一致。这个颜色不需要被保密,但是每一次要不一样。在这个例子中,这个初始的颜色是黄色。然后他们两个人每一个人选择一个秘密的颜色,Alice只知道Alice的颜色,其他任何人都不知道Alice选的是什么颜色,Bob同理。在这个例子中,Alice选择的是红色,Bob选择的是蓝绿色。这个过程的关键部分是Alice和Bob每个人将他们自己的秘密颜色和他们对方彼此共享的颜色(初始的颜色即黄色)混合在一起,导致了分别是orang-tan色,和浅蓝色。他们公开的将混合之后的颜色进行交换。最终,他们每一个人将他们从对方收到的颜色和他们自己的private color进行混合。这个结果就是最终的混合颜色。在这个例子中是黄褐色。这个颜色和对方的颜色是一致的。
如果某个第三方听到了这个交换,他就会知道公共的颜色(黄色)和第一个混合的颜色(orange-tan和浅蓝色),但是对这个第三方来说,确定最终的秘密颜色(黄褐色)在计算上是很困难的。事实上,当在使用大的数字而不是颜色时,这个行为需要大量的计算。这个行为即使是现代超极计算机都是不可能在一个合理的时间内完成的。
记Alice的公私钥对为 ( P U a , P R a ) (PU_a,PR_a) (PUa,PRa),Bob的公私钥对为 ( P U b , P R b ) (PU_b,PR_b) (PUb,PRb)
Unix是一个多用户操作系统,需要保证许多用户同时访问操作系统服务,这就要求系统具有高度安全性和隐私性。
Unix对每个用户分配唯一的用户号(UID),多个用户组成用户组,每个组分配一个组号(GID)。
系统管理员可以将用户分到组中,用户也可以属于多个组,Unix中的每个进程具有拥有者的UID和GID。
文件的权限有三种,读(r)、写(w)和执行(x)。下面为Unix文件权限的示例:
符号表示 | 含义 |
---|---|
rwx------ | 仅拥有者可以读、写、执行 |
rwxr-xr-x | 拥有者可以读、写、执行;其他用户可以读和执行 |
r-x—r-x | 拥有者和其他用户可以读和执行,同组其他用户没有权限 |
rw-r----- | 拥有者可以读写,同组其他用户可读 |
字符每组依次为所有者、同组其他用户、其他用户
早期的访问控制技术都是建立在可信引用监控机基础上的。引用监控机是在1972年由Anderson首次提出的抽象概念,它能够对系统中的主体和客体之间的授权访问关系进行监控。当数据存储系统中存在一个所有用户都信任的引用监控机时,就可以由它来执行各种访问控制策略,以实现客体资源的受控共享。
访问控制策略是对系统中用户访问资源行为的安全约束需求的具体描述。
引用监控机(Reference Monitor,RM):指系统中监控主体和客体之间授权访问关系的部件。
一般来说,这类访问控制技术都涉及如下的概念:
<操作,客体>
。访问控制模型的发展历史
在20世纪70年代,大型资源共享系统出现在政府和企业中。为了应对系统中的资源安全共享需求,访问控制矩阵等①自主访问控制模型和BLP、Biba等②强制访问控制模型被提出,并得到了广泛应用。
在20世纪80年代末到90年代初,人们发现在商业系统按照工作或职位来进行访问权限的管理更加方便。因此,③基于角色的访问控制模型被提出,并发展成为迄今为止在企业或组织中应用最为广泛的访问控制模型之一。
在21世纪初期,互联网技术使得用户对资源的访问处于开放环境。开放环境往往无法预先获得主客体身份的全集,且存在身份隐藏的需求。因此,④基于属性的访问控制被提出,它通过安全属性来管理授权,而不需要预先指导访问者身份。
客体的属主决定主体对客体的访问权限。可以被表述为 ( S , O , A ) (S,O,A) (S,O,A)三元组。其中, S S S表示主体(subject)集合, O O O表示客体(object)集合,且 S ⊂ O S⊂O S⊂O。 A A A表示访问(Access)矩阵, A ( s i , o j ) A(s_i,o_j) A(si,oj)则表示主体 s i s_i si能够对客体 o j o_j oj执行的操作权限。
访问矩阵中的一行,代表某个主体对系统中所有客体的访问权限信息,一列代表所有主体对某个客体的访问权限信息。
自主访问控制模型的实施由RM根据访问矩阵A进行判定,而数据的所有者对权限的管理通过修改访问矩阵A来实现。
访问矩阵A在实际系统中主要有两种实现方式:
BLP(Bell-lapadula)模型被用于保护系统的机密性,防止信息的未授权泄漏。
BLP模型中在为系统中每个保护范围内的主客体都分配了安全标记后,主体对客体的访问行为应满足如下两条安全属性:
从信息流角度看,上述两条读/写操作所应遵循的安全属性阻止了信息从高安全级别流入低安全级别,且使得信息“仅被需要知悉的人所知悉”,因此,能够有效地确保数据的机密性。
但是BLP模型这种“下读上写”的规则忽略了完整性的重要安全指标。
Biba模型是第一个关注完整性的访问控制模型,用于防止用户或应用程序等主体未授权地修改重要的数据或程序等客体。该模型可以看作是BLP模型的对偶。
Biba模型的严格完整性策略是BLP模型的对偶,也是不特别指明情况下所谓的Biba模型。它应满足如下安全属性:
基于上述三条安全属性,信息只能从高完整性级别的主客体流向低完整性级别的主客体,从而有效避免了低完整性级别的主客体对高安全级别主客体的完整性的“污染”。
从上述BLP模型和Biba模型可以看出,强制访问控制是基于主客体标记之间的支配关系来实现的。在大数据场景下,由安全管理员来进行强制访问控制的授权管理是具有挑战性的。
RBAC0是最基本的模型,定义了用户、角色、会话和访问权限等要素。RBAC1在RBAC0的基础上引入了角色继承的概念。RBAC2增加了角色之间的约束条件,例如互斥角色等。RBAC3是RBAC1和RBAC2的综合,探讨了角色继承和约束之间的关系。
标准RBAC模型包括了RBAC0~3四个模型。
Core RBAC定义了基于角色访问控制的5个元素——用户、角色、对象、操作、权限以及一个动态的概念——会话。
角色访问控制的基本元素
角色继承操作(Role Hierarchies,RH)即一个角色 r 1 r_1 r1继承了另一个角色 r 2 r_2 r2,那么 r 1 r_1 r1就拥有 r 2 r_2 r2的所有权限。角色继承分成两类:
RBAC2在RBAC0的基础上引入了指责分离的概念,以调节角色之间的权限冲突,即如果两个角色拥有的某些权限是冲突的,那么就需要增加职责分离约束,使两个角色不能并存。根据约束生效的时期不同,这些约束可以被分为两类:
Combines RBAC是在Core RBAC的基础上对Hierarchal RBAC的角色继承和Constraint RBAC的约束的综合。
基于属性的访问控制模型是一种适用于开放环境下的访问控制技术。它通过安全属性来定义授权,并实施访问控制。由于安全属性可以由不同的属性权威分别定义和维护,所以具备较高的动态性和分散性,能够较好地适应开放式的环境。具体地,它包括如下几个重要概念:
AA为属性权威 attribution authority,负责实体属性的创建和管理,并提供属性的查询。
PAP为策略管理点,负责访问控制策略的创建和管理,并提供策略的查询。
PEP为策略执行点,负责处理原始访问请求,查询AA中的属性信息生成基于属性的访问请求,并将其发送给PDP进行判定,然后根据PDP的判定结果实施访问控制。
PDP为策略判定点,负责根据PAP中的策略集对基于属性的访问请求进行判定,并将判定结果返回PEP。
较为适合大数据的开放式数据共享环境。然而属性的管理和标记对于安全管理员来说仍然是劳动密集型工作,且需要一定的专业领域知识。在大数据场景下,数据规模和应用复杂度使得这一问题更加严重。
早期访问控制模型和技术在大数据应用场景下主要存在三方面问题:
在基于角色的访问控制中,管理员需要解决两个问题:
大数据场景下角色的定义将是大工作量,且需要领域知识的任务。安全管理员已经难以自上而下地分析和归纳安全需求,并基于需求来定义角色了。为了解决该问题,自底向上定义角色的方法被提出,即采用数据挖掘技术从系统的访问控制信息等数据中获得角色的定义,也被称为角色挖掘(Role Mining)。目前经典的角色挖掘技术可以分为两类:
系统在初始情况下往往已经有了简单的访问权限分配——“哪些用户能够访问哪些数据”,例如授权信息表。
以上表格中所呈现的权限组合往往暗示着为了完成工作而应该设置的角色,因此,可以对已有的权限分配关系进行数据挖掘来寻找潜在的角色概念,并将角色与用户、角色与权限分别关联。
我们将角色看作大量用户共享的权限组合,并假设真实的角色定义已经正确且完整地隐含在当前的授权数据中。也就是说,所有人持有的权限都是有意义的,同时已有的权限分配都是正确的。
聚类是一种非监督场景下的发现数据潜在模式的经典方法。系统的用户基数越大,权限越多,这种权限分配的潜在模式就越明显,采用聚类进行角色挖掘的效果就越好。
基于层次聚类的角色挖掘根据层次聚类方式的不同又可以分为:
将权限看作是聚类的对象,通过不断合并距离近的类簇完成对权限的层次聚类,聚类结果为候选的角色。
基本定义
将初始较大的权限集合不断地细分为更小的权限集合,从而形成由权限类簇构成的树。
U:系统中所有用户构成的集合。
P(u):用户u所持有的权限集合。
R(x):由权限集合x构成的角色。
Count(r):与角色r相关联的用户的数量。
intersection(i,j):角色i和 角色j所共有的权限构成的集合。
基于层次聚类的角色挖掘方法它们是对已有的权限分配数据进行角色挖掘,所以挖掘出的角色定义的质量往往过多地依赖于已有权限分配的质量。而对于大数据应用这种复杂场景来说,已有权限分配的质量往往很难保证。
聚类层次和角色层次在结构上不是一一对应的。凝聚式角色挖掘通常会产生包含大量权限的超级类簇,而分裂式角色挖掘通常会产生许多很小的权限集合,这些集合不一定适合作为有意义的角色。
凝聚式角色挖掘方法得到的类簇是排他的,即某个权限被归入一个类簇后,只能被合并该类簇的父类簇包含,不符合权限的使用规律。
LDA模型认为 θ θ θ和 φ φ φ也应该满足一定的概率分布,而不是固定值,因此进一步引入了以 α α α和 β β β为参数的两个狄利克雷分布来完善文档的生成过程:
LDA文本生成过程:
文档生成问题 | 角色挖掘问题 |
---|---|
文档生成问题 | 角色挖掘问题 |
包含多个文档的“语料库” | 访问控制日志 |
一个文档u | 用户u的权限使用记录 |
单词p | 权限p |
文档u中单词p的词频n | 用户u对权限p的使用次数n |
主题r | 角色r |
将角色挖掘问题映射为文本分析问题,采用两类主题模型LDA和ATM进行生成式角色挖掘,从权限使用情况的历史数据来获得用户的权限使用模式,进而产生角色,并为它赋予合适的权限,同时根据用户属性数据为用户分配恰当的角色。
具体来说,用LDA或ATM方法得到用户(文档)到角色(主题)的映射 θ θ θ以及角色(主题)到权限(单词)的映射 φ φ φ。将 θ θ θ中的概率值按降序排列,找到急剧下降的点,然后将前 k k k个概率值对应的角色赋予用户 u u u,剩下的角色被忽略。类似地,将 φ φ φ中前 m m m个概率值对应的权限赋予角色 r r r,剩下的权限被忽略。
从风险管理的角度看,访问控制是一种平衡风险和收益的机制。
传统访问控制:风险与收益的平衡被静态定义在访问控制策略中,即“满足策略约束条件的访问行为所带来的风险”被视为系统可接受的风险。这种风险被定义在访问控制策略中,比较适合访问风险十分明确的场景。
而大数据的一大显著特点就是先有数据、后有应用。人们在采集和存储数据的时候,往往无法预先知道所有的数据应用场景,因此安全管理员也往往无法获知访问行为带来的风险和收益的关系,进而难以预先定义恰当的访问控制策略。
基于风险的访问控制:根据访问行为带来的风险,动态地赋予访问权限。风险与收益的平衡是访问过程中动态实施的,而非预先定义在由管理员分析获得并隐含在访问控制策略中。
风险量化是将访问行为对系统造成的风险进行数值评估,它是基于风险来实施访问控制的前提。
风险量化的第一步是确定影响风险值的要素集合。
常见的风险要素:
在确定了要素风险后,需要进一步根据这些要素来为访问行为计算出量化的风险值。
核心思想是“风险量化值由危害发生的可能性和危害程度决定”,即
Q u a n t i f i e d R i s k = ( P r o b a b i l i t y o f D a m a g e ) × ( V a l u e o f D a m a g e ) Quantified Risk = (Probability of Damage)× (Value of Damage) QuantifiedRisk=(ProbabilityofDamage)×(ValueofDamage)
风 险 量 化 值 = 危 害 发 生 的 可 能 性 × 危 害 的 值 风险量化值=危害发生的可能性×危害的值 风险量化值=危害发生的可能性×危害的值
其中,危害的值(Value of Damage)是一个对危害程度的量化度量,往往取决于信息资源的价值,只能由企业或组织根据业务背景自行评估。而危害发生的可能性(Probability of Damage)是指引发该危害的事件发生的可能性,通常采用概率论进行计算。
基本思想是利用系统中用户的历史访问行为来构建正常用户的访问行为画像,并以此为风险量化的基准,然后计算每次用户访问行为与该基准的偏离程度作为风险量化值。即访问行为偏离基准越大,则该访问产生的风险越大。
其特点是通过行为异常的概率来衡量风险值,所以风险量化结果可以随着系统中整体用户的行为变化而动态变化,相比于静态计算方法更加灵活。然而这种计算往往需要大量的系统历史数据以确保风险量化的准确性。
在对访问行为的风险进行量化之后,还需要进一步利用这些风险值设计灵活的访问控制实施方案。
判定结果从“允许/拒绝”的二值向多值发展,引入了部分允许的概念。
基于密钥管理的访问控制技术的安全性依赖于密钥的安全性,而无须可信引用监控机的存在。
该技术是通过严格的密钥管理来确保授权用户才能有解密数据所需要的密钥来实现访问控制。根据访问控制系统所支持的能够发送数据的用户数量,可以分为:
前者仅支持少量的可信的数据所有者向其他用户分享自己的数据,后者则支持系统内所有用户间的数据分享。
用户密钥树中所有的密钥均为对称密钥。
系统中的每个用户拥有一个自己的密钥 ,作为用户密钥树的叶子节点。
选择红色节点处的密钥集 { k 0 , k 10 , k 110 } \{k_0,k_{10},k_{110}\} {k0,k10,k110}进行数据加密,则未授权的普通用户就是U7,他将无法解密数据。
由于采用公钥加密方式,所以系统的所有用户都可以是数据所有者,并向其他用户分享数据,消除了单发送者广播加密方案对发送者范围的限制。
(1)数据所有者为新产生的数据文件m产生非对称密钥FSK用于对文件m进行签名,对称密钥FEK对文件m 加密。
(2)数据所有者用自己的主加密密钥(非对称)MEK加密FSK私钥和FEK,产生密钥块,并将自己的ID标识在密钥块上 。
(3)数据所有者对密钥块、FSK公钥、时间戳、文件名进行Hash运算 ,并用自己对主签名密钥MSK(非对称)对Hash值进行签名,产生数据所有者签名块。
(4)数据所有者将密钥块、FSK公钥、时间戳、文件名、数据所有者签名块合并形成元数据md-file
。
(5)数据所有者用FEK加密文件m,并用FSK私钥对文件m进行签名,产生加密后的数据文件结构d-file
。
(6)数据所有者将md-file
和d-file
一起发送给数据服务者进行存储。
(1)数据所有者从数据服务者处根据文件名取回文件m和对应的md-file,并用自己的MSK验证 md-file
数据所有者的签名块。
(2)数据所有者从公钥服务器获取用户群组X对应的公钥集合,即用户群组X中的每个用户至少拥有该公钥集合中的一个公钥对应的私钥。数据所有者用公钥集合中的每个公钥对数据文件的FEK进行加密,分别产生一个密钥块,并将公钥的ID标识在密钥块上。若对用户组群X的授权还包含写权限,则将FSK私钥和FEK一起加密 。
这样就实现了读、写权限的分离,即拥有FEK的用户能够读该数据,而拥有FSK私钥的用户能够写该数据。
数据所有者将新产生的这些密钥块都添加到md-file中。
(3)数据所有者更新md-file
中的时间戳,并用自己的MSK重新产生数据所有者签名块,然后将新的md-file发送给数据服务者进行存储。
(1)用户A从数据服务者处获得文件m的md-file
,并从公钥服务器获得数据所有者的MSK来验证md-file的签名以及时间戳。
(2)用户A根据自己持有的公钥ID来查找密钥块,并用该公钥对应的私钥进行解密,以获得该数据对应的FEK(以及FSK的私钥)。
(3)用户A从数据服务者处获得文件m的d-file
,用FSK公钥验证签名。
(4)用户A用FEK解密d-file
中的加密数据,完成数据的读访问。若密钥块中包含FSK私钥,则用户A能够进一步写 d-file
中的数据内容,再重新用FEK加密数据,并用FSK私钥产生新的签名。最后,用户A将更新后的d-file
提交给数据服务者进行存储。
在基于密钥管理的访问控制中,系统通过控制用户持有的密钥集合来区分用户,进而实施授权和访问控制。因此数据所有者需要预先知道系统中潜在的授权用户,并获得他们的对称密钥或公钥。这对于规模较大且用户较多的大数据应用来说是不方便的。
基于属性加密的访问控制是通过更加灵活的属性管理来实现访问控制,即将属性集合作为公钥进行数据加密,要求只有满足该属性集合的用户才能解密数据。
(访问结构,Access Structure) 令 { P 1 , P 2 , . . . . , P n } \{P1,P2,....,Pn\} {P1,P2,....,Pn}是一个参与者集合。令 A ⊆ 2 { P 1 , P 2 , . . . . , P n } A⊆2^{\{P1,P2,....,Pn\}} A⊆2{P1,P2,....,Pn},若 ∀ B , C ∀B,C ∀B,C,有 B ∈ A B∈A B∈A,且 B ⊆ C B⊆C B⊆C,那么 C ∈ A C∈A C∈A,则称 A A A是单调的。若 A A A是单调的,且是非空的,即 A ⊆ 2 { P 1 , P 2 , . . . . , P n } \ { ∅ } A⊆2^{\{P1,P2,....,Pn\}} \backslash\{∅\} A⊆2{P1,P2,....,Pn}\{∅},则称 A A A为一个访问结构。
A A A中的元素被称为授权集,非 A A A中的元素被称为未授权集。
常见的访问结构主要分为门限结构、访问树结构、LSSS矩阵结构等。目前应用较多的是访问树结构,它可以看作是对单层**(t,n)门限**结构的扩展。
(t,n)门限指秘密信息被分成 n n n份,要重构秘密信息就必须获得其中至少 t t t份。
通常可通过插值法够造门限,如拉格朗日插值法。
记要共享的秘密为 s s s,随机选取一组 _ ai构造 t − 1 t-1 t−1次多项式 ( ) = + 1 + 2 2 + ⋯ + − 1 − 1 ()=+_1 +_2^2+⋯+_{−1}^{−1} f(x)=s+a1x+a2x2+⋯+at−1xt−1选择 n n n个 _ xi,计算 ( ) (_) f(xi),并将 ( , ( ) ) (_, (_ )) (xi,f(xi))分发给 n n n个不同的参与方 _ Pi。
当 n n n个参与方中有 t t t个加入,出示他们的子秘密,得到 t t t个点 ( , ( ) ) (_, (_ )) (xi,f(xi)),可通过插值法恢复多项式 ( ) () f(x),进而得到秘密 s = ( 0 ) s=(0) s=f(0)。任意少于 t t t个参与者无法恢复多项式,因而无法获得秘密。
(访问树结构,Access Tree) T T T为一棵访问树,树中的每个节点被记为 x x x,该节点的子节点树被记为 _ nx,其对应的门限值被记为 _ tx。每个叶子节点代表一个属性,且 = 1 _=1 tx=1, = 0 _=0 nx=0。非叶子节点可以通过 _ nx和 _ tx定义属性上的AND、OR或门限关系。
下图表示了一条策略,即 “Place属性为Office,或ID为Alice且Place为Home的用户能够解密数据”
CP-ABE算法(基于属性的访问控制算法),包含以下四个步骤:
(1)Setup:生成主密钥MK和公开参数PK。MK由算法构建者掌握,不允许被泄露,而PK则被发送给系统中的所有参与者。
(2)Encrypt:使用PK、访问结构T将数据明文加密为密文C
(3)KeyGen:使用MK、用户属性值S生成用户的私钥SK
(4)Decrypt:使用私钥解密密文C得到明文M,只有在S满足T的条件下,解密操作才能成功
基本访问控制方案的参与方
(1)可信权威:维护了每个用户的属性与密钥的对应关系,为用户发布属性密钥。执行算法的(1)和(3)步,是整个系统中唯一需要被其他参与方完全信任的参与方。
(2)数据所有者:具有数据的所有权,负责访问策略(访问结构T)的定义,并产生与策略绑定的密文数据,然后发送给服务提供者,即算法的第(2)步。
(3)用户:是数据的访问者。若该用户具有满足密文数据所绑定策略中要求的属性,即持有恰当属性密钥,那么就可以解密出数据明文,即算法的第(4)步。
(4)服务提供者:负责提供数据的外包存储。
CA:负责为整个系统中所有用户和属性权威颁发和维护身份。
属性权威:负责颁发、撤销和更新用户属性。
数据所有者:具有数据的所有权,产生访问结构来描述授权用户的范围,并采用多权威的属性加密算法对数据加密。
用户:是数据的访问者。如果用户的属性满足访问结构,则用户能够成功解密出数据。
服务提供者:负责提供数据的外包存储。
云存储是在云计算概念上衍生出来的,其继承了云计算的按需使用、高可扩展性、快速部署等特点,解决了当前政府和企业需要不断增加软硬件设备和数据库管理人员来自主地存储、管理和维护海量数据的问题。由于云存储使得数据的所有权和管理权相分离,用户数据将面临多方面的安全威胁:
为保证云数据的安全性,一种通用的方法是用户首先使用安全的加密机制对数据进行加密,然后再将密文数据上传至云服务器。由于只有用户知道解密密钥,而云存储服务提供商得到的信息是完全随机化的,数据的安全性完全掌握在用户手中。当用户需要对数据进行检索时,只能把全部密文下载到本地,将其解密后再查询。这个过程要求客户端具有较大的存储空间以及较强的计算能力,且没有充分发挥云存储的优势。
密文检索(Searchable Encryption,SE,叫做可搜索加密)技术支持云存储系统在密文场景下对用户数据进行检索,然后将满足检索条件的密文数据返回给用户。在检索过程中,云服务器无法获得用户的敏感数据和查询条件,即密文检索可以同时保护数据机密性以及查询机密性。
密文检索主要涉及数据所有者、数据检索者以及服务器 3种角色。
① 数据所有者首先为数据构造支持检索功能的索引,同时使用传统的加密技术加密全部数据,然后将密文数据和索引共同存储到服务器。
② 需要检索时,数据检索者为检索条件生成相应的陷门,并发送给服务器。
③ 服务器使用索引和陷门进行协议预设的运算,并将满足检索条件的密文数据返回给数据检索者。
④ 数据检索者使用密钥将检索结果解密,得到明文数据。
有时服务器返回的密文数据中可能包含不满足检索条件的冗余数据,此时数据检索者还需要对解密后的明文数据进行二次检索,即在本地剔除冗余数据。
通常认为数据所有者和数据检索者是完全可信的,而服务器属于攻击者,其对用户的敏感数据和检索条件比较好奇。目前大部分密文检索方案均假设服务器是诚实但好奇的(Honest-but-Curious,HBC),即服务器会忠实地执行数据检索者提交的检索请求,并返回相应的检索结果,同时其可能会利用自己所掌握的一切背景知识来进行分析,期望获得真实的敏感数据和检索条件。
根据应用场景的不同,密文检索技术可以分为对称密文检索(Symmetric Searable Encrption, SSE)和非对称密文检索(Asymmetric Searable Encrption,ASE)两大类:
根据检索的数据类型的不同,密文检索技术可以分为关键词检索和区间检索两大类:
PIR(Private Information Retrieval,隐私信息检索)技术的研究主要针对公开数据库,其目标是允许用户在不向服务器暴露查询意图的前提下,对服务器中的数据进行查询并取得指定内容。
保护查询意图:专利
根据服务器的数目以及用户与服务器之间的交互轮数的不同,可将PIR技术分为4大类:单服务器的、多服务器的、单轮交互的以及多轮交互的。目前主要研究的是单轮交互的PIR问题。
定义3-1 (单轮交互的PIR问题)@
设存在 ≥ 1 ≥1 k≥1个服务器,其存储的内容完全相同,均为 n个比特的信息 = { 1 , 2 , … , } =\{_1,_2,…,_\} X={x1,x2,…,xn},且服务器之间不会进行相互通信。 A A A希望对服务器中的数据进行查询,并得到 _ xi ,其具体查询过程如下:
如果在上述查询过程中,任意服务器均不了解关于 i的任何信息,则称这一交互是PIR的。换句话说,如果 A A A进行了两次查询,分别访问了 _ xi和 ′ _′ xi′ ,则服务器对这两次查询所见的视图在概率分布上没有区别,即
P r [ V i e w j ( X , i ) = V i e w ] = P r [ V i e w j ( X , i ′ ) = V i e w ] Pr[View_j(X,i)=View]=Pr[View_j(X,i^{'})=View] Pr[Viewj(X,i)=View]=Pr[Viewj(X,i′)=View]
PIR方案假设数据是二进制的,且客户端已经了解待获取的数据在数据集中的位置。但是在实际检索场景中,客户端一般都是输入一个感兴趣的关键词,然后服务器根据该关键词找到对应的数据内容。为此,提出了PIRK(Private Information Retrieval by Keywords)技术。
定义3-3 (PIRK问题)
设存在 k个服务器,其存储的内容完全相同,均为 n个长度为 l的字符串 = { 1 , 2 , … , } =\{_1,_2,…,_\} S={s1,s2,…,sn},且服务器之间不会进行相互通信。 A A A感兴趣的关键词是一个长度为的字符串 w。
如果存在一个协议使A能够得到所有满足 = _= sj=w的 j,且任意服务器均不了解关于 w的任何信息,则称该协议是 ( , , ) (,,) PIRK(l,n,k)的。
需要注意的是,此定义只包含了找到 = _= sj=w的过程,至于找到 _ sj之后如何获取 _ sj对应的数据内容,则可以通过运行一般的PIR协议来完成。
从服务器的角度来看,PIR技术仅保护了客户端的查询意图,而对服务器中的数据集缺乏保护。因此,由PIR技术进一步发展至SPIR(Symmetric Private Information Retrieval)技术,其目标是将保护范围扩大到服务器。
SPIR问题与PIR问题相似,但是在其基础上增加了一项要求: A A A不了解 _ xi之外的任何信息。换句话说,如果存在两个数据源 = { 1 , 2 , … , } =\{_1,_2,…,_\} X={x1,x2,…,xn}和 = { 1 , 2 , … , } =\{_1,_2,…,_\} Y={y1,y2,…,yn},且 = _=_ xi=yi。则对于这两个数据源, A A A查询第 i份数据,所见的视图应当没有任何区别,即
P r [ V i e w A ( X , i ) = v i e w ] = P r [ V i e w A ( Y , i ) = v i e w ] Pr[View_A(X,i)=view]=Pr[View_A(Y,i)=view] Pr[ViewA(X,i)=view]=Pr[ViewA(Y,i)=view]
任意 N N N服务器的PIR方法都可以转换为 N + 1 N+1 N+1服务器、同样数量级复杂度的SPIR方法。
Bob有n个秘密 { m 1 , m 2 , . . . , m n } \{m_1,m_2,...,m_n\} {m1,m2,...,mn} ,Alice想获得其中的1个,但是Bob不知道Alice获取的是哪一个,同时Alice也不知道Bob剩下的 n − 1 n-1 n−1个秘密中的任何一个。Alice和Bob共享数 g g g和 h h h。
SPIR技术要求保护客户端查询意图不被服务器知道的同时,也对服务器中的数据集加以保护,使得客户端无法了解所查询信息以外的任何信息。
ORAM技术的目标是在读写过程中向服务器隐藏用户的访问模式。这里,访问模式是指客户端向服务器发起访问所泄露的信息,包括操作是读还是写、操作的数据地址、操作的数据内容等。与PIR的不同之处在于,PIR只考虑保护客户端的查询意图;而ORAM保护的内容更为广泛。
定义3-4 (ORAM系统)
如果对于系统中任意两个输入序列 Y Y Y和 Y ′ Y^{′} Y′,从服务器的角度来看,访问模式 A ( Y ) A(Y) A(Y)和 A ( Y ′ ) A(Y^{′}) A(Y′)是不可区分的,则认为这个系统是一个ORAM系统。
其基本解决思想是:设计一种转换协议,将1次访问转换为k次访问,从而保证两组访问经过转换之后无法区分
在对称密文检索方案中,数据所有者和数据检索者为同一方。该场景适用于大部分第三方存储,也是近几年本领域的研究热点。一个典型的对称密文检索方案包括如下算法:
对称密文检索的核心与基础部分是单关键词检索。目前,SSE可以根据检索机制的不同大致分为三大类:
异或运算:a、b两个值不同时,异或结果为1;否则为0
异或性质: ( a ⊕ b ) ⊕ a = b (a⊕b)⊕a=b (a⊕b)⊕a=b
该方案的核心思想是对文档进行分组加密,然后将分组加密结果与一个伪随机流进行异或得到最终用于检索的密文。检索时,用户将检索关键词对应的陷门发送给服务器,服务器对所有密文依次使用陷门计算密文是否满足预设的条件,若满足则返回该文档。
基于全文扫描的方案需要对每个密文块进行扫描并计算,在最坏的情况下,检索一篇文档的时间与该文档的长度呈线性关系,检索效率较低。
目前,人们主要集中于研究基于文档-关键词索引和基于关键词-文档索引的密文关键词检索方案,其将索引从密文中独立出来,即数据本身可以采用任意加密算法加密,检索功能由索引实现。
基于文档-关键词索引的方案的核心思路是为每篇文档建立单独的索引,且服务器在检索时需要遍历全部索引,因此,这类方案的检索时间复杂度与文档数目成正比。
(key,value)
布隆过滤器利用位数组表示集合,并可以快速判断一个元素是否属于该集合。记位数组的长度为 m,集合为 = 1 , … , ={_1,…,_} S=x1,…,xn 。
首先,构造各位置均为0的初始数组 B F BF BF,并选取 k个Hash函数 h 1 , … , h ℎ_1,…,ℎ_ h1,…,hk,这些Hash函数可以将集合中的元素映射到位数组中的某一位。
然后对于各元素 _ xi,为其计算 k个Hash值 h 1 ( ) , … , h ( ) ℎ_1 (_),…,ℎ_ (_) h1(xi),…,hk(xi),并将位数组中的相应位置设为1。
当想要判断元素 y是否属于集合 S时,我们同样使用Hash函数 h 1 , … , h ℎ_1,…,ℎ_ h1,…,hk为其计算 k个值 h 1 ( ) , … , h ( ) ℎ_1 (),…,ℎ_ () h1(y),…,hk(y),**如果位数组 B F BF BF中的相应位置均为1,我们则认为 y是 S中的元素。**但实际上,由于Hash函数的计算结果可能存在冲突, y有可能并不属于 S。
如下图所示的例子,如果 h 1 ( ) = h 2 ( ) ℎ_1 ()=ℎ_2 (_) h1(y)=h2(xi)且 h 2 ( ) = h 1 ( ) ℎ_2 ()=ℎ_1(_) h2(y)=h1(xj),则会发生误判。
借助于布隆过滤器,人们提出了一种基于文档-关键词索引地秘闻关键词检索方案
使用布隆过滤器为每篇文档分别构造索引,并使用伪随机函数为每个关键词计算两遍伪随机数,其一将关键词作为输入,其二将文档标识作为输入,从而同一关键词在不同文档中的计算结果不一致。
上述方案在检索判定时只需要计算若干次伪随机数,速度比基于全文扫描的方法提高很多。然而,由于布隆过滤器的特性,会有一定的概率返回不包含查询关键词的文档。
在基于文档-关键词索引的方案中,查询效率与文档数目呈线性关系,导致这类方案难以应用于大数据场景。为此,提出了基于关键词-文档索引的方案。
此类方案在初始化时为每个关键词生成包含该关键词的文档标识集合,然后加密存储这些索引结构。基于关键词-文档索引的方案不需要逐个检索每篇文档,其检索时间复杂度仅与返回的结果数目呈线性关系,因此查询效率远高于前两类方案。
基于关键词-文档索引的方案
索引包括一个数组 A A A以及一个查找表 T T T。
其核心思路是首先为包含关键词 _ wi的第 j篇文档构造节点 , j _{,j} Ni,j,此节点包含该文档的标识、下一个节点的加密密钥及其在数组 A A A中的存储位置,然后将此节点加密保存在数组 A A A中。
最后,将第一个节点 , 1 _{,1} Ni,1的加密密钥以及存储位置异或一个掩码后存储在查找表T中。
检索时,服务器首先通过查找表 T T T找到检索关键词对应的第一个节点的信息,然后对数组A进行查找和解密,直到获得检索关键词对应的最后一个节点。
为证明该方案的安全性,首先需要形式化地定义选择关键词语义安全IND-CKA和IND2-CKA(更为严格),并证明该方案满足这些安全性。
选择关键词语义安全IND2-CKA的含义是:
对于两个数据文档 0 _0 V0和 1 _1 V1,仅凭其密文索引无法对二者进行区分。
为了定义IND2-CKA,先定义如下游戏:
游戏3-1
我们将上述游戏的优势定义为 = ∣ P r ( ′ = ) − 1 / 2 ∣ _=|Pr(^′=)−1/2| AdvA=∣Pr(b′=b)−1/2∣。
定义3-5 称一个SSE方案是IND2-CKA安全的,如果任何敌手A在上述游戏中的优势都是可忽略的。
定理 3-1 如果函数是一个伪随机函数,则基于布隆过滤器的方案 ϵ 1 \epsilon_1 ϵ1满足IND2-CKA安全性。
IND2-CKA安全性缺陷
记 ∆ = 1 , … , ∆={_1,…,_} ∆=w1,…,wd为关键词集合,为每篇文档分别构造索引,具体步骤如下:
定理3-2 如果 π \pi π是伪随机置换函数,则上述方案满足IND2-CKA安全性。
显然,虽然上述方案可以满足IND2-CKA安全性,但是由于Search算法直接暴露了关键词 w w w的明文内容,该方案实际上是不安全的。究其根本原因,在于IND2-CKA安全性只考虑了索引和陷门孤立的安全性,而检索操作需要将索引和陷门二者同时作为输入,还需要考虑二者结合的安全性。
为此,人们提出了4个新的安全性的定义:
NS=NI
这里介绍非适应性语义安全NS和适应性语义安全AS,它们的安全级别关系是NS
定义3-7(查询历史) 一个查询历史 H H H包括两个组成部分:被查询的文档集合 D = { 1 , … , } D=\{_1,…,_\} D={D1,…,Dn}以及查询关键词列表 W = { 1 , … , } W=\{_1,…,_\} W={w1,…,wq},即 H = ( D , W ) H=(D,W) H=(D,W)。
定义3-8(访问模式) 一个查询历史H的访问模式α是所有查询返回的文档列表: α ( ) = ( ( 1 ) , … , ( ) ) \alpha()=((_1 ),…,(_ )) α(H)=(D(w1),…,D(wq))。
定义3-9(搜索模式) 一个查询历史H的搜索模式 δ δ δ是一个对称的 q × q q×q q×q矩阵,表示两次查询的关键词是否相等:
当且仅当 = _=_ wi=wj时,矩阵 δ ( H ) δ(H) δ(H)第 i i i行 j j j列的元素为1即 δ ( ) [ , ] = 1 δ()[,]=1 δ(H)[i,j]=1;否则, δ ( ) [ , ] = 0 δ()[,]=0 δ(H)[i,j]=0。
定义3-10(轨迹) 一个查询历史 H H H的轨迹 t t t包括文档集合中每篇文档的长度以及访问模式和搜索模式: ( ) = ( ∣ 1 ∣ , … , ∣ ∣ , α ( ) , δ ( ) ) ()=(|_1 |,…,|_ |,\alpha(),δ()) t(H)=(∣D1∣,…,∣Dn∣,α(H),δ(H))。
定义3-11 (非适应性语义安全)
设Real是如下的一个游戏过程:
设Sim是如下的一个模拟过程:
称一个密文检索方案是非适应性语义安全的,如果对于任意多项式能力的敌手,均存在一个多项式时间模拟算法,使得Real和Sim的输出结果无法区分。
定义3-12 (适应性语义安全)
Real是一个如下的游戏过程:
Sim是一个如下的模拟过程:
称一个密文检索方案是适应性语义安全的,如果对于任意多项式能力的敌手,均存在一个多项式时间模拟算法,使得Real和Sim的输出结果无法区分。
上述两种安全性说明了仅凭轨迹信息就能模拟出与原始方案不可区分的方案,这表明轨迹是密文检索方案唯一泄露的信息。非适应性安全定义和适应性安全定义的主要区别在于敌手的攻击能力,其中前者的背景知识是敌手一次性选定的,而后者的敌手可以根据以往的背景知识选择下一次需要获得的背景知识。
适应性安全高于非适应性
非对称密文检索是指数据所有者(数据发送者)和数据检索者(数据接收者)不是同一方的密文检索技术。与非对称密码体制类似,数据所有者可以是了解公钥的任意用户,而只有拥有私钥的用户可以生成检索陷门。一个典型的非对称密文检索过程如下:
主要思路:将属性值域进行分桶,并为各分桶分配一个唯一的标识,记录的索引即为其属性值所在分桶的标识。当需要进行检索时,用户将与检索区间相交的分桶的标识集合发送给服务器,服务器随后将这些分桶内的全部密文数据作为检索结果返回给用户。
方案特点:实现简单,在一定程度上保证了敏感数据的机密性。但是,服务器返回的检索结果中可能包含大量的冗余数据,需要客户端进行二次检索。此外,客户端还需要将分桶策略保存在本地。
主要思路:为数据构造B+树,并使用传统加密技术将各节点分别加密后存储到服务器。当需要进行检索时,服务器将密文节点返回给用户,由用户在解密后进行判断,然后通知服务器下一个需要查询的密文节点。
方案特点:客户端工作量较大,且需要服务器和客户端之间进行多轮交互操作。
矩阵加密是密文区间检索方案中一种常用的对称加密技术,其用于安全地计算两个向量的内积。矩阵加密具有实现简单、运算效率高、适用于处理高精度数据等优势,但是安全性较差。
假设 d d d为向量的维度,需要计算数据向量 P P P与查询向量 Q Q Q的内积。基础的矩阵加密方案的工作流程如下:
定理3-4 如图3-8所示,已知在一个原点为O的坐标系中存在一个单位圆,上半圆周上有A、B、C3个不同的点,OA和OB,OB和OC,OA和OC之间的夹角分别为θ1,θ2,θ3,其中0<θi<π,i=1,2,3。那么当且仅当cosθ3 推论3-1 已知在一个原点为O的坐标系中存在一个圆,上半圆周上有V、VL、VH3个不同的点,OV、OVL、OVH与横坐标的夹角分别是θ,θL,θH ,其中0<θ,θL,θH<π 。那么当且仅当cos(θH-θL) 基于以上定理以及推论,我们可以将区间判断映射为单断言。假设属性值域为 [ − D , D ] [-D,D] [−D,D],如图3-9所示,值映射函数 将值 v v v映射为角度 θ θ θ。由于该映射函数在 v ∈ [ − D , D ] v∈[-D,D] v∈[−D,D]时是单调递增的,那么对于任意 v 1 > v 2 , v 1 , v 2 ∈ [ − D , D ] v_1>v_2,v_1,v_2∈[-D,D] v1>v2,v1,v2∈[−D,D],其对应的映射角度 θ 1 , θ 2 θ1,θ2 θ1,θ2必然满足 θ 1 > θ 2 , θ 1 , θ 2 ∈ [ 0 , π ] θ_1>θ_2,θ_1, θ_2∈[0,π] θ1>θ2,θ1,θ2∈[0,π] 。因此,对于属性值 v v v和检索区间 ( v L , v H ) , v ∈ ( v L , v H ) (v_L,v_H), v∈(v_L,v_H) (vL,vH),v∈(vL,vH)的充分必要条件是 θ L < θ < θ H θ_L<θ<θ_H θL<θ<θH,即 c o s ( θ H − θ L ) < c o s ( θ − θ L ) c o s ( θ − θ H ) cos(θ_H-θ_L) 由于上述方案为各记录分别构造索引,因此,检索时,也需要依次判断各记录是否满足检索条件,即该方案的检索效率与记录数目成正比。 基于不同类型的谓词加密技术,谓词加密可以分为对称谓词加密和非对称谓词加密 。在基于谓词加密的方案中,假设所有值均为整数。 目标:判断属性值 u ∈ [ 1 , n ] u∈[1, n] u∈[1,n]是否属于区间 Q ⊂ [ 1 , n ] Q\subset[1,n] Q⊂[1,n] 该方法虽然实现简单,但计算量与向量长度n 成正比,导致该方法检索效率过低。考虑到现实应用场景中大多为实数型数据,因此向量的长度将非常大,超出接受能力。 基于等值检索的密文区间检索方案,其核心思想是将区间检索转换为等值检索,然后使用现有的基于关键词-文档索引的密文关键词检索方案完成查询。将区间检索转换为关键词检索,有利于将这两种检索方式进行结合。 直观上,可以将每个属性值看作一个关键词,然后通过枚举检索区间内的属性值,直接将区间检索转换为多轮等值检索,然而这种方法不适用于处理数值精度较高或者检索区间较大的情况。因此,研究者希望可以将检索区间映射为少量关键词,从而限制陷门的大小。 可以使用线段树中的节点来表示属性值和检索区间,并令每个节点对应一个关键词。如图3-7所示,假设属性值域为[0,7],属性值为5的记录对应的关键词即为节点101,10*,1**,***对应的关键词。检索时,假设检索区间为[1,6],其对应的最小节点集合为{001,01*,10*,110},则分别使用这些节点对应的关键词进行单关键词检索,最后对检索结果求并集。 保序加密(Order-Preserving Encryption,OPE)是一种保持数值顺序关系的加密算法,其算法本身可以应用于各种场景,并不仅限于区间检索。 定义3-13 (保序加密) 给定加密算法E,如果对于任何密钥k,以及数值数据x和y(x 由于谓词加密方案本身实现了可证明安全,因此,基于谓词加密的密文区间检索方案普遍安全性较高。但是其基本运算操作为双线性映射,从而检索效率较低,不适用于处理高维度高精度数据。 基于矩阵加密的方案虽然安全性不如谓词加密方案,但是其基本运算操作为乘法和加法,因此,检索效率较高,且可以方便地处理高精度数据。 基于等值检索的方案灵活性较大,根据用户对于安全性、效率和存储空间的要求,可以采用不同的关键词构造方式。由于这类方法主要基于密文关键词检索方案,因此,容易将区间检索和关键词检索相结合。 保序加密由于其本身的特征,使得密文直接泄露了明文的排序特征,因此安全性较低。但是对于经过保序加密的数据,可以使用任意明文数据结构和检索方式对其进行检索,所以在安全性要求不高的场景中,保序加密具有良好的表现。 同态加密(Homomorphic Encryption,HE)的思想最早是由Rivest等人于1978年提出的,其基本思想是:在不解密的前提下,能否对密文数据进行任意的计算,且计算结果的解密值等于对应的明文计算的结果。 以云计算应用场景为例。以同态加密处理数据的整个处理过程大致是这样的: 根据f的限制条件不同,同态加密方案实际上分为了两类: 一个同态加密方案 ε ε ε通常由以下四个算法组成: 定义4-1(正确性)* 一个方案 ε = ( K e y G e n , E n c r y p t , D e c r y p t , E v a l u a t e ) ε=(KeyGen, Encrypt, Decrypt, Evaluate) ε=(KeyGen,Encrypt,Decrypt,Evaluate)对一个给定的 t t t比特输入的布尔电路 C是正确的,如果对任何由 K e y G e n ( λ ) KeyGen(λ) KeyGen(λ)输出的密钥对 ( p k , s k ) (p_k,s_k) (pk,sk),以及任何明文比特 1 , 2 , ⋯ , _1, _2, ⋯ , _ m1,m2,⋯,mt和任何密文 = 1 , 2 , ⋯ , , ← E n c r y p t ( p k , ) ( i = 1 , 2 , ⋯ , t ) = _1, _2, ⋯ , _, _ ← Encrypt(pk, _) (i = 1,2, ⋯ ,t) c=c1,c2,⋯,ct,ci←Encrypt(pk,mi)(i=1,2,⋯,t), 都 有 D e c r y p t ( , E v a l u a t e ( p k , , ) ) = ( 1 , 2 , ⋯ , ) Decrypt(_, Evaluate(p_k, , )) = (_1, _2, ⋯ , _) Decrypt(sk,Evaluate(pk,C,c))=C(m1,m2,⋯,mt)。 语义安全性是相对于被动敌手(也称监听敌手)而言的,这种敌手只是被动地获取密文而非主动进行攻击。语义安全性是指敌手无法区分一个密文是两个确定明文中的哪一个的加密,即使这两个明文是敌手自己选择的也是如此。对于公钥加密方案而言,这正是选择明文攻击下的不可区分安全性,又 称 多 项 式 安 全 。 一 个 方 案 ε = ( K e y G e n , E n c r y p t , D e c r y p t , E v a l u a t e ) ε=(KeyGen,Encrypt, Decrypt, Evaluate) ε=(KeyGen,Encrypt,Decrypt,Evaluate)的语义安全性可通过一个游戏(也称实验)来定义,将这个游戏记为 G a m e A , ε ( λ ) Game_{A,ε}(λ) GameA,ε(λ),其中 A A A为敌手(可视作一个概率多项式时间(PPT)算法), λ λ λ为安全参数。 游戏4-1 G a m e A , ε ( λ ) Game_{A,ε}(λ) GameA,ε(λ)的执行过程如下: 从上述游戏的执行过程中可以看出,敌手 A A A可以不顾密文而均匀随机地输出一个比特 ′ ^′ b′,成功的概率为1/2。一般地,把一个敌手 A A A成功的概率超过1/2的量 称 为 其 成 功 的 优 势 , 记 为 A d v A , ε ( λ ) = P r [ G a m e A , ε ( λ ) = 1 ] − 1 / 2 Adv_{A,ε}(λ) =Pr[Game_{A,ε}(λ)= 1] − 1/2 AdvA,ε(λ)=Pr[GameA,ε(λ)=1]−1/2 定义4-5(语义安全性)* 一个方案 ε = ( K e y G e n , E n c r y p t , D e c r y p t , E v a l u a t e ) ε=(KeyGen, Encrypt, Decrypt, Evaluate) ε=(KeyGen,Encrypt,Decrypt,Evaluate)是语义安全的,如果任何PPT敌手 A A A在游戏4-1中成功的优势都是可忽略的,即对任何PPT敌手 A A A,都存在一个可忽略函数 λ ,使得 A d v A , ε ( λ ) ≤ μ ( λ ) Adv_{A,ε}(λ) ≤\mu(λ) AdvA,ε(λ)≤μ(λ)。
c o s ( θ − θ L ) = c o s θ c o s θ L + s i n θ s i n θ L = [ c o s θ s i n θ ] [ c o s θ L s i n θ L ] cos(θ-θ_L)=cosθcosθ_L+sinθsinθ_L=\begin{bmatrix}cosθ&sinθ\\\end{bmatrix}\begin{bmatrix}cosθ_L\\sinθ_L\\\end{bmatrix} cos(θ−θL)=cosθcosθL+sinθsinθL=[cosθsinθ][cosθLsinθL]
c o s ( θ − θ H ) = c o s θ c o s θ H + s i n θ s i n θ H = [ c o s θ s i n θ ] [ c o s θ H s i n θ H ] cos(θ-θ_H)=cosθcosθ_H+sinθsinθ_H=\begin{bmatrix}cosθ&sinθ\\\end{bmatrix}\begin{bmatrix}cosθ_H\\sinθ_H\\\end{bmatrix} cos(θ−θH)=cosθcosθH+sinθsinθH=[cosθsinθ][cosθHsinθH]
具体的基于矩阵加密的单维区间检索方案步骤如下:
3 基于谓词加密的方案
思路:为属性值 u u u构造向量 = 1 , 2 , ⋯ , ={_1, _2, ⋯, _} x=x1,x2,⋯,xn,其中若 i = u i = u i=u,则 = 1 _=1 xi=1;否则 = 0 _=0 xi=0。
为区间Q构造向量 = 1 , 2 , ⋯ , ={_1, _2, ⋯, _} v=v1,v2,⋯,vn,其中 i ∈ i∈ i∈Q,则 = 0 _=0 vi=0;否则 = 0 _=0 vi=0。
于是判断 u u u是否属于 Q Q Q就等价于判断向量 x x x和 v v v的内积是否为0。
而对称谓词加密方案提供了在不公开 x x x和 v v v的前提下判断内积是否为0的方法。4 基于等值检索的方案
5 基于保序加密的方案
6 小结:区间检索四种方案优缺点比较
第四章 安全处理技术
(一)安全处理技术
1 同态加密:算法组成、正确性、全同态加密、语义安全性、紧凑性
① KeyGen算法:输入安全参数 λ λ λ( λ λ λ通常用来刻画密钥的比特长度),生成公钥 p k p_k pk和私钥 s k s_k sk,即 ( p k , s k ) ← K e y G e n ( λ ) (p_k,s_k)←KeyGen(λ) (pk,sk)←KeyGen(λ);
② Encrypt算法:输入明文 ∈ { 0 , 1 } ∈ \{0,1\} m∈{0,1}和公钥 p k p_k pk,得到密文 c,即 ← E n c r y p t ( p k , ) ← Encrypt(p_k, ) c←Encrypt(pk,m) ;
③ Decrypt算法:输入私钥 s k s_k sk和密文 c,得到明文 m ,即 ← D e c r y p t ( s k , ) ← Decrypt(s_k, ) m←Decrypt(sk,c);
④ Evaluate算法:输入公钥 p k p_k pk、 t t t比特输入的布尔电路 C和一组密文 1 , 2 , ⋯ , _1, _2, ⋯ , _ c1,c2,⋯,ct,其中 ← E n c r y p t ( p k , ) , i = 1 , 2 , ⋯ , t _ ← Encrypt(p_k, _), i = 1,2, ⋯ ,t ci←Encrypt(pk,mi),i=1,2,⋯,t,得到另一个密文 ∗ ^∗ c∗,即 ∗ ← E v a l u a t e ( p k , , ) ^∗ ← Evaluate(p_k, , ) c∗←Evaluate(pk,C,c),其中 = ( 1 , 2 , ⋯ , ) = (1, 2, ⋯ , ) c=(c1,c2,⋯,ct)。
布尔电路由模2加法门和模2乘法门组成,加密方案的明文空间为 { 0 , 1 } \{0,1\} {0,1}
定义4-2(同态加密) 一个方案 ε = ( K e y G e n , E n c r y p t , D e c r y p t , E v a l u a t e ) ε=(KeyGen, Encrypt, Decrypt, Evaluate) ε=(KeyGen,Encrypt,Decrypt,Evaluate)对一类布尔电路 C ℂ C是同态的,如果对所有的布尔电路 ∈ C ∈ ℂ C∈C, ε ε ε都是正确的。
定义4-3(全同态加密)* 一个方案 ε = ( K e y G e n , E n c r y p t , D e c r y p t , E v a l u a t e ) ε=(KeyGen, Encrypt, Decrypt, Evaluate) ε=(KeyGen,Encrypt,Decrypt,Evaluate)是全同态的,如果对所有的布尔电路, ε ε ε都是正确的。
定义4-4(可忽略函数) 设 μ ( ) : → \mu() : → μ(n):N→R, N是自然数集, R是实数集,称函数 μ ( ) \mu() μ(n) 是可忽略的,如果对任意多项式 ( ⋅ ) (\cdot) p(⋅),存在 0 ∈ _0 ∈ N0∈N,使得对所有的 > 0 > _0 n>N0,都有 μ < 1 / ( ) \mu_ < 1/() μn<1/p(n)。
① 挑战者运行 ( p k , s k ) ← K e y G e n ( λ ) (p_k, s_k) ← KeyGen(λ) (pk,sk)←KeyGen(λ) ,将 p k p_k pk发送给敌手 A A A;
② 敌手 A A A得到 p k p_k pk,并产生一对等长的消息 0 , 1 _0, _1 m0,m1;
③ 挑战者选择 b ∈ { 0 , 1 } b ∈ \{0,1\} b∈{0,1},计算 ∗ ← E n c r y p t ( p k , ) ^∗ ← Encrypt(p_k, _) c∗←Encrypt(pk,mb)
,并将 ∗ ^∗ c∗发送给敌手 A A A;
④ 敌手 A A A根据 λ λ λ和 ∗ ^∗ c∗输出一个比特 ′ ∈ { 0 , 1 } ^′ ∈ \{0,1\} b′∈{0,1},可理解
为 ′ ← A ( λ , ∗ ) ′ ← A(λ, ^∗) b′←A(λ,c∗);
⑤ 如果 ′ = ^′ = b′=b,则游戏成功并输出1,否则游戏失败并输出0。
显然,根据定义4-3,有一种平凡的方法可将任何公钥加密方案转化为全同态加密方案。将Evaluate算法取为首先用Decrypt解密所有的密文 c c c,然后将所对应的明文作为 的输入计算其值,即 E v a l u a t e ( p k , , c = ( D e c r y p t ( s k , 1 ) , D e c r y p t ( s k , 2 ) , … , D e c r y p t ( s k , ) ) Evaluate(p_k, , c = (Decrypt(s_k, _1), Decrypt(s_k, _2), … , Decrypt (s_k, _ )) Evaluate(pk,C,c=C(Decrypt(sk,c1),Decrypt(sk,c2