加密访问控制

(整期优先)网络出版时间:2019-11-02
/ 3
摘 要 访问控制是一种很流行的信息保护机制,被广泛应用在信息系统中。十多年来,在这个领域已取得了很多成就。传统的访问控制已经被更加灵活强大的系统代替了,如基于角色的访问控制(RBAC)和灵活授权框架(FAF)。但是,在访问控制系统中,对系统管理员的绝对信赖一直是对信息安全的潜在威胁。为了克服这个威胁,分等级的加密被发展作为访问控制的替补方法。通过使用分等级的加密,信息系统中的所有信息被加密:由低层安全类加密的数据可以被高层的安全类解密。文章描述了基于数据和基于密钥的两种加密方法实现加密的访问控制。

关键词 加密;解密;访问控制;等级


1 引言

分等级进行加密的想法最早是由AklTaylor提出的[1],多级系统中的主体(用户)和客体(数据)有各自的安全级,用户对数据的访问必须满足一定的安全性要求。安全级是一个二元组<密级,分类集合>。用户间的安全级的比较是按偏序进行的。如果安全级U1=密级l1分类集合s1,U2=密级l2分类集合s2。称U1<=U2当且仅当l1<l2s1⊆s2

假设有主体S,客体O1O2O3,如果安全级Uo1<=UsUs= Uo2Us<=Uo3,则SO1只能读,对O3只能写,对同安全级别的客体O2可以进行读写两种操作。在这种多级安全模型中,一个主体(用户)访问其它主体的数据时,只需要与被访问主体的安全级进行比较,如果访问主体的安全级比被访问主体的安全级高,则允许访问,否则,访问被禁止。从中可以看到,如果非法用户篡改安全级,则很容易实现对其它(高安全级)用户数据的非法访问。可见这种比较安全级的访问控制方法具有潜在的不安全性。通过加密方法可以有效消除这种不安全性。首先,在对用户身份鉴别时,不仅生成用户密码,同时还为用户生成一个公钥、私钥对,利用密钥对来加强对用户身份鉴别,再利用用户的私钥为用户生成一个访问密钥,由此来实现访问控制。

2 基于数据的解决方法

找到足够安全的保护数据的方法或者安全的产生访问密钥的方法,就可以解决访问控制的问题,这是实现加密访问控制时的重点。

非常流行的加强访问控制的方法是通过访问控制列表。每个数据都与一个ACL表相关,表中列举出授权的用户组和相对应的访问模式。通过查看ACL,很容易决定允许谁对相关数据进行对应操作。ACL包含通常情况下的所有访问控制。例如,它支持等级访问控制。如果我们根据等级结构或者组织产生ACL。那么等级访问控制就能够被加强。也就是说,一个数据拥有这和它所有的祖先都被在它的数据ACL中列举出来。

1553557487.jpg

图1 访问控制列表(ACL)

从加密的角度来讲,为了加强通用的访问控制,每个数据必须被加密,这样只有ACL中的主体有能力解密数据。假设每个主体被分配一对密钥:公钥和私钥。K个主体共享消息ms1s2,…sk对于每个主体si∈{ s1s2,…sk },msi的公钥加密。加之它所有者的密文,m被加密(k+1)次。为了共享一个单一的信息m系统保存(k+1)个密文。这种方法的消极面出现确定了,也就是存

储加密数据的多个副本可能会产生矛盾(不一致性)。

2.1 系统元素

我们的基于数据的解决方法包括以下元素:

主体S={s1s2,…sl},主体既可以是用户也可以是组。

公钥密码系统包括三个功能函数:

(1)密钥生成函数KG:∀siSKG生成一对密钥:公开密钥Ksi和它的对应的私有密钥Ksi-1

(2)加密函数Ec=Ek(m),其中c是密文,m代表信息,K表示公开密钥(加密密钥)。

(3)解密函数Dc=Dk-1(c),K-1表示私有密钥(解密密钥)。

2.2 加密的访问控制

