区块链典型的一个应用场景是资源共享,而在实际应用中,很多参与者的数据很涉及机密,数据所有者并不乐意把自己的数据公开出来。数据明文在链上存证后,虽然共享给其他人,但是数据被所有的人都能查看,不存在一点私密性。如果数据所有者将数据使用自己的秘钥加密后在链上存证后,能实现数据的隐私保护,但是不能安全的共享给他人。
比如在金融领域,数据上链可以提高数据本身的安全性,也有利于监管机构从区块链中调取数据进行监管,但是为什么金融领域的区块链应用迟迟推进不下去呢?一个亟待解决的重要问题是,金融公司本身不愿意将数据存在链上。因为这些数据都是相当敏感且重要的,一旦数据外泄,会带来不小的损失。
在ABE中,属性也有着相似的作用。举个例子,JackyLi是A大学信息安全学院的教授,那么“A大学”,“信息安全学院”以及“教授”就是ABE中刻画JackyLi这个人的多个属性,这些属性可以构成一个属性集合,我们可以把它记为集合C_Jacky_Li。
一种简单的理解是策略实际即是由属性及它们间关系所组成的一个逻辑表达式。例如下式Policy:
参与X课题or(信息安全学院andA大学and教授)
这是一条简单的策略,其表达的含义是唯有X课题组的成员或是A大学信息安全学院的教授才能满足其要求。
使用C_Jacky_Li与Policy1进行说明。C_Jacky_Li集合中没有“参与X课题”这一属性,故其无法满足策略的前半部分;而策略的后半部分,要求“信息安全学院”、“A大学”、“教授”这三个属性同时出现,而C_Jacky_Li同时包含了这三个属性,所以属性集合匹配策略后半部分,由于策略前后两部分是or的关系,故属性集合C_Jacky_Li能够满足策略Policy1,我们称之为属性集合与策略匹配成功。
倘若此时另一个用户Johnson,他的属性集合是C_Johnson={计算机学院,A大学,教授},显然C_Johnson无法满足Policy1,此时属性集合与策略匹配失败。
一种基于属性加密技术(Attribute-Based Encryption,ABE),通过合理的配置共享策略,即可解决上述私密数据共享问题。根据嵌入的对象不同,ABE可划分为KP-ABE、CP-ABE。
以CP-ABE为例,举一个简单的例子说明ABE相较传统公钥加密算法的优势。
一个数据拥有者需要将一份明文文件,加密发送给N个不同的用户,倘若使用传统公钥加密算法,数据拥有者需要首先保存这N个用户的公钥(不考虑公钥证书的情况下),利用这N个不同公钥,使用该份明文文件,加密N次,形成N份不同的密文,分别发送给这个N个用户。PK:Public Key,公钥;CT:Cipher Text,密文。
若使用ABE来完成这项任务则会轻松很多。此时,数据拥有者只需要制定一条仅有这N个用户才能满足的访问策略,接着输入公共参数PP、该条策略以及明文文件至ABE加密算法,进行加密一次,形成唯一一份密文。得到密文后,数据拥有者将该份密文分别发送给这N个不同用户。
从加密计算开销与存储开销的角度来看,ABE在该场景下(数据加密共享场景)相较于传统公钥加密算法,有着肉眼可见的性能优势。
KP-ABE(基于密钥策略的属性加密,Key-Policy ABE,KP-ABE)是将策略嵌入到用户密钥中,属性嵌入到密文中。密钥对应于一个访问结构而密文对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问策略。这种设计比较接近静态场景,此时密文用与其相关的属性加密存放在服务器上,当允许用户得到某些消息时,就分配一个特定的访问策略给用户,其应用场景则更加偏向于付费视频网站、日志加密管理等等。如果用户想解密多个文件,那么他必须拥有多个可以满足匹配的秘钥,否则不能解密多个文件。
CP-ABE(基于密文策略的属性加密,Ciphertext-Policy ABE,CP-ABE)是将策略嵌入到密文中,属性嵌入到用户密钥中。密文对应于一个访问结构而密钥对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。
CP-ABE基于属性的加密运用密码机制保护数据,由数据拥有者规定访问密文的策略,将属性集合与访问资源相关联,数据使用者可以根据自己的授权属性的访问密文信息,该技术适合隐私数据共享等访问类应用。
CP-ABE由于策略嵌入密文中,这就意味着数据拥有者可以通过设定策略去决定拥有哪些属性的人能够访问这份密文,也就相当于对这份数据做了一个粒度可以细化到属性级别的加密访问控制,CP-ABE的应用场景一般是公有云上的数据加密存储与细粒度共享。
比较项 |
CP-ABE |
KP-ABE |
策略相关 |
密文 |
秘钥 |
属性集合相关 |
秘钥 |
密文 |
数据拥有者是否有权决定数据能被谁访问 |
能 |
否 |
属性集合中属性来源 |
用户属性 |
数据/文件属性 |
适用场景 |
云环境/区块链数据加密共享 |
日志管理、付费视频网站 |
CP-ABE主要由7个步骤组成,前两步均在证书颁发中心(CA)执行,并存储PK\MK\UK:
用户拥有的基本信息(最小数据集合):GID(CA提供或业务方提供,但要保证全局唯一性)、CP-ABE用户属性(业务方提供)、唯一素数(CA用户注册单元提供)、私钥(CA用户私钥生成单元产生)。
用户提交信息(GID、CP-ABE用户属性、唯一素数)到CA,申请注册和生成用户私钥,用户私钥存在CA中,CA提供接口查询用户和用户私钥获取。
在实际工程应用中,撤销方案尽量选择复杂度低、计算开销小、实现简单的方案。因此,本设计中采用的策略撤销方案:通过固定长度的撤销列表记录撤销用户,撤销过程不必更新系统及相关用户的秘钥,可大大降低撤销所引起的计算开销。
用户属性撤销:算法输入参数为属性att,属性对应的撤销列表list、用户user及用户对应的素数prime。当用户user被撤销属性att时,DO分别从映射表map<user,prime>和map<att,list>取出用户对应的素数prime及属性对应的撤销列表list,并计算list'=list×prime。属性att对应的撤销列表更新为list'。
用户属性恢复:算法输入参数为属性att,属性对应的撤销列表list、用户user及用户对应的素数prime。用户被撤销可能是暂时的,当用户user重新拥有属性att时,DO分别从映射表map<user,prime>和map<att,list>取出用户对应的素数prime及属性对应的撤销列表list,并计算list'=list÷prime。属性att对应的撤销列表更新为list'。
已有大量学者对其研究证明是安全的,此处安全分析略。
区块链技术与开放银行的构建
可参考以下两个开源项目实现,但是不包括访问策略更改,这一点需要自己实现。