ABE 密码学,以及与区块链结合的价值
背景
- 区块链技术具备篡改难度高、使用成本低、分布式的优点,本应成为各行各业的重要助力。但是由于链上参与方担心自己的核心数据外泄,不愿将自己的核心数据上链,这个原因成为阻止区块链落地的主要难题。
- 使用 ABE密码学,就可以使得区块链中数据所有权得到有效保护,链上数据归属权为参与者本人所有,外人无法访问。
ABE 密码学是什么
- ABE 是基于属性的加密,即(Attribute-Based Encryption)。与 RSA、IBE (基于身份加密)等加密方式相比,其最大的不同点是实现了一对多的加解密。也就是说,ABE 不需要像其他加密方式那样,每次加密都必须知道接受者的身份信息,只要用户拥有的属性符合加密者所描述的策略时,用户就可以解密。
例子
- 一个数据拥有者需要将一份明文文件,加密发送给N个不同的用户,倘若使用传统公钥加密算法,数据拥有者需要首先保存这N个用户的公钥(不考虑公钥证书的情况下),利用这N个不同公钥,使用该份明文文件,加密N次,形成N份不同的密文,分别发送给这个N个用户。
- 若使用ABE来完成这项任务则会轻松很多。此时,数据拥有者只需要制定一条仅有这N个用户才能满足的访问策略,接着输入公共参数PP、该条策略以及明文文件至ABE加密算法,进行加密一次,形成唯一一份密文。得到密文后,数据拥有者将该份密文分别发送给这N个不同用户。
- 从加密计算开销与存储开销的角度来看,ABE在该场景下(数据加密共享场景)相较于传统公钥加密算法,有着肉眼可见的性能优势,此处便不再赘述。
属性指的是什么
- 属性可以理解为一个对象具有的某些特征。举个例子,Jacky Li 是 A 大学信息安全学院的教授,那么「A 大学」,「信息安全学院」以及「教授」就是 ABE 中刻画 Jacky Li 这个人的多个属性,多个不同的属性,可以构成不同的属性集合。在此基础上,策略实际即是由属性及它们间关系所组成的一个逻辑表达式。
- 倘若抛开严谨的定义,用一句话说明 ABE 公钥加密算法,其实就是看属性集合与策略是否匹配密码要求的过程。
- 在 ABE 中,需要弱化公钥这一概念,称之为公共参数(public parameter)。属性集合则被嵌入到私钥中,如果用户拥有的属性可以与密码要求的策略匹配成功,就可以成功解密。
具体的例子
- 假设现有一条密文策略规定:参与 X 课题 or (信息安全学院 and A 大学 and 教授)
- 这条策略表达的含义是,唯有 X 课题组的成员或 A 大学信息安全学院的教授才能满足要求进行解密。现在有三个用户,分别是 A 大学信息安全学院的 Alan 教授,A 大学经济管理学院的 Black 教授,B 大学参与 X 课题的 Charles 教授。
- 三个用户中,Alan 的属性集合{计算机学院,A 大学,教授}满足要求,Charles 的属性{参与 X 课题}也满足要求,但是 Black 的属性不能满足要求。所以 Alan 和 Charles 解密成功,而 Black 解密失败。
两种不同的方案
- 目前,实现 ABE 的方案主要有 CP-ABE (密文策略 ABE)和 KP-ABE (秘钥策略 ABE)。二者最大的分别在于策略和属性的匹配方式上。
- CP-ABE,指的是策略嵌入在密文中,属性集合嵌入到密钥中,当且仅当属性能够满足策略时可以解密。
- KP-ABE 是指,策略嵌入到密钥中,属性集合嵌入到密文中。
- 虽然在结构上,二者具有明显的对偶关系,但在实际使用中,二者的应用场景却有着明显的不同。
- CP-ABE 由于策略嵌入密文中,这就意味着,数据拥有者可以通过设定策略去决定拥有哪些属性的人能够访问这份密文,也就相当于对这份数据做了一个加密访问控制。CP-ABE 的应用场景一般是公有云上的数据加密存储与共享。
- KP-ABE 的应用场景则更加偏向于付费视频网站、日志加密管理等等。
CP-ABE
简介
- CP-ABE(ciphertext policy attribute based encryption,密文策略属性基加密系统):所谓密文政策加密系统是指,密文对应于一个访问结构而密钥对应于属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。这种设计比较接近于现实中的应用场景,可以假象每个用户根据自身条件或者属性从属性机构得到密钥,然后加密者来制定对消息的访问控制。
流程
- 设置:使用随机算法,输入隐藏的安全参数,输出公开参数PK和一个主密钥MK。
- 加密:使用随机算法,输入一个消息m、一个访问结构A、公开参数PK,输出密文E。
- 密钥生成:使用随机算法,输入一组属性Y、主密钥MK、公开参数PK,输出一个解密密钥D。
- 解密算法输入:基于访问结构A加密的密文E,对应属性组Y的解密密钥D,公开参数PK。如果Y∈A,输出X消息m。
KP-ABE
简介
- KP-ABE(key policy attribute based encryption,密钥策略属性基加密系统):所谓密钥政策加密系统是指,密钥对应于一个访问控制而密文对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。这种设计比较接近静态场景,此时密文用与其相关的属性加密存放在服务器上,当允许用户得到某些消息时,就分配一个特定的访问结构给用户。
流程
- 设置:使用随机算法,输入隐藏的安全参数,输出公开参数PK和一个主密钥MK。
- 加密:使用随机算法,输入一个消息m、一组属性Y、公开参数PK,输出密文E。
- 密钥生成:使用随机算法,输入访问结构A、主密钥MK、公开参数PK,输出一个解密密钥D。
- 解密算法输入:基于属性组Y加密的密文E,对应访问结构A的解密密钥D,公开参数PK。如果Y∈A,输出X消息m。
与区块链怎么结合 隐私
- 区块链的一大特点在于数据共享,这本是区块链的一大优点。然而,在实际应用中,很多参与者的数据很涉及机密,数据所有者并不乐意把自己的数据公开出来。
- 比如在金融领域。数据上链可以提高数据本身的安全性,也有利于监管机构从区块链中调取数据进行监管,这些我们都知道了。但是为什么金融领域的区块链应用迟迟推进不下去呢?一个亟待解决的重要问题是,金融公司本身不愿意将数据存在链上。因为这些数据都是相当敏感且重要的,一旦数据外泄,会带来不小的损失。
- 通过 ABE,金融公司可以将自己的数据加密后传到区块链上。由于数据全程都是密文,链上其他人只能看到加密之后的乱码,没有使用价值,拿到了也没有用。与之相对,金融公司自身可以控制谁能对数据进行访问,只需要把数据访问的权限交给监管机构和与之有数据合作的伙伴即可。
- 传统的加密方式是将数据加密后,将秘钥发送给各个需要访问数据的机构,这种方式效率虽然比较高,但是一旦秘钥外泄,无法断定是哪一个机构作为。相比起传统的加密,ABE 的好处很明显,因为每一个机构的属性不尽相同,其秘钥也不尽相同,一旦我把秘钥泄露给外界,很容易就被追查得到。
- CP-ABE不需要像其它加密方式那样,如非对称加密,每次加密都必须知道接收者的身份信息且发送给多个用户时必须加密多次,CP-ABE只需要设置访问策略仅执行一次加密,当用户拥有的属性符合加密者所描述的策略时,数据使用者就可以解密。
- 可解决对称加密密钥传输带来的密钥泄露的问题,保护了数据拥有者信息,也保护了数据使用者信息。
支持用户属性可撤销和恢复的CP-ABE算法实现步骤
- CP-ABE主要由7个步骤组成,前两步均在证书颁发中心(CA)执行,并存储PK\MK\UK:
- 初始化:初始化算法为随机化算法,初始化仅生成系统公钥PK、系统主秘钥MSK。
- 撤销机构初始化:输入参数为PK,生成一个素数域P,为每个属性att计算list=1。算法输出初始化的P,map<userGID,prime>及map<att,list>,list并不是我们常见的list,而是一个大数,且为素数,用来记录是否被撤销。
- 秘钥生成KeyGen:可信授权中心根据PK、MK和数据请求者提交的属性集合S,为数据请求者生成与属性集合关联的用户秘钥UK。在素数域中为用户申请一个素数prime,从P中删除这个prime,保证不同用户获取的prime不一样,然后素数存入映射表map<userGID,prime>中。
- 加密Encrypt:加密算法(随机化算法)输入参数为PK、待加密消息M、访问策略关联的访问控制结构,输出基于属性加密的密文。
- 解密Decrypt:解密为确定化算法,由数据请求者执行。解密分为两个步骤,第一步:访问策略树的叶子节点,令i=att(x),x表示密文策略访问树的叶子节点,(函数att(x)返回节点x所对应的属性),如果i∈S,算法获取该属性对应的撤销列表list并取模list%prime。若值不为0,表明该用户未被撤销,若为0,表示已被撤销,解密结束;第二步:当第一步验证通过后,算法输入UK、密文M,如果属性集合满足访问策略,算法可成功解密密文M。
- 用户属性撤销:算法输入参数为属性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'。
用户和秘钥管理
用户管理
- 用户拥有的基本信息(最小数据集合):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'。
CP-ABE算法实现
可参考以下两个开源项目实现,但是不包括访问策略更改,这一点需要自己实现。
- https://github.com/stefano81/dcpabe
- https://github.com/TU-Berlin-SNET/jTR-ABE
- java平台
- charm平台
- CP-ABE_JNI
参考链接
- 参考链接
- CP-ABE和KP-ABE
- 基于ABE算法的访问控制研究
- 基于属性的加密概述
- 基于属性加密方案(CP-ABE,KP-ABE)