在做毕业设计, 所以顺便把做的实验总结成文章.

CP-ABE原理

另一篇文章总结了

搭建CP-ABE系统

注意必须先确保正确安装了Charm-crypto环境. 安装比较坑, 可以根据我的文章安装.
https://blog.csdn.net/qq_33976344/article/details/115383904

系统结构图

算法
(1) Setup()Setup()Setup(): 生成主密钥MK, 公开参数PK. MK是只有算法构造者掌握, PK被所有相同参与者接收
(2) CTT=Encrypt(PK,T,M)CT_T = Encrypt(PK, T, M)CTT​=Encrypt(PK,T,M): 使用PK, 访问结构T, 将明文M加密为密文CTTCT_TCTT​
(3) SKS=KeyGen(MK,S)SK_S = KeyGen(MK, S)SKS​=KeyGen(MK,S): 用MK, 用户属性值S生成用户私钥SKSSK_SSKS​
(4) M=Decrypt(CTT,SKS)M = Decrypt(CT_T, SK_S)M=Decrypt(CTT​,SKS​): 用户用私钥SKSSK_SSKS​解密CTTCT_TCTT​得到明文M, 当且仅当用户属性S满足访问结构T时才能解密成功.

角色

  • 可信权威: 维护属性和密钥的对应, 负责执行算法的(1), (3); 持有MK, 同时要为用户分发密钥SKSSK_SSKS​
  • 数据所有者: 通过数据服务者向用户分享数据, 负责定义访问结构T, 执行算法的(2), 加密要分享的数据.
  • 用户: 持有可信权威分发的属性密钥SKSSK_SSKS​, 执行算法(4), 可以解密相应的数据.
  • 服务提供者: 只做数据存储功能的提供者, 不参与任何算法执行.

实现系统配置、密钥分发、加密和解密,属性结构树设置,并测试加解密时间. 代码如下:

from charm.toolbox.pairinggroup import PairingGroup, GT
from charm.schemes.abenc.abenc_bsw07 import CPabe_BSW07
from time import *def Print_Time(T_encrypt: list, T_decrypt1: list, T_decrypt2:list):print('Time of Encryption:')for _ in range(len(T_encrypt)):print(T_encrypt[_], end = ' ')print('')print('Average time used: ', sum(T_encrypt) / len(T_encrypt), '\n')print('Time of Decryption#1:')for _ in range(len(T_decrypt1)):print(T_decrypt1[_], end = ' ')print('')print('Average time used: ', sum(T_decrypt1) / len(T_decrypt1), '\n')print('Time of Decryption#2:')for _ in range(len(T_decrypt2)):print(T_decrypt2[_], end = ' ')print('')print('Average time used: ', sum(T_decrypt2) / len(T_decrypt2), '\n')def main():# instantiate a bilinear pairing mappairing_group = PairingGroup('SS512')# CP-ABE under DLIN (2-linear)cpabe = CPabe_BSW07(pairing_group)# run the set up(pk, msk) = cpabe.setup()# generate a secret_keyattributes = ['ONE', 'TWO', 'THREE', 'FOUR']secret_key = cpabe.keygen(pk, msk, attributes)# generate a Practitioiner#1 keypractitioner1_attr_list = ['ONE', 'THREE', 'FOUR']practitioner1_key = cpabe.keygen(pk, msk, practitioner1_attr_list)# generate a Practitioiner#2 keypractitioner2_attr_list = ['THREE', 'FOUR']practitioner2_key = cpabe.keygen(pk, msk, practitioner2_attr_list)# test encryption and decryption time# test for 10 roundstimes_p1 = []times_p2 = []times_enc = []times_dec = []Rounds = 10policy_str = '((ONE and THREE) and (TWO OR FOUR))'for _ in range(Rounds):# choose a random message pretend to be owner's recordmsg = pairing_group.random(GT)# generate a ciphertextstart_time = time()ctxt = cpabe.encrypt(pk, msg, policy_str)end_time = time()times_enc.append(end_time - start_time)# decryption as Ownerstart_time = time()rec_msg = cpabe.decrypt(pk, secret_key, ctxt)end_time = time()times_dec.append(end_time - start_time)if rec_msg == msg:print ("Successful decryption as Owner.")else:print ("Decryption as a Owner failed.")# decryption as Practitionerstart_time = time()rec_msg = cpabe.decrypt(pk, practitioner1_key, ctxt)end_time = time()times_p1.append(end_time - start_time)if rec_msg == msg:print ("Successful decryption as a Practitioner#1.")else:print ("Decryption as a Practitioner#1 failed.")# decryption as Practitioner#2start_time = time()rec_msg = cpabe.decrypt(pk, practitioner2_key, ctxt)end_time = time()times_p2.append(end_time - start_time)if rec_msg == msg:print ("Successful decryption as a Practitioner#2.")else:print ("Decryption as a Practitioner#2 failed.")Print_Time(times_enc, times_dec, times_p1)if __name__ == "__main__":main()

Charm-crypto搭建CP-ABE密码系统相关推荐

  1. cp abe java_CP-ABE环境配置

    本环境配置步骤参考互联网: 1.安装m4 sudo apt-get install m4 ./configuremake makechecksudo make install ./configure ...

  2. cp abe java_CP-ABE基于密文策略的属性加密(JAVA源码)

    [实例简介] 这个软件是一个Java实现基于"ciphertext-policy属性加密"(CP-ABE). 使用该软件,您需要Java加密为基础的配对库(jPBC)安装(jpbc ...

  3. Redis运维和开发学习笔记(3)redis搭建集群

    Redis运维和开发学习笔记(3)redis搭建集群 文章目录 Redis运维和开发学习笔记(3)redis搭建集群 Redis集群搭建 Redis集群搭建 cp /etc/redis.d/redis ...

  4. 数字电视传输网络技术与标准(转)

    引:三种传输网络.三大传输标准体系,组成了一个数字电视"网格".不同的数字电视系统都会占据一个"网格".中国正在培育自己的地面数字电视传输标准,期望在搭建数字电 ...

  5. Fuchsia之GN与Ninja构建hello world

    接上篇:Fuchsia中GN与Ninja构建过程  1.环境搭建 # cp -rf out/ ~/home/GN //将编译出来的out目录的gn都拷贝出来 # emacs /etc/profile ...

  6. zookeeper的使用

    zookeeper 安装: 直接解压即可 1.在zookeeper的解压目录中进行如下操作 #此时拷贝文件 cd conf/ # 因为zookeeper默认使用的配置文件名称是zoo.cfg,否则启动 ...

  7. charm-crypto-0.5安装

    charm-crypto0.5安装 前言 这个库对于python 2.x不能正常使用,跑代码会有相关函数报错的问题.一定要使用python 3.7!!!python3.7!!!python3.7!!! ...

  8. 2. 安装MySQL

    1.    要了解支持哪些平台.请注意并非所有支持的平台同等适合运行MySQL.在部分平台上会比其它平台更有效.稳定.详情请参见2.1.1节,"MySQL支持的操作系统" . 2. ...

  9. Linux 的基本使用(上)· 背景故事 · 环境搭建 · 常用命令 vim less cp mv等(基本能覆盖 Linux 日常使用80%场景)· Linux 文件结构的意义 · 相对路径和绝对路径

    一.Linux 背景知识 二.Linux 发行版 三.关于 Linux 我们学什么 四.Linux 环境搭建 五.Linux 常用命令 第一组命令 ls 列出该目录下所有子目录和文件命令 Linux ...

最新文章

  1. Git突破文件限制上传大文件
  2. 模块--random
  3. qchart 坐标轴设置_实战PyQt5: 156-QChart图表之更换图表主题
  4. C++中的namespace ----转载
  5. 宝塔自助建站系统源码v8.0
  6. ios 怎么禁止点击子视图的时候不响应父视图的点击事件
  7. 物联网给快递业带来新变革
  8. 网页防篡改系统的使用体验
  9. c语言明解课后答案,《明解C语言》第三章笔记和练习题
  10. linux 内核互斥体,内核并发控制---互斥量
  11. 史上最全Java学习路线:免费全套Java视频合集 (基础+进阶+高级+项目+面试题)
  12. 第十四章 C语言头文件的编写_C语言模块化编程中的头文件
  13. 封装60秒倒计时vue组件
  14. 零基础学彩铅——下午茶(含详细步骤)
  15. 2022年人工智能发展情况及值得关注的人工智能发展趋势
  16. Windows 当前所接的屏幕检测
  17. 5款工具彻底帮你解决百度网盘限速问题!
  18. 纯翻译 GMSL2-CSI2 MAX9295和MAX9296配对通用过程 编程指南
  19. 51单片机实现类似于Arduino中micros()、millis()函数功能并用于接收ppm信号
  20. 希腊字母 数学 物理 电磁场

热门文章

  1. 《编辑器篇》kindeditor 文件上传漏洞利用
  2. Vue v-show
  3. pdf怎么翻译?有这个工具就够了
  4. 【Linux操作系统】实验一
  5. 递归法求1!+2!+3!+4!+……+n!
  6. CString类常用方法----TrimLeft(),TrimRight()
  7. 学计算机远程控制,怎样远程控制另一台电脑的方法步骤
  8. webpack版本问题 Cannot read property ‘createHash‘ of undefined
  9. 西工大博士计算机专业课,[考博复习资料]西北工业大学2018博士招生计算机辅助几何造型技术考试大纲_考博_旭晨教育...
  10. 网络克隆实验(多播克隆)