假设主体si想与k个用户si1si2,…,sikS共享信息msi执行下面的操作(为简单起见,我们假设m<ns1ns2,nsl)。如果是长信息,可以一块一块的进行加密。

(1)首先,si计算k个单一的密文,也就是说,对于∀sj∈{si1si2,…,sik},计算Eksj(m)。

(2)然后,si用加纳法则计算出CRT的解x,0≤x ≤nsi1,nsi2,…,nsik,x同时满足以下k个式子:

(1) xEks1(m)mod nsi1.

(2) x Eks2(m)mod nsi2.

(k) x Eksk(m)mod nsik

(3) 把si保存在SDB里。对每个访问m的主体sj,sj∈{si1si2,…,sik},sj需要计算Eks j(m)=x mod nsj。然后sj使用私钥Eksj-1恢复m

2.3 授权变更

数据项授权的变更,如一个主体被授权/撤消对数据项的访问,在信息系统中是很常见的事情。我们的基于数据的解法根据受到影响的数据状态来控制授权变更。如果数据项是动态的(也就是说数据在授权变更时有变化),

A1到A3的所有操作基于授权主体新的组再执行一次。如果数据是静态的(也就是说授权更改时数据项不发生改变)。

1553597664.jpg

图2 SCS 图2中SCS1包括k个同时满足的等式,它的CRT解是x;给SCS1增加一个条件等式得到SCS2,它的CRT解是x′;从SCS1去除一个条件等式得到SCS3,它的CRT解是x″。假设x的值已经算出来了,为得到x′的值,我们只需要找到x′x mod n1n2x′ak+1mod nk+1两个等式的CRT解。为得到x″的值,我们只需要一个模运算:x″= x mod n1n2nk +1。总之,x′x″的值可以很容易得从x得出[2]

在我们的基于数据的解法中,准予一个主体对一个静态数据项进行访问与从SCS1SCS2的转换是等价的。新的共享密文x′可以从旧的共享密文x有效得到。撤消一个主体对一个静态数据的访问与从SCS1SCS3的转换是等价的。通过一个模运算可以简单的从旧的密文x得到新的密文x″

3 基于密钥的解法

3.1 实现

在基于数据的解法中,k个共享者共同分享信息m,共享密文的大小是原始信息m大小的k倍。因此基于数据的解法在m或者k很大的情况下是不可取的。而且,基于数据的解法是基于公开密码系统的。这样的话,共享一个数据项,数据项的所有者必须知道所有分享者的加密密钥。为保护解密密钥的机密性,我们只能使用公开密钥加密系统。公开密钥加密系统比对称加密体制慢。

我们的基于密钥的解法的主要思想是:不是分享信息,而是分享加密密钥[3]。除了在基于数据的解法中列举的元素外,基于密钥的解法还需要一个对称密钥加密系统。这里,我们用SE表示加密函数,SD表示解密函数。

如果一个主体si 想与主体si1si2,…,sikS分享信息m,执行如下操作:

(1)随机选择一个对称密钥KR

(2)使用KR 加密m:c=SEKR(m)。

(3)∀s∈{si1,si2,…,sik},计算EKsj(KR)。

(4)找到同时满足下面等式的CRT解:

(1) xEksi1(KR)mod nsi1.

(2) xEksi2(KR)mod nsi2.

(k) xEksik(KR)mod nsi

(5) 把x||c保存到SDB中,其中符号“||”的意思是“串联”。

主体sj∈{si1si2,…,si k}访问msj需要计算Ek sij(KR) = x mod ns j;然后用私钥Ksj-1取回对称密钥KR,也就是KR=D Ksj-1(Ek sij(KR));最后,使用KR恢复明文mm=SD KR(c)。

3.2 授权变更

