本文授权自 MagicBoy
Attribute-based searchable encryption | Data
1. 铺垫知识
1.1 基于身份的加密(Identity-Based Encryption,IBE)
1.1.1 概念
基于身份加密技术是为了解决公钥加密算法中数字证书管理的困难性而提出的,基于身份加密技术使用用户的身份 ( 如 ID 和邮箱等 ) 作为公钥,由可信的第三方(PKG)产生用户的私钥。基于身份加密技术是一种公钥加密技术,用于指定接收者的身份信息,可实现身份鉴别、消息加密、数字签名和协商会话密钥。
1.1.2 算法
a)系统初始化算法setup。该算法的输入是安全参数k,输出是系统参数params和主密钥msk。该算法由PKG执行。
b)私钥生成算法keyGen。该算法的输入是params、主密钥msk和身份ID,输出是ID对应的私钥d。该算法由PKG执行。
c)加密算法encrypt。该算法的输入是params、身份ID和消息M,输出是密文C。该算法由加密者执行。
d)解密算法decrypt。该算法的输入是params、密文C和私钥d,输出是消息M。该算法由解密者执行。
1.2 基于角色的访问控制(Role-Based Access Control,RBA)
1.2.1 概念
基于角色的访问控制,就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限(功能)之间,一般都是多对多的关系。
1.3 基于属性的加密(Attribute-based encryption,ABE)
1.3.1 概念
2006年,Goyal V, Pandey A, Sahai A, Waters B在the 13th ACM Conf. on Computer and Communications Security会议上提出了基于属性加密的概念, Sahai A, Waters B提出了第一个基于属性加密方案。其概念如下图所示:
数据拥有者需要制定一条仅有这n个用户才能满足的访问策略,接着输入公共参数PP、该条策略以及明文文件至ABE加密算法,进行加密一次,形成唯一一份密文。得到密文后,数据拥有者将该份密文分别发送给n个不同的用户。
1.3.2 KP-ABE方案
KP-ABE(Key Policy Attribute-based Encryption,基于密钥策略的属性加密)方案是将策略嵌入到密钥中,属性嵌入到密文中,密钥对应于一个访问结构而密文对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问策略。这种设计比较接近静态场景,此时密文用与其相关的属性加密存放在服务器上,当允许用户得到某些消息时,就分配一个特定的访问策略给用户,其应用场景则更加偏向于付费视频网站、日志加密管理等等。如果用户想解密多个文件,那么他必须拥有多个可以满足匹配的秘钥,否则不能解密多个文件。其包含一下四个算法:
- Setup(γ,U):以安全参数γ和属性全集U作为输入,初始化系统并生成系统公共参数pk及主密钥mk;
- KeyGen(pk,mk,T):以系统公共参数pk、主密钥mk以及用户的访问策略T为输入,输出与T对应的用户私钥SKT;
- Encrypt(pk,w,m):以系统公共参数pk、属性集合w以及明文m为输入,输出密文CTw;
- Decrypt(pk,SKT,CTw):以系统公共参数pk、用户私钥SKT及密文CTw为输入,当且仅当CTw对应的属性集合w满足SKT对应的访问控制策略T时,算法输出明文m。
1.3.3 CP-ABE
CP-ABE(Ciphertext Policy Attribute-based Encryption,基于密文策略的属性加密),是将策略嵌入到密文中,属性嵌入到密钥中,CP-ABE由于策略嵌入密文中,这就意味着数据拥有者可以通过设定策略去决定拥有哪些属性的人能够访问这份密文,也就相当于对这份数据做了一个粒度可以细化到属性级别的加密访问控制,CP-ABE的应用场景一般是公有云上的数据加密存储与细粒度共享。其包含一下四个算法:
- Setup(γ,U):以安全参数γ和属性全集U作为输入,输出系统公共参数pk及主密钥mk;
- KeyGen(pk,mk,w):输入系统公共参数pk、主密钥mk以及用户属性集合w,输出与w对应的用户私钥SKw;
- Encrypt(pk,T,m):以系统公共参数pk、访问控制策略T以及明文m为输入,输出密文CTT;
- Decrypt(pk,SKw,CTT):以系统公共参数pk、用户私钥SKw及密文CTT为输入,当且仅当SKw对应的属性集合w满足CTT对应的访问控制策略T时,输出明文m。
2. 基于属性的可搜索加密(内嵌CP-ABE模块)
项目地址:https://github.com/Magi2B0y/Attribute-Based-Searchable-Encryption
网络业务整体运行流程图:
流程说明:
-
文件上传者将要加密的文件列表、文件索引、文件访问策略和全网属性上传,生成加密后的文件索引和文件密文,将这些内容上传网络,形成倒排索引
-
文件搜索者将自身属性、搜索关键词和全网属性上传,生成搜索 token 文件交给网络节点
-
网络节点拿到文件搜索者上传的搜索 token 文件,对倒排索引表的加密后的文件索引一一检索,若成功检索到,就将对应的密文文件返回给文件搜索者
-
文件搜索者利用自身属性对密文进行解密
PubAndMskGenerate.jar
命令行:java -jar PubAndMskGenerate.jar -a "ECNU teacher doctor master bachelor 2016 2015 2014"
参数 | 说明 |
---|---|
-a | 全网所有的属性 |
运行结果:
每次只有要更新全网所有属性时,需要运行PubAndMskGenerate.jar生成新的可搜索加密的公钥(./SerializedData/SearchableEncryption/Pub.ser)和主密钥(./SerializedData/SearchableEncryption/Msk.ser)重新分发给全网,目前全网属性是ECNU teacher doctor master bachelor 2016 2015 2014
FilesUploader.jar
命令行:java -jar FilesUploader.jar -a "ECNU teacher doctor master bachelor 2016 2015 2014" -p "ECNU teacher" -i "4" -f "E:/DeskDocument/Application_Layer/SourceFiles/1.txt"
参数 | 说明 |
---|---|
-a | 全网所有的属性 |
-p | 文件上传者定义的文件访问策略 |
-i | 上传一条倒排索引的索引值(只上传一个关键词) |
-f | 上传一条倒排索引的文件列表 |
运行结果:
-
在与FilesUploader.jar同一目录下的 SerializedData/SearchableEncryption 生成 InvertedIndex.ser 这个加密索引
-
将要上传的文件进行加密,放在 ./UploadFiles 目录下
FilesSeacher.jar
命令行: java -jar FilesSeacher.jar -a "ECNU teacher doctor master bachelor 2016 2015 2014" -s "ECNU teacher" -w "4"
参数 | 说明 |
---|---|
-a | 全网所有的属性 |
-s | 文件搜索者自身拥有的属性 |
-w | 搜索关键词(只搜索一个关键词) |
运行结果:
在 SerializedData/SearchableEncryption 目录下生成文件搜索者的 UserToken.ser,后续将其发送给网络节点执行搜索操作
NodeSeach.jar
命令行: java -jar NodeSearch.jar
运行结果:
用户上传的 UserToken.ser 若可以查找到 InvertedIndex.ser,返回 have found;否则,返回 not found,若返回 have found,网络节点就可以把该条索引对应的密文文件返回给文件搜索者
DecFiles.jar
命令行: java -jar DecFiles.jar -s "ECNU teacher" -e "./DownloadFiles/1.txt"
参数 | 说明 |
---|---|
-s | 文件搜索者自身拥有的属性 |
-e | 加密文件路径(不止一个) |
运行结果:
文件搜索者接收到的密文文件放置在 ./DownloadFiles 目录下,将密文文件进行解密,明文文件放在 ./PlainFiles 目录下
参考文章:
https://blog.csdn.net/qq_40279192/article/details/120970286
https://blog.csdn.net/HLchaochao/article/details/111832381
如有侵权,请联系作者删除