加密部分.docx
《加密部分.docx》由会员分享,可在线阅读,更多相关《加密部分.docx(16页珍藏版)》请在冰点文库上搜索。
![加密部分.docx](https://file1.bingdoc.com/fileroot1/2023-5/14/dc90e94a-1c7f-4b91-9971-38e8b9ed0461/dc90e94a-1c7f-4b91-9971-38e8b9ed04611.gif)
加密部分
哈尔滨工程大学软件安全大作业
Linux下基于CPABE的共享文件加密策略
院(系)名称:
计算机科学与技术学院
专业名称:
计算机科学与技术
学生姓名:
刘欣卓
学生学号:
2009142212
指导教师:
赵靖
2013年5月
摘要
随着Internet互联网络带宽的增加,传输文集几乎成为人们每天都需要做的工作。
然而,如果网络传输不加密文件是很不安全的。
加密的话,基本上是1对1,如何做到加密与权限控制两者和一呢,这就需要基于属性的加密即ABE加密。
关键词:
ABE加密传输加密混合加密CPABE
注:
本次作业系统基于乌班图12.10
第1章:
绪论
1.1概述
ABE加密即基于属性加密,CPABE即基于属性的公钥加密,在这次作业中我采用的就是CPABE基于属性的公钥加密,其好处在于,1次加密,多次解密,实现权限控制与加密的统一化。
当解密一个文件时,只有在密钥中具备加密时所设定的属性,才可对其进行解密。
在这次作业中,遭遇了很多困难,经过多次测试与筛选,选在了在乌班图12.10下,利用脚本语言完成。
因为我以前很少在Linux下进行实验,因此给自己带来很多困难。
1、脚本语言,这门语言是现学的,虽然不难,但是功能真的十分强大。
2、单引号、双引号、反引号,这3个符号很讨厌,因为其用处与限制各不相同,尤其实在脚本语言中。
3、CPABE的安装,很困难,错误不好排查。
第2章:
CPABE的安装
2.1CPABE的安装
CPABE是基于PCB库的,PCB库是基于GMP库的,GMP库是建立在M4库之上的,因此要先安装M4库,然后反序安装。
1、安装M4库
使用指令“sudoapt-getinstallm4”即可
2、安装GMP库
使用指令“sudoapt-getinstalllibgmp-dev”即可
3、安装PBC库
(1)从http:
//crypto.stanford.edu/pbc/下载PBC的源码
(2)将压缩包解压缩,然后使用“./configure”指令
(3)使用“make”指令生成
(4)使用“makeinstall”指令安装
4、安装openssl
使用指令“sudoapt-getinstallopenssl-dev”即可
5、从网站http:
//acsc.cs.utexas.edu/cpabe/下载libbswablibbswabe与cpabe源码
6、安装libbswablibbswabe
(1)将压缩包解压缩,然后使用“./configure”指令
(2)使用“make”指令生成
(3)使用“makeinstall”指令安装
在进行4、5部的时候,会提示glib有一个依赖,可以通过“sudoapt-getinstalllibglib2.0-dev”解决掉
7、安装CPABE
(1)将压缩包解压缩,然后使用“./configure”指令
(2)使用“make”指令生成
(3)使用“makeinstall”指令安装
在makeinstall的时候出现问题:
usr/bin/ld:
/usr/local/lib/libpbc.so:
undefinedreferencetosymbol'__gmpz_init'
/usr/bin/ld:
note:
'__gmpz_init'isdefinedinDSO/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libgmp.sosotryaddingittothelinkercommandline
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libgmp.so:
couldnotreadsymbols:
Invalidoperation
collect2:
ld返回1
make:
***[cpabe-setup]错误1
更改make文件
将:
LDFLAGS=-O3-Wall\
-lglib-2.0\
-Wl,-rpath/usr/local/lib-lgmp\
-Wl,-rpath/usr/local/lib-lpbc\
-lbswabe\
-lcrypto-lcrypto
更改为:
LDFLAGS=-O3-Wall\
-lglib-2.0\
-Wl,-rpath/usr/local/lib-lgmp\
-Wl,-rpath/usr/local/lib-lpbc\
-lbswabe\
-lcrypto-lcrypto\
-lgmp
即可。
第3章:
加解密策略
3.1加密概述
直接使用CPABE加密难免造成加密时间过长的情况,而且无法校验解密是否正确,发送方是否正确,文件容易被攻击,因此需要重新设计加密策略!
首先要对文件的发送发进行确认,这就需要进行签名,而对于大文件来说,签名时间很长,需要改进。
可对其进行报文摘要算法,然后对报文摘要签名其次为了提高加密速度,需要改变加密模式,可用对称性加密原文件,用CPABE加密对称性算法的密钥。
另外本组策略需要多组密钥,密钥管理同样需要设计
3.2CPABE的使用
1、公钥与主钥的生成
使用命令:
$cpabe-setup
即可生成pub_key与master_key如图
2、私钥的生成
使用如下命令,即可生成2个分别属于sara与kevin的私钥:
$cpabe-keygen-osara_priv_keypub_keymaster_key\
sysadminit_department'office=1431''hire_date='`date+%s`
$cpabe-keygen-okevin_priv_keypub_keymaster_key\
business_staffstrategy_team'executive_level=7'\
'office=2362''hire_date='`date+%s`
如代码所示,Sara是系统管理员,属于it部门,办公室号1431,后面的data即为现在的时间Kevin则是商业雇员,属于策略团队,执行权限是7,办公室2362,在此已经将属性写入密钥,运行结果如图:
3、文件的加密
使用如下代码,即可为一个名为de.jpg的图片加密
$cpabe-encpub_keyde,jpg
(sysadminand(hire_date<946702800orsecurity_team))or
(business_staffand2of(executive_level>=5,audit_group,strategy_team))
^D
写入属性即为代码中的属性,如果是系统管理员,需要入职日期小于946702800或者属于安全团队,如果是商业职员则需要满足3个条件中的2个。
其中定义密钥中的`date+%s`是带反引号的,表示返回这个函数的值,而这个值是由目前系统的时间减去1970年1月1日8点整所的出的秒数。
加密策略最后^D是指ctrl+D
4、文件的解密
如下命令,即可为de.jpg解密:
$cpabe-decpub_keykevin_priv_keysecurity_report.pdf.cpabe
若属性不满足加密时的设置,则会显示无法解密
3.3策略的加密过程
加密过程如图:
1、对原文件进行报文摘要算法(MD5),生成印章文件1
2、利用RSA私钥对印章文件1进行签名
3、生成DES密钥,并输出到文件
4、利用DES算法对文件进行加密
5、将存储DES密钥的文件利用CPABE进行加密
6、将签名文件、利用DES加密后的文件和利用CPABE加密后的DES密钥文件打包压缩
3.4策略解密过程
解密过程如图:
1、开始之后对压缩包解压缩
2、先利用CPABE的私钥对存有DES密钥的文件进行解密,若解密成功则继续,若解密失败,则终止
3、利用DES密钥将DES加密后的文件解密,
4、利用RSA公钥从签名文件中得到原始的印章文件1
5、利用MD5算法从解密后的文件中计算出印章文件2
6、比较印章文件1与印章文件2,若相同则解密成功,解密后的文件保留,若不相同,则证明文件不安全,删除
注:
1、因为对称性算法DES的安全性不太好,所以本次作业我采用了加盐的3DES算法
2、RSA密钥为了保证安全性,我采用了1024位的密钥
3、印章文件其实就是一个文本文件,里面的内容格式为:
MD5(filename)=$String
$String是一个由数字和字母组成的32位字符串
3.5密钥的管理
因为我设计的策略有3组密钥:
RSA密钥、CPABE属性密钥、DES密钥,其中DES密钥会被传递,不需要考虑。
RSA密钥的公钥将存放在主文件夹下的PUB_KEY文件夹中,而私钥在存放在主文件夹中。
CPABE的masterkey、publickey、私钥,都存在主文件夹下。
其中PUB_KEY文件夹、CPABE的masterkey、publickey、私钥都需要提前分发
3.6策略的实现
因为每次都需要录入终端命令,很麻烦,所以在实现策略的时候,我选用了shell脚本实现。
其中分为2个文件:
enc(加密)、dec(解密)如图:
将程序写入文本文档,在终端输入“chmod+xfilename”授权,再输入
“./filename”就可以使用了
第4章:
策略演示
4.1密钥的管理
4.1.1RSA密钥生成,我设计了另一个脚本,如图:
利用openssl随机生成了一对命名为bill的1024位的RSA密钥,并将公钥提取出来,存入PUB_KEY文件夹中,运行结果如下:
4.1.2CPABEmaster_key与pub_key的生成
输入命令“cpabe-setup”即可生成
如下图,可以看到输入命令后,master_key与pub_key已经生成
4.1.3CPABE私钥的生成,如图将属性分别写入名为sara和kevin的密钥中:
从图中可以看到私钥已经成功生成!
4.2脚本的运行
4.2.1编写脚本文件并编译授权:
4.2.2脚本的执行
输入“./enc”和“./dec”执行脚本
4.3加密的过程
4.3.1在终端输入“./enc”执行加密脚本
4.3.2输入文件名与应用签名的用户名
4.3.3输入DES的密码,此密码会自动保存在主文件夹下DESK文件中,如下图图所示
4.3.4编写CPABE的加密策略在程序中支持文法ANDOROF><=
>=<=
如图,上图编写的文法就是说如果是sysadmin需要满足入职时间小于946702800或者属于安全团队如果是商业雇员,需要满足后面3个条件中的2个才能解密,执行级别大于或等于5,审计团队,策略团队。
如图,自动会生成DESK、filename.sign、filename.des3salt、filename.signed。
然后会将DESK应用CPABE策略,生成DESK.cpabe,然后将DESK.cpabe、filename.signed、filename.des3salt生成压缩包,加密过程完毕。
4.4解密的过程
4.4.1首先将压缩包解密到主文件夹,将会释放压缩包内的DESK.cpabe、filename.des3salt、filename.signed
4.4.2验证私钥所包含的的属性是否满足加密时的属性,如果满足,则继续解密,如图
如果私钥不满足,则无法解密,如图
4.4.3验证签名,如果签名验证成功即sign1=sign2,删除其他文件,保留filename,若签名不匹配,则在10秒后全部删除,如图,修改sign1,让sign1与sign2不匹配:
如图,文件已经被删除!
参考文献:
http:
//acsc.cs.utexas.edu/cpabe/
UsingthecpabeToolkit
Firstdownload,untar,compile,andinstallthemostrecenttarballoflibbswabe,thesupportlibrary.Nextdothecpabetarball.EachcanbecanbeinstalledwiththestandardGNUbuildsystemcommands.
$./configure
$make
$makeinstall
The"$"denotesyourshell’sprompt.NotethatthepackagerequiresthePBC§library,somakesureyouhavethatinstalledfirst.
Next,tosetupthepublickeyandmasterkeys,runcpabe-setup§.
$cpabe-setup
$ls
master_keypub_key
Nowyoucanusethefilemaster_keytoproduceprivatekeysassociatedwithvarioussetsofattributes.Let’ssayyouworkforacompanythatjusthiredtwonewemployees,SaraandKevin,andyouaregoingtomakeprivatekeysfortheirworkstations.
Todoso,youusecpabe-keygen§.
$cpabe-keygen-osara_priv_keypub_keymaster_key\
sysadminit_department'office=1431''hire_date='`date+%s`
$cpabe-keygen-okevin_priv_keypub_keymaster_key\
business_staffstrategy_team'executive_level=7'\
'office=2362''hire_date='`date+%s`
$ls
master_keypub_keysara_priv_keykevin_priv_key
Asyoucanseeinthoseexamples,someattributesareassignedavalue,whileothersakeysimply"has"withoutfurtherqualification.Thedatecommandcanbeusedtohelpusethecurrenttimeasanattributevalue.
Nowsupposelatersomeonewantstoencryptasensitivedocument.Alltheyneedisthepublickey,thencanusecpabe-enc§toencryptitunderaspecifiedpolicy.
$ls
pub_keysecurity_report.pdf
$cpabe-encpub_keysecurity_report.pdf
(sysadminand(hire_date<946702800orsecurity_team))or
(business_staffand2of(executive_level>=5,audit_group,strategy_team))
^D
$ls
pub_keysecurity_report.pdf.cpabe
Inthiscase,theytypedthepolicyonstdin.NotethattheattributesofKevin’skeysatisfythispolicy,buttheattributesofSara’skeydonot.
IfKevinwantstodecryptthedocument,hecanusecpabe-dec§.
$ls
pub_keykevin_priv_keysecurity_report.pdf.cpabe
$cpabe-decpub_keykevin_priv_keysecurity_report.pdf.cpabe
$ls
pub_keykevin_priv_keysecurity_report.pdf
IfSaraweretotrytodecryptit,anerrorwouldbereported.
That’sallthereistousingcpabe!
附录:
(源代码)
1、RSA密钥生成
#!
/bin/sh
echo"请输入签名用户用户名"
readkname
opensslgenrsa-outRSA_$kname.pem1024
catRSA_$kname.pem
opensslrsa-inRSA_$kname.pem-text-noout
opensslrsa-inRSA_$kname.pem-pubout-outPUB_KEY/pub_RSA_$kname.pem
echo"签名密钥生成完毕"
2、加密脚本
#!
/bin/sh
echo"请输入文件名"
readfname
if[-f"$fname"];
then
echo"$fname文件存在"
echo"请输入签名密钥用户名"
readpname
openssldgst-md5-out$fname.sign$fname;
opensslrsautl-sign-in$fname.sign-inkeyRSA_$pname.pem-out$fname.signed
echo"签名完毕"
echo"请输入DES加密密码"
readDK
echo$DK>>DESK
opensslenc-p-des3-passfile:
DESK-in$fname-out$fname.des3salt
echo"请使用CPABE加密生成策略生成加密代码粘贴到此处!
按ctrl+D确认"
cpabe-encpub_keyDESK
echo"文件加密完毕正在建立压缩包"
tar-zcvfCPABE$fname.$pname.tar.gzDESK.cpabe$fname.signed$fname.des3salt
echo"文件压缩完毕"
sleep1
rm-f$fname.sign
rm-f$fname.signed
rm-f$fname.des3salt
rm-fDESK
rm-fDESK.cpabe
else
echo"$fname文件不存在"
fi
3、解密脚本
#!
/bin/sh
echo"请输入ABE私钥用户名"
readkname
echo"请输入签名密钥的用户"
readpname
echo"请输入文件名"
readfname
if[-f"CPABE$fname.$pname.tar.gz"];
then
tar-zxvfCPABE$fname.$pname.tar.gz
cpabe-decpub_key"$kname"_priv_keyDESK.cpabe
opensslenc-d-des3-passfile:
DESK-in$fname.des3salt-out$fname
opensslrsautl-verify-inde.jpg.signed-pubin-inkeyPUB_KEY/pub_RSA_$pname.pem-outsign1
openssldgst-md5-outsign2$fname
diff-rsign1sign2
if[$?
-ne0];
then
echo"签名不匹配!
"
echo"文件不安全!
10秒后即将删除!
"
rm-f$fname.des3salt
rm-f$fname.signed
rm-fDESK
rm-fsign1
rm-fsign2
sleep10
rm-f$fname
exit1
fi
echo"签名匹配!
"
rm-f$fname.des3salt
rm-f$fname.signed
rm-fDESK
rm-fsign1
rm-fsign2
echo"文件解密完成!
"
else
echo"CPABE$fname.$pname.tar.gzisnotexist!
"
fi