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密码系统 的相关文章

  • 「一体化信息建设」,江苏人社如何完成数据安全管控(建设篇)

    2019 年 江苏省人社厅正式启动全省人社一体化信息平台建设项目 省人社一体化信息平台基于全省统一的人社业务标准 规范 流程和数据体系 以群众需求为导向 以省集中建设为重点 以云平台架构为基础 采用人社部 LEAF6 2 中台架构 目标建设
  • 密码学之公钥密码体系(2):RSA算法

    密码学之公钥密码体系 2 RSA算法 文章目录 一 RSA算法背景 二 RSA算法描述 三 RSA的硬件实现 四 RSA的安全性 五 对RSA的选择密文攻击 一 RSA算法背景 上一讲介绍了公钥密码体系中的背包算法 在Merkle背包算法出
  • 【现代密码学原理】——密钥管理和其他公钥密码体制(学习笔记)

    前言 本章首先介绍最早 最简单的PKCS Diffe Hellman密钥交换 然后介绍另一个重要方案 EIGamal PKCS 目录 0 思维导图 1 Diffie Hellman密钥交换 1 1 本原根 primitive root 1
  • kali 破解压缩包密码

    一 提取加密压缩包的哈希值 zip2john 文件名 gt hash txt zip2john 文件名 能提取出文件的哈希值 然后我们通过重定向 将它写入一个文档中 二 利用工具对提取到的哈希值进行破解 john hash txt 然后就能
  • 网络安全与密码学

    1 网络安全威胁 破坏网络安全的一些理论方式 窃听 窃听信息 在网路通信双方直接进行窃听 插入 主动在网络连接中插入信息 可以在message中插入恶意信息 假冒 伪造 spoof 分组中的源地址 假冒客户端或服务器 劫持 通过移除 取代发
  • 北大肖臻老师<<区块链技术>>笔记1

    课程的大纲 密码学基础 比特币的数据结构 共识协议和系统实现 挖矿算法和难度调整 比特币的脚本 软分叉和硬分叉 匿名和隐私保护 以太坊是后面的 首先是密码学基础的学习 crypto currency 虚拟货币 是不加密的 区块链上所有的教以
  • AES加密算法详解(图文解释)

    由于DES加密算法被破解了 3DES加密算法虽然没有被破解 但是3DES算法的加解密效率低 所有现在都使用AES算法 AES加密算法是密码学中的高级加密标准 AES为分组加密法 把明文分成一组一组的 每组长度相等 每次加密一组数据 直到加密
  • 现代密码学第三次实验:不对称加密算法RSA

    现代密码学第三次实验 不对称加密算法RSA 前言 一 实验目的 二 实验环境 三 实验步骤 四 实验基本方法 五 实验程序清单 七 实验结果 八 实验总结 前言 为了帮助同学们完成痛苦的实验课程设计 本作者将其作出的实验结果及代码贴至CSD
  • 【总结一】现代密码学

    目录 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
  • 数据安全风险分析及应对策略研究

    报告从理论与实践层面对当前企业面临的内外部数据安全风险进行分析与研究 完成了以下几方面的探索 一是梳理了当前数据安全面临的突出问题 二是提出了数据安全体系建设的行动思路和关键举措 三是提出了数据安全建设发展建议 关注公众号 互联互通社区 回
  • 人民日报:密码,让百姓生活更安全

    密码技术是保障网络与信息安全的核心技术和基础支撑 通过加密保护和安全认证两大核心功能 可以完整实现防假冒 防泄密 防篡改 抗抵赖等安全需求 在网络空间中扮演着 信使 卫士 和 基因 的重要角色 信息化 网络化 数字化高度发达的今天 密码技术
  • 密码学研究重点

    密码学涵盖了认证 数字签名以及更多基本的安全功能 密码学涉及领域及其宽广 包括计算机安全 高等数学 经济学 量子物理学 民法和刑法 统计学 芯片设计 软件优化 政治 用户界面设计等 0x01 密码学重要性 密码学本身没有价值 必须作为一个系
  • 【C++】crypto++加密库简单使用

    crypto 加密库简单使用 目录 crypto 密码学库简单使用 一 简介 二 配置 三 使用示例 1 CRC32校验 2 Base64编码 3 Blake2b 4 AES 5 RSA 一 简介 crypto 是一个免费开源 公共领域 的
  • 随着新技术的产生以及计算机运算速度的不断提高,传统的加密技术已无法满足应用的需求,请问目前新的密码技术有哪些?并简要分析。

    目前新的密码技术包括 1 基于量子力学的密码技术 Quantum cryptography 该技术是利用量子力学原理来保护信息安全 主要应用于信息传输领域 其基本原理是通过量子态来实现信息的加密和解密 从而保证传输过程中不会被窃听或篡改 2
  • 现代密码学-密码学概论与基本知识

    目录 简介 密码学发展简史 创建 发展阶段 古典密码时期 近代密码时期 现代密码时期 密码主要功能 机密性 完整性 认证性 不可否认性 密码系统的组成 密码分析学 定义 密码攻击类型 针对对称密码体制 针对对称密码体制 常用方法 密码体制的
  • 合肥工业大学密码学课设-RSA

    作者简介 CSDN内容合伙人 信息安全专业在校大学生 系列专栏 课设 密码学课设 RSA 新人博主 欢迎点赞收藏关注 会回访 舞台再大 你不上台 永远是个观众 平台再好 你不参与 永远是局外人 能力再大 你不行动 只能看别人成功 没有人会关
  • 密码学原语如何应用?解析密文同态性的妙用

    隐私数据在密文形式下是否依旧可以加减乘除 其背后的同态性原理具体指什么 半同态性和全同态性有什么区别 单密钥和多密钥同态加密有哪些奇妙的应用场景 隐私保护方案设计 往往需要在密文状态下 对隐私数据进行特定的业务操作 以此保障数据的机密性 沿
  • CISSP一次通过指南(文末附福利)

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

    在当今数字化时代 企业对信息技术的依赖程度不断加深 而电力作为支撑一切运行的基础 显得尤为重要 随着电力网络的不断演变和企业规模的扩大 UPS监控不仅仅是对电力设备的监测 更是一项战略性的管理工具 有助于预防潜在的电力故障 提高系统的可靠性
  • 有趣的数学 为什么素数在密码学中很重要?

    这里我们将探讨为什么素数在密码学中很重要 我们将根据特定的密码系统 RSA 算法 来进行深入了解 一 素数的特殊性 每个数字都可以分解为它的素数 一般来说 找到一个数的因数是非常困难的 要找到一个自然数的所有素因数 必须尝试将其除以它的可能

随机推荐