目录
一、前言
二、CP-ABE
1、啥是CP-ABE
2、CP-ABE流程
三、CP-ABE库安装
1、下载
2、安装依赖项
3、gmp安装
4、pbc安装
5、libbswabe安装
6、cpabe安装
四、调用
1、setup
2、keygen
3、encrypt
4、decrypt
一、前言
最近在搞密码学,了解到了属性基加密,在代码配置与库安装过程中,出现了很多问题,所以把自己安装记录一下,也能够帮助到更多做相关研究的人!
二、CP-ABE
1、啥是CP-ABE
属性基加密的一种,另一种是KP-ABE。全称是:ciphertext policy attribute based encryption,即:密文策略属性基加密系统。
密文对应于一个访问结构而密钥对应于属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。这种设计比较接近于现实中的应用场景,可以假象每个用户根据自身条件或者属性从属性机构得到密钥,然后加密者来制定对消息的访问控制。
2、CP-ABE流程
CP-ABE 主要有四个步骤:
setup 设置:这是一个随机算法,输入隐藏的安全参数,输出公开参数PK和一个主密钥MK。
keygen 密钥生成:这是一个随机算法,输入一组属性Y、主密钥MK、公开参数PK,输出一个解密密钥D。
encryption 加密:这是一个随机算法,输入一个消息m、一个访问结构A、公开参数PK,输出密文E。
decryption 解密:基于访问结构A加密的密文E,对应属性组Y的解密密钥D,公开参数PK。如果Y∈A,输出X消息m。
三、CP-ABE库安装
我们在Ubuntu 16.04下安装CP-ABE库。
1、下载
我们通过下面这个网址可以下载查看CP-ABE库的相关信息:
http://acsc.cs.utexas.edu/cpabe/index.html
然后可以下载CP-ABE库。
通过下面的网址,下载gmp库:
/
然后我们讲下载好的库存到Ubuntu中,准备工作就完成啦。
2、安装依赖项
我们需要安装如下依赖项:m4,flex,bison。
在安装之前,我们要先进入root权限:
然后我们使用如下命令安装:
sudo apt-get install m4
sudo apt-get install flex
sudo apt-get install bison
3、gmp安装
安装之前,我们要先安装lzip,用于解压gmp源码:
sudo apt-get install lzip
使用下面命令将gmp-6.2.0.tar.lz变为gmp-6.2.0.tar
lzip -d gmp-6.2.0.tar.lz
右键将文件提取到此处,然后打开文件夹,在文件夹中打开终端,输入如下命令进行安装:
./configure
make check
make
make install
4、pbc安装
右键将文件提取到此处,然后打开文件夹,在文件夹中打开终端,输入如下命令进行安装:
./configure
make
make install
5、libbswabe安装
使用下面命令安装libssl-dev:
sudo apt-get install libssl-dev
因为我之前安装过,所以上面是我的状态,如果没有安装过就是正常安装。
使用下面命令安装libglib2.0-dev
sudo apt-get install libglib2.0-dev
右键将libbswabe压缩文件提取到此处,然后打开文件夹,在文件夹中打开终端,输入如下命令进行安装:
./configure
make
make install
6、cpabe安装
右键将文件提取到此处,然后打开文件夹,在文件夹中打开终端,输入如下命令进行安装:
./configure
执行完上面的命令,需要修改Makefile文件,在LDFLAGS最后再加一行,写:-lgmp,详细见后面图片。
make
make install
执行完
执行完第一个命令后,编辑Makefile文件,在LDFLAGS最后再加一行,写:-lgmp。
注意:
我们无法直接双击打开修改,因为需要root权限,不然状态是只读状态,所以我们要使用管理员命令打开:
然后需要打开policy_lang.y文件在67行的}前面添加一个分号;。
如果没有上面这一步,会报错:
Makefile:50: recipe for target 'policy_lang.o' failed
make: *** [policy_lang.o] Error 1
然后继续执行后两条代码
四、调用
1、setup
通过setup步骤,我们可以生成公钥和主密钥。命令如下:
cpabe-setup
接下来,我们就可以使用master_key来生成各种与属性集关联的私钥。
2、keygen
当我们拥有了公钥和主密钥,就可以来生成用户的私钥,假设我们有两个用户A和B,假设我们生成对应的私钥为:sara_priv_key,kevin_priv_key。我们使用如下命令生成私钥:
cpabe-keygen -o sara_priv_key pub_key master_key sysadmin it_department 'office = 1431' 'hire_date = '`date +%s`
cpabe-keygen -o kevin_priv_key pub_key master_key business_staff strategy_team 'executive_level = 7' 'office = 2362' 'hire_date = '`date +%s`
通过这一步,我们生成了两个用户的私钥 。
注意:
我们只是为某些属性分配了值,另一些属性只是简单地具有了键,并未进行赋值限定。如hire_date。
3、encrypt
接下来就是我们的加密过程了。我们需要自己创建一个被加密文件,如:test.txt代码如下:
cpabe-enc pub_key test.txt
(sysadmin and (hire_date < 946702800 or security_team)) or
(business_staff and 2 of (executive_level >= 5, audit_group, strategy_team))
然后按Ctrl + D。
注意:
三行代码必须输入一行,按一次回车,输入完第三行,按Ctrl + D。
运行结果如下图:
这样,我们就生成了一个加密文件test.txt.cpabe。根据其规则,我们知道,kevin可以解密而sara不能解密
4、decrypt
根据上一步我们知道kevin能解密,所以我们使用sara的密钥解密。
对你没有看错,我就是来找茬的:
cpabe-dec pub_key sara_priv_key test.txt.cpabe
然后我们使用kevin的密钥解密:
cpabe-dec pub_key kevin_priv_key test.txt.cpabe
滴滴滴,解密卡! 解密成功!!!