对于动态数据,任何时候只要授权发生更改,从(1)到(5)的步骤都要被基于新的主体组重新执行一次。对于静态数据,如果主体被撤消了对数据的访问,为组织主体使用旧的对称密钥获取数据,从(1)到(5)的步骤都要被基于新的主体组重新做一遍。如果一个主体被准予对数据的访问,不需要对数据重新进行加密,因为旧的对称密钥仍然可以使用。因此从SCS1SCS2的转换可以被使用来从旧的对称密钥产生新的共享密文。新的授权主体可以获取旧的对称密钥来截密数据[4]

因为对称密钥的大小通常比数据项小得多,公开密钥加密比基于数据的解法更加有效。由于同样的原因,共享密文的大小比基于数据的方法小很多。总之,当数据或者分享者数目较大时基于密钥的解法更可取。

3.3 SIFF函数实现

如果能找到足够安全的产生访问密钥的方法,则可以容易解决访问控制的问题,可以利用SIFF函数实现[5]

先作如下假设:

(1) 用IDi表示节点Ni的标识,设IDi能用 l(n)位长的串描述,l是多项式。

(2) F={Fn|nN}是伪随机函数族,其中Fn={fk| fk:∑l(n) →∑n,k∈∑n },用n位的串k来标识fk

(3)H={ Hn|nN }是k-SIFF,将n位的输入映射为n位的输出。设k足够大,足以表示一个节点拥有的父节点数。

下面给出一个生成访问密钥的算法:

算法:访问密钥生成算法

输入:用户节点集{N1,…Ni,…Np(n)} 输出:各用户对应的访问密钥{K1,…Ki,…Kp(n)}

(1)如果节点N0是最大节点,K0=fpk0(ID0);其中pk0是节点N0对应的用户的私钥。否则转(2)。

(2)如果节点Nj只有一个父节点Ni,Ni已经有了访问密钥Ki,则Nj的访问密钥Kj(n位长):Kj=fKi(IDi) 。

(3)如果节点Nj有多个(如:p个)父节点:Ni1,Ni2,…,Nip,对应有各自的访问密钥Ki1Ki2,…Kip,则Kj为从随机选取的n位串:KjRn,再从Hn中随机的选取一个哈希函数hi,使得将fKj1(IDj),fKj2(IDj)…,fKjk(ID

j)都映射到Kj。即:

hi((fKj1(IDj))= hi((fKj2(IDj))=…= hi((fKjp(IDj))=Kj。然后公开哈希函数hi,使之对Nj 所有的祖先节点都可用。

(4)如果节点集中的节点全部访问完毕则输出访问密钥,算法结束;否则转(1)。

由算法可知,如果NiNj,则Kj 总可以由Ki得到。当NiNj的的单一父节点时,Kj=fKi(IDi);当Ni不是Nj的父节点时,通过从上往下的一条路径Ni最终也能得到Kj

4 结论

文章综述了用加密来解决访问控制的方法,描述了基于数据的和基于密钥的解决方法。文中系统的安全性是基于不同的函数:中国余数定理和SIFF函数实现的。

参考文献

[1] 王元珍,魏胜杰,朱虹. 安全DBMS中访问控制的一种加密解决方法. 计算机工程与应用. 2003(16),pp:195-197

[2] Yibing Kong,Jennifer Seberry. A Cryptographic Solution for General Access Control. Janusz R. Getta,Springer-Verlag Berlin Heidelberg 2005. pp:461-473

[3] Ray,I.,Ray,I.,Narasimhamurthi,N.. A Cryptographic Solution to Implement Access Control in a Hierarchy and More. Proceedings of the Seventh ACM Symposium on Access Control Models and Technologies. ACM Press (2002),pp:65-73

[4] Jajodia,S.,Samarati,P.,Sapino,M. L.,Subrahmanian,V. S.:Flexible Support for Multiple Access Control Policies. ACM Transactions on Database Systems,Vol. 26,No. 2. ACM Press (2001),pp:214-260

[5] Akl,S. G.,Taylor,P. D.:Cryptographic Solution to a Multilevel Security Problem. Advances in Cryptology:Proceedings of Crypto ’82. Plenum Press (1982),pp:237-249