基于属性加密的数据共享管理研究
2023-11-06李金贵
王 森 许 涛 李金贵
1(国家信息中心信息与网络安全部 北京 100045)
2(国家信息中心公共技术服务部 北京 100045)
(wangsen@sic.gov.cn)
近年根据国家安全机构公布的关于境外敌对势力和黑客组织频繁攻击我国关键信息基础设施[1],攻击者利用多种安全漏洞绕过防御机制,如防火墙、杀病毒、入侵检测等,传统网络安全防护已不能满足数据安全的保护需求.数据面临恶意攻击[2]、供应链漏洞、安全产品缺陷和技术人员窃密等安全风险,2021年爆发的Log4j2任意代码执行高危漏洞[3]和SonarQube源码管理工具漏洞[4](业界普遍认为漏洞在公布之前已长期存在),以及2014年TLS协议“心脏出血”漏洞[5]、2020年国内安全厂商VPN设备漏洞[6],都造成了严重数据泄露.2021年,公安机关也通报了多起技术人员窃密导致数据泄露的案件[7].
在关键信息基础设施防护上,我国尽管采取了多角色分权、安全审计、对重要人员进行安全背景审查等手段,但窃取数据和内部人员违规泄露敏感数据的风险仍然存在.恶意系统管理员可以利用超级权限,获取数据并越权清除相关日志,不留痕迹地获取重要数据[8].对不可信的管理员、产品漏洞和开放数据等安全问题[9-10],其威胁来源主要是业务存在“明密转化”和明文落地.本文介绍了基于服务器密码机数据保护方案,分析了存在的安全问题,进一步提出基于SM9构造属性密文策略增强访问控制的数据共享管理方案,有效解决了数据明文落地问题,增强了系统的安全性.
1 数据加密的保护机制分析
如图1所示,典型系统环境包括服务区、办公区、管理区.服务区的网络边界部署了安全认证网关[11],保障边界安全,使用对称加密算法SM4[12]保护数据机密性、基于带密钥的哈希算法HMAC-SM3保护数据完整性[13].用户都在办公区,使用Ukey认证后访问系统.运维管理人员位于管理区,通过带外管理网远程维护服务区设备.
图1 基于认证网关和服务器密码机的数据安全系统架构
1.1 系统安全需求
根据《网络安全等级保护基本要求》《信息系统密码应用基本要求》等标准规范,安全需求有3项:
1) 共享访问控制.只有授权的用户才能访问应用系统.
2) 数据安全存储.数据库应加密,防止数据库入侵造成数据泄露[14].
3) 防范恶意管理人员.要求数据库管理员也不能访问明文,防范滥用运维权限.
1.2 基于认证网关的访问控制方案
针对这些安全需求,常用认证网关和服务器密码机.
1) 认证身份.在业务服务区部署身份认证网关(SSL网关)核验用户数字证书有效性,认证后网关建立SSL加密通道[15],并对访问目的进行控制,用户只能访问指定服务器,禁止访问数据库服务.
2) 访问控制.认证网关依据用户Ukey的数字证书,将用户身份传递给应用服务器.应用服务器根据访问控制规则(通常基于角色访问控制策略),判断用户的资源访问权.
3) 数据库加密.如图1选用外挂服务器密码机,与应用服务器直连.服务器密码机生成加密和完整性保护密钥,安全存储在密码机中.应用通过调用密码机加解密接口存取数据.
4) 运维管理.运维技术人员基于Ukey认证登录堡垒机,通过堡垒机统一管理服务器.堡垒机所在带外管理网络和业务网络采用VLAN或物理隔离,能够防止管理员导出数据或越权访问业务数据.
1.3 数据加密存储和读取
采用SM4对称加密算法和HMAC-SM3带密钥的哈希算法,对数据库关键信息进行机密性和完整性保护,黑客盗取数据库文件后也无法破解密文还原数据.数据存储和读取流程如图2所示:
图2 数据存储和读取流程
1.4 引用监控机验证机制缺陷分析
上述安全机制的重点是访问控制,主要过程是判断主体是否具有对客体执行“行为”的权限.其主体指用户、用户进程或系统进程,客体指目录、文件、内存、磁盘、应用或具体页面(webpage),行为是指读、写、执行等操作.经典访问控制策略包括强制访问控制、自主访问控制和基于角色的访问控制.基于角色的访问控制在实践中比较常用,由安全管理员建立角色,并且面向角色授权而不是面向用户授权,支持最小权限、职责分离、访问控制集中管理.
实现访问控制的前提是执行系统必须是安全可信的.1972年,引用监控机的抽象概念被首次提出,引用监控机是执行各种访问控制策略的部件.例如图1方案,“认证网关+应用服务器”共同构建一个引用监控机.但这个引用监控机不完全可信:一是当认证网关或服务器被恶意控制,就能够仿冒合法用户身份调用密码机进行数据解密;二是运维等技术人员能够绕过“引用监控机”,控制密码机,解密数据库,并且删除数据库和密码机日志,逃过审计.
2 基于属性加密数据共享保护方案
2.1 方案概述
为解决引用监控机安全风险,数据所有者可以基于开放的服务发布数据,并采用数字信封等技术加密数据.但共享给多个用户时需要多次加密、保存多个密文备份.相关研究[16-17]提出了基于安全属性的访问控制(attribte-based access control,ABAC),“安全属性”代表用户拥有与访问相关的特征.本文采用属性加密的数据加密机制和访问控制技术,如图3所示:
图3 数据共享服务模型
数据所有者首先利用共享用户对象的属性密钥对数据加密,服务者只负责提供密文数据访问服务,用户取得加密数据后使用属性密钥解密数据.与基于认证网关的访问控制相比,该方案中服务器不再进行数据解密.系统对象定义如下:
1) 可信权威.负责维护基础环境、初始化系统参数,为数据所有者提供系统参数,并为相关用户下发属性密钥.
2) 数据所有者.根据共享策略,使用用户属性公钥加密数据.
3) 数据访问者.访问共享加密数据,只有拥有相关属性的用户可以获得解密密钥.
4) 服务提供者.提供数据存储和读取服务,以开放形式发布密文数据.
2.2 SM9系统环境构建
参考基于属性的加密机制(attribute-based encrytion,ABE),Goyal等人[18]提出密钥策略属性加密(key-policy ABE,KP-ABE)和密文策略属性加密(cipertext-policy ABE,CP-ABE).
本文选择SM9算法[19-20]构建CP-ABE环境.
1) 构建系统参数,确定系统数域空间.系统参数包含椭圆曲线的识别符cid;基域Fq的参数q;Fq中2个元素a和b,描述椭圆曲线的方程表达式y2=x3+ax+b;曲线阶的素因子N和相对于N的余因子cf;曲线E(Fq)相对于N的嵌入次数k;E(Fqd1)的阶循环子群G1的生成元P1;E(Fqd2)的N阶循环子群G2的生成元P2;双线性对e的标识符eid(e的值域为N阶乘法循环群GT);ψ为G2到G1的同态映射.这些参数用于建立系统,不同的参数可以构建不同的椭圆曲线空间,如果随机选择参数通常无法满足构建系统的验证条件,推荐选择GM/T 0043.5—2016中参数.
2) 密钥生成中心KGC通过随机数生成签名主密钥和加密主钥.生成签名主密钥:产生随机数ks∈[1,N-1]作为签名主密钥,计算G2中的元素Ppub-s=[ks]P2作为签名主公钥,签名主密钥对为(ks,Ppub-s).KGC秘密保存钥ks,公开Ppub-s.生成加密主密钥:产生随机数ke∈[1,N-1]作为加密主密钥,计算G1中的元素Ppub-e=[ke]P1作为加密主公钥,加密主密钥对为(ke,Ppub-e).KGC秘密保存ke,公开Ppub-e.由于签名、加密主公钥公开,任何人都可以根据用户属性(标识)生成用户的签名和加密公钥,同时签名、加密主私钥由KGC保管,用户签名、加密主私钥保持秘密性.
2.3 属性密钥和加密密钥
在属性加密数据共享模型中,A代表数据所有者,B代表用户,KGC生成A的签名私钥dsA和B的加密私钥deB,并通过安全秘密通道发送给用户,过程如下:
A封装密钥k过程为An,B解密密钥过程为Bn,k是数据加密密钥,C是封装加密k的密文,SM9-EncKeyGen为生成C的算法:
A1.根据IDB,计算G1中元素QB=[H1(IDB‖hidd,N)]P1+Ppub-e;
A2.计算随机数r∈[1,N-1];
A3.计算群G1中元素C=[r]QB;
A4.计算群GT中元素g=e([Ppub-e,P2]);
A5.计算GT中元素w=gr;
A6.计算k=KDF(C‖w‖IDB,klen),其中KDF可以选用一种哈希算法,输出加密密钥长度的字节作为加密密钥;
A7.输出(k,C),此处k和C生成完毕.
SM9-DecKeyGen为解密k的算法:
B1.验证C∈G1,若不成立则报错退出;
B2.计算群GT中的元素w′=e([C,deB]);
B3.计算封装密钥k′=KDF(C‖w′‖IDB,klen);
B4.输出密钥k′,至此k还原完毕.
分析以上过程,计算k的核心参数是输入KDF中的w,因此SM9-DecKeyGen中B2过程是关键步骤.算法核心是使用B的加密私钥deB,解密基于标识IDB封装加密的密钥.
2.4 基于属性加密数据实现
2.4.1 基于CP-ABE的数据库访问控制
本文针对行加密方式的数据库加密方案,加密算法采用对称分组加密算法SM4.数据库可以表达为DB={table1,table2…},tablei表达形式为tablei={indi,ti},其中indi为索引,ti代表其他字段.当数据所有者将tablei共享权限赋予manager属性的用户时,加密数据库过程如下:
1) 数据库所有者调用SM9-EncKeyGen,参数IDB输入用户属性manager,输出(k,C);
2) 保持数据库索引,加密ti,EncSM4(ti,k)→Encryptedei,加密后数据库行表示为(indi,Encryptedei,C).
manager用户获取密文数据后,解密过程如下:
1) 用户调用SM9-DecKeyGen算法,传入参数deB和C,解封装获得k;
2) 使用k,调用解密函数DecSM4(Encryptedei,k)→ti,获得数据库原文(indi,ti).
以上方案实现了基于开放服务的访问控制,数据服务不再对数据进行解密,防止数据服务方或者运营方越权访问数据.并且可以为数据库中的每行记录数据设置密钥,实现更加细粒度的访问控制,SM9-EncKeyGen算法中r为随机数,能够方便地实现行加密时不同(k,C)的需求.
2.4.2 构造访问控制树
访问控制树能够实现基于门限策略的秘密共享[21-22],只有当用户属性集符合访问控制属性集的门限数时才能解密.访问控制树每个非叶子节点(即内部节点)为一个控制门限,节点信息包括孩子节点和门限阈值.例如门限2/3代表此节点有3个子节点,至少要满足2个子节点要求才能获得当前节点访问权限.其模型如图4所示,数据库加密后的结构为(indi,Encryptedei,tree),加密密钥e保存在tree中.
图4 访问控制树模型
图4中从根节点开始构造一个访问控制树,计算节点过程如下:
1) 节点函数是最高次数为门限数减1的多项式.图4中根节点的门限为2,则多项式次数为1,常数项、系数项随机生成,如生成多项式f(x)=5+2x,则其中常数项5是数据加密密钥e(示例中较小的数用于演示计算,实际应满足SM9密钥空间长度的数).
2) 如果当前节点是非叶子节点时,按照最高次数为门限数减1构造多项式,将孩子节点从左至右依次标记为1,2,3,代入父节点多项式f(x)=5+2x中,将计算结果作为多项式的常数项,其他参数随机生成.
3) 如果当前节点是叶子节点,只保存1个计算结果,记为s.根据节点属性,调用封装密钥算法SM9-EncKeyGen,生成封装密钥(k,C),将k作为SM4密钥加密s生成EncryptedChild-e,叶子节点存储(EncryptedChild-e,C).
假如用户拥有(经理,部门2,销售)属性密钥,调用SM9-DecKeyGen解密(经理,部门2,销售)节点的秘密值.例如针对(部门2,销售)采用门限算法(解方程组)得到父节点多项式,再针对(经理,2/2)向上解密父节点秘密值,得到根节点密钥e,将e作为SM4密钥解密数据库Encrypted字段.
当用户访问数据时,开放数据存储服务可以不再进行身份认证,通过加密保护了数据.虽然量子计算攻击等可能会对数据机密性造成一定威胁,但采用有效的对称加密仍是目前可靠的数据保护方案.
3 结 语
共享是数据生命周期管理中的重要部分,防范数据泄露是保护数据安全的重点和难点.本文从权限管理和访问控制2个角度分析了“认证网关+数据加密”方案缺陷,提出了基于属性密文的数据共享访问控制方案,详细介绍了基于SM9建立属性密文方式,并基于访问控制树实现用户属性集控制机制.该方案中,仍存在属性密钥泄露的安全隐患,下一步,可以将本文方案与引用监控机结合,采用安全认证网关进行身份核验,扩展适用场景,进一步提升该方案适用性和系统安全性.