因为硕士论文要做关于cpabe的内容,所以自己在网上查找资料折腾了一下,信息全来源于网上,如有侵权必删。谨以此博客记录自己的学习经历。
1. 安装m4、bison、flex
sudo apt-get install m4
sudo apt-get install flex
sudo apt-get install bison
2. 安装GMP
gmp下载地址:https://gmplib.org/ ,下载然后解压,并进入目录
tar -xvf gmp-6.1.2.tar.bz2
cd gmp-6.1.2
安装
./configure
sudo make check
sudo make
sudo make install
3. 安装pbc
pbc下载地址:http://crypto.stanford.edu/pbc/download.html ,下载然后解压,并进入目录
tar -xvf pbc-0.5.14.tar.gz
cd pbc-0.5.14
安装
./configure
sudo make
sudo make install
pbc的环境配置完成,下面进行测试
进入pbc-0.5.14——example目录下,创建一个foo.c文件,编写内容:
#include "pbc.h"
int main(void)
{
printf("this is a test\n");
return 0;
}
然后运行下面代码编译
gcc -o foo foo.c -I /usr/local/include/pbc -L /usr/local/lib -Wl,-rpath /usr/local/lib -l pbc
如果还有错请参考:http://crypto.stanford.edu/pbc/howto.html
编译完成之后运行该文件:
./foo
运行成功会打印出:
this is a test
至此pbc环境配置完成
4. 安装cpabe
安装cpabe前先安装下面两个软件:
sudo apt-get install libssl-dev
sudo apt-get install libglib2.0-dev
如果安装这两个软件出错,请参考:https://blog.csdn.net/zally_1994/article/details/84566171
然后进入http://acsc.cs.utexas.edu/cpabe/ 下载libbswabe-0.9.tar.gz 和cpabe-0.11.tar.gz。首先安装libbswabe
tar -xvf libbswabe-0.9.tar.gz
cd libbswabe-0.9
./configure
sudo make
sudo make install
然后安装cpabe
tar -xvf cpabe-0.11.tar.gz
cd cpabe-0.11
./configure
sudo make
执行完这一步会出错,错误如下面
解决办法是修改Makefile文件
vim Makefile
进入Makefile,找到以LDFLAGS开头的以下部分在最后添加-lgmp,修改之后:
LDFLAGS = -O3 -Wall \
-lglib-2.0 \
-Wl,-rpath /usr/local/lib -lgmp \
-Wl,-rpath /usr/local/lib -lpbc \
-lbswabe \
-lcrypto -lcrypto \
-lgmp
修改完之后,再修改policy_lang.y文件
vim policy_lang.y
在67行的 } 前面加入 ; ,加完之后运行
sudo make
sudo make install
之后进行测试:cpabe-setup -h
显示下图表明搭建成功
环境搭建完成之后就看下如何使用了
可以参考这两个:
http://acsc.cs.utexas.edu/cpabe/tutorial.html
http://acsc.cs.utexas.edu/cpabe/
安装之前先创建一个cpabe文件夹
mkdir cpabe
进入cpabe文件夹内
cd cpabe
接下来会在这个文件夹下面产生公钥和私钥。
1、通过cpabe-setup命令产生 public key and master key
cpabe-setup
ls
会产生 master_key 和 pub_key
2、使用master_key 和 pub_key 以及cpabe-keygen命令为具有属性值的用户产生私钥
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`
ls
master_key pub_key sara_priv_key kevin_priv_key
注意:
(1)cp-keygen使用参照:http://acsc.cs.utexas.edu/cpabe/cpabe-keygen.html
(2)第一行代码的末尾有一个“\”是因为第一行放不下了,想换行继续输命令。
(3)上例产生 了两个私钥sara_priv_key kevin_priv_key,分别是sara和kevin的。
3、使用cpabe-enc命令和pub_key和访问策略加密明文生成密文 (这里事先新建了一个文件security_report.pdf ,这个文件是要被加密的)
这里要注意:
(1)先执行代码
cpabe-enc pub_key security_report.pdf
(2)然后执行
(sysadmin and (hire_date < 946702800 or security_team)) or
(3)然后执行
(business_staff and 2 of (executive_level >= 5, audit_group, strategy_team))
(4)然后执行^D
//Ctrl+D
ls一下会发现多出来一个 security_report.pdf.cpabe文件
这里的sysadmin and (hire_date < 946702800 or security_team是访问策略
在这个例子里设计的策略是kevin满足,但是sara的不满足
4、使用cpabe-dec命令,用私钥对密文进行解密。
cpabe-dec pub_key kevin_priv_key security_report.pdf.cpabe
运行之后会发现security_report.pdf.cpabe这个文件已经被成功解密,会变成security_report.pdf
注意:如果要是运行
cpabe-dec pub_key sara_priv_key security_report.pdf.cpabe
则会报错
以上代码全部经过本人测试成功,此博客谨希望能让您少走一点弯路。
参考博客:
1:https://blog.csdn.net/hlsdbd1990/article/details/48291359
2:https://blog.csdn.net/duoaii/article/details/52870763