Charm-crypto搭建CP-ABE密码系统

2023-11-06

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

CP-ABE原理

另一篇文章总结了

搭建CP-ABE系统

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

系统结构图
在这里插入图片描述
算法
(1) S e t u p ( ) Setup() Setup(): 生成主密钥MK, 公开参数PK. MK是只有算法构造者掌握, PK被所有相同参与者接收
(2) C T T = E n c r y p t ( P K , T , M ) CT_T = Encrypt(PK, T, M) CTT=Encrypt(PK,T,M): 使用PK, 访问结构T, 将明文M加密为密文 C T T CT_T CTT
(3) S K S = K e y G e n ( M K , S ) SK_S = KeyGen(MK, S) SKS=KeyGen(MK,S): 用MK, 用户属性值S生成用户私钥 S K S SK_S SKS
(4) M = D e c r y p t ( C T T , S K S ) M = Decrypt(CT_T, SK_S) M=Decrypt(CTT,SKS): 用户用私钥 S K S SK_S SKS解密 C T T CT_T CTT得到明文M, 当且仅当用户属性S满足访问结构T时才能解密成功.

角色

  • 可信权威: 维护属性和密钥的对应, 负责执行算法的(1), (3); 持有MK, 同时要为用户分发密钥 S K S SK_S SKS
  • 数据所有者: 通过数据服务者向用户分享数据, 负责定义访问结构T, 执行算法的(2), 加密要分享的数据.
  • 用户: 持有可信权威分发的属性密钥 S K S SK_S SKS, 执行算法(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 map
    pairing_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_key
    attributes = ['ONE', 'TWO', 'THREE', 'FOUR']
    secret_key = cpabe.keygen(pk, msk, attributes)

    # generate a Practitioiner#1 key
    practitioner1_attr_list = ['ONE', 'THREE', 'FOUR']
    practitioner1_key = cpabe.keygen(pk, msk, practitioner1_attr_list)

    # generate a Practitioiner#2 key
    practitioner2_attr_list = ['THREE', 'FOUR']
    practitioner2_key = cpabe.keygen(pk, msk, practitioner2_attr_list)


    # test encryption and decryption time
    # test for 10 rounds

    times_p1 = []
    times_p2 = []
    times_enc = []
    times_dec = []
    Rounds = 10
    policy_str = '((ONE and THREE) and (TWO OR FOUR))'

    for _ in range(Rounds):
        # choose a random message pretend to be owner's record
        msg = pairing_group.random(GT)
    
        # generate a ciphertext
        start_time = time()
        ctxt = cpabe.encrypt(pk, msg, policy_str)
        end_time = time()
        times_enc.append(end_time - start_time)

        # decryption as Owner
        start_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 Practitioner
        start_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#2
        start_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()

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Charm-crypto搭建CP-ABE密码系统 的相关文章

  • 第【4】篇 如何理解数字货币?它与区块链又是什么样的关系?

    为什么80 的码农都做不了架构师 gt gt gt 从历史进程来看 货币的形态主要经历了几次变化 从早期社会如兽皮 牲畜 陶器的物物交换 到各种贝壳类的货币 再到后面的铜币 乃至后来人们选择了黄金和白银作为流通货币 随着消费需求不断增加 人
  • 斯坦福密码学课程-笔记-01-Introduction绪论

    斯坦福密码学课程笔记 01 绪论 Introduction Course Overview Cryptography is everywhere Secure communication Secure Sockets Layer TLS P
  • 密码学——1.密码学概论

    1 基本术语 1 1 密码使用学 ceyptography vs 密码编码学 crypyology 密码使用学是一种为了达到隐藏消息含义而使用秘文写的一门科学 密码分析学是一门研究在不知道通常解密所需要的秘密信息的情况下对加密的信息进行解
  • 密码学基础(一)——哈希算法

    一 常用密码学算法分类 哈希算法 哈希算法不可逆 包括 MD4 MD5 hash1 ripeMD160 SHA256 SHA3 Keccak256 国家标准SM3 国家密码管理局 加密 解密算法 加密解密算法可逆 但是必须要有秘钥 对称加密
  • 网络安全与密码学

    1 网络安全威胁 破坏网络安全的一些理论方式 窃听 窃听信息 在网路通信双方直接进行窃听 插入 主动在网络连接中插入信息 可以在message中插入恶意信息 假冒 伪造 spoof 分组中的源地址 假冒客户端或服务器 劫持 通过移除 取代发
  • 密码学的一些基本概念

    密码学是研究如何隐密地传递信息的学科 密码学的作用 机密性 是网络信息不泄露给非授权用户的特性 防止被动攻击 常用的保密技术包括 防侦听 防辐射 信息加密 物理保密等 完整性 完整性是网络信息未经授权不能进行改变的特性 完整性是一种面向信息
  • openssl hmac源码分析

    hmac 原理 HMAC 用于保护消息的完整性 它采用摘要算法对消息 填充以及秘密密钥进行混合 运算 在消息传输时 用户不仅传送消息本身 还传送 HMAC 值 接收方接收数据后也进 行 HMAC 运算 再比对 MAC 值是否一致 由于秘密密
  • 附指南原文下载-《GB/T 39725-2020 信息安全技术 健康医疗数据安全指南》解读(一)

    本文由指南内容的精简总结和笔者个人理解编写而成 指南原文链接在文末 不同数据使用场景的下的安全保护措施因篇幅问题单独编写一章 链接在文末 目录 一 背景 二 数据分类分级 1 数据分类 2 数据分级 3 数据开放形式 三 数据安全管理要求和
  • cryptographic primitives(密码学原语 )

    hash commitment Pedersen承诺
  • 密码学技术在区块链系统中的应用

    密码学技术是区块链数据核心技术 P2P网络协议 共识机制 密码学技术 账户与存储模型 中核心的技术点 区块链主要用到的密码算法有哈希算法和加密算法 加密又包括对称性加密和非对称性加密两个概念 区块链系统里面一般常用到的是非对称加密 本文首先
  • 【0325】分组密码

    分组密码 体制概述 分组密码体制 Block cipher 是在密钥k控制下一次变换一个明文数据块 又称分组 的密码体制 特点 速度快 易于标准化和便于软硬件实现等特点 设计原则和评估 针对安全性的两个基本原则 扩散和混淆 对抗统计分析 扩
  • 【总结一】现代密码学

    目录 1 密码学概述 1 1 密码学的基本概念 1 1 1 为什么要学密码学 1 1 2 什么是密码学 1 1 2 密码算法的基本模型 1 1 3 密码算法的分类 1 2 密码分析学 1 3 古典密码算法 1 3 1 置换密码 1 3 2
  • 群G及群运算

    定义 一个 非空集合G中 如果定义了 一个 乘法 运算 元素的二元运算 满足以下四个性质 那么该非空集合G称为群 封闭性 a b G a b c G 结合律 a b c G a b c a b c 单位元 e G a G e a a e a
  • 27、HMAC

    HMAC产生背景 HMAC为什么会被提出来 是MAC的产生有什么缺陷么 HMAC规范的设计是由于存在对将密钥与hash函数相结合的更简单机制的攻击 换言之就是有些将密钥和hash函数结合使用产生MAC的算法容易被攻击 而这种生成消息认证码的
  • 6、RC4算法

    参考 https blog csdn net huangyimo article details 82970903 RC4算法 RC4算法变量 RC4算法流程 RC4算法相关 RC4算法 RC4加密算法是Ron Rivest在1987年设计
  • 揭秘区块链的核心技术之「哈希与加密算法 」

    大家都知道 区块链的关键技术组成主要为 P2P网络协议 共识机制 密码学技术 账户与存储模型 而这些技术中 又以 密码学与共识机制 这两点为最核心 那么今天我们来详细的聊一聊密码学 看一看密码学技术是如何在区块链中应用的 首先 我们需知道区
  • 一文读懂数据安全分级分类

    目录 为什么要分级分类 通用数据分级分类框架 数据分类 数据分类的常用方法 数据分类流程 数据分级 数据分级的常用方法 数据定级流程 行业数据安全分级分类指南 金融行业 电信行业 政务数据 健康医疗 企业实践 附录 数据分级分类大合集 为什
  • tracert命令返回的三个时间为什么有时会出现1个或2个星号?

    如图 三个时间里有1个或者2个显示星号 这是为什么呢 如果是配置了ACL丢弃了响应报文的话按理应该3个都显示星号呀 直接ping这个ip的话不会出现丢包 时延也很稳定 这个问题很诡异 演绎一下 仅供参考 首先traceroute 是利用 T
  • 用远见超越未见

    2022年是极不平凡的一年 外部的世界局势逐步恶化 内部的新冠疫情转段迈向新阶段 2022年也是伟大的一年 党的二十大胜利召开 党的二十大报告就 推进国家安全体系和能力现代化 坚决维护国家安全和社会稳定 作出专章部署 明确指出 国家安全是民
  • CISSP一次通过指南(文末附福利)

    2017年12月19日 在上海黄浦区汉口路亚洲大厦17层通过了CISSP认证考试 拖拉了一年 终于成绩还算令人满意 为攒人品将自己一年多的复习心得和大家分享 希望能够帮到需要考证的朋友 本文作者 i春秋签约作家 tinyfisher 欢迎与

随机推荐