# dcpabe **Repository Path**: aoweibrave/dcpabe ## Basic Information - **Project Name**: dcpabe - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-03-26 - **Last Updated**: 2025-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于属性加密方案(CP-ABE,KP-ABE) ## 属性: 在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,我们称之为属性集合与策略匹配成功。 ## ABE: 一种基于属性加密技术(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的应用场景一般是公有云上的数据加密存储与细粒度共享。 ### KP-ABE与CP-ABE比较 | 比较项 | CP-ABE | KP-ABE | | ------------------------------------ | ------------------------- | ---------------------- | | 策略相关 | 密文 | 秘钥 | | 属性集合相关 | 秘钥 | 密文 | | 数据拥有者是否有权决定数据能被谁访问 | 能 | 否 | | 属性集合中属性来源 | 用户属性 | 数据/文件属性 | | 适用场景 | 云环境/区块链数据加密共享 | 日志管理、付费视频网站 | ## 支持用户属性可撤销和恢复的CP-ABE算法实现步骤 CP-ABE主要由7个步骤组成,前两步均在证书颁发中心(CA)执行,并存储PK\MK\UK: * 初始化Setup:初始化算法为随机化算法,初始化仅生成系统公钥PK、系统主秘钥MSK。 * 撤销机构初始化:输入参数为PK,生成一个素数域P,为每个属性att计算list=1。算法输出初始化的P,map及map,list并不是我们常见的list,而是一个大数,且为素数,用来记录是否被撤销。 * 秘钥生成KeyGen:可信授权中心根据PK、MK和数据请求者提交的属性集合S,为数据请求者生成与属性集合关联的用户秘钥UK。在素数域中为用户申请一个素数prime,从P中删除这个prime,保证不同用户获取的prime不一样,然后素数存入映射表map中。 * 加密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不需要像其它加密方式那样,如非对称加密,每次加密都必须知道接收者的身份信息且发送给多个用户时必须加密多次,CP-ABE只需要设置访问策略仅执行一次加密,当用户拥有的属性符合加密者所描述的策略时,数据使用者就可以解密。 可解决对称加密密钥传输带来的密钥泄露的问题,保护了数据拥有者信息,也保护了数据使用者信息。 ## 代码运行 运行`Main`函数中的测试方法即可 src/main/java/sg/edu/ntu/sce/sands/crypto/Main.java ## 原博客链接: https://blog.csdn.net/jingzi123456789/article/details/104783728/ ## 所需jar包(JPBC Download) 下载JPBC库的jar包,添加到类路径 http://gas.dia.unisa.it/projects/jpbc/#.YF6gsDRLiHu ## 相关参考链接 原实现github地址:https://github.com/stefano81/dcpabe (CP-ABE)访问树构造与解密:https://blog.csdn.net/ping802363/article/details/65639016 祁老师的示例:https://github.com/opendev2020/dedu JPBC库(基于配对的密码学)入门和避坑指南(视频):https://www.bilibili.com/video/BV1o5411Y77r?from=search&seid=4811291921857270561 JPBC库(基于配对的密码学)入门和避坑指南(博客):https://blog.csdn.net/weixin_44960315/article/details/107325591 JPBC库应用之BLS签名:https://blog.csdn.net/weixin_44960315/article/details/110881986