charm-crypto 安装

一、安装环境

  • ubuntu 16.04
  • python 3.4.3
  • pip3 6.0.8

二、安装步骤

2.1 首先安装部分所需组件

  • m4、flex、bison组件
sudo apt-get install m4
sudo apt-get install flex
sudo apt-get install bison
  • python安装相关组件
pip3 install setuptools
pip3 install distribute==0.7.3
pip3 install pyparsing==1.5.6

2.2 安装gmp

  • 下载地址:https://ftp.gnu.org/gnu/gmp/
  • 解压后执行如下命令
./configure --enable-cxx
sudo make
sudo make check
sudo make install

2.3 安装pbc

  • 下载地址:https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz
  • 解压后执行如下命令
./configure
sudo make
sudo make check
sudo make install

2.3 安装Charm

  • 下载地址:https://github.com/JHUISI/charm/releases/download/v0.43/Charm-Crypto-0.43_Python3.tar.gz
  • 将压缩包解压后对setup.py文件修改
    • 将第二行进行注释

      • #use_setuptools() #bootstrap installs Distribute if not installed
  • 之后操作如下:
./configure
sudo make
sudo make check
sudo make install
  • 如果make check报错没关系继续运行make install

三、修改libpbc链接库

  • 修改/etc/ld.so.conf添加libpbc.so.1路径

    • 路径查看如下:find / -name libpbc.so.1

四、测试

  • 测试代码
from charm.toolbox.pairinggroup import PairingGroup, ZR, G1, G2, GT, pair
from charm.toolbox.secretutil import SecretUtil
from charm.toolbox.ABEnc import ABEnc, Input, Output# type annotations
pk_t = {'g': G1, 'g2': G2, 'h': G1, 'f': G1, 'e_gg_alpha': GT}
mk_t = {'beta': ZR, 'g2_alpha': G2}
sk_t = {'D': G2, 'Dj': G2, 'Djp': G1, 'S': str}
ct_t = {'C_tilde': GT, 'C': G1, 'Cy': G1, 'Cyp': G2}debug = Falseclass CPabe_BSW07(ABEnc):""">>> from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair>>> group = PairingGroup('SS512')>>> cpabe = CPabe_BSW07(group)>>> msg = group.random(GT)>>> attributes = ['ONE', 'TWO', 'THREE']>>> access_policy = '((four or three) and (three or one))'>>> (master_public_key, master_key) = cpabe.setup()>>> secret_key = cpabe.keygen(master_public_key, master_key, attributes)>>> cipher_text = cpabe.encrypt(master_public_key, msg, access_policy)>>> decrypted_msg = cpabe.decrypt(master_public_key, secret_key, cipher_text)>>> msg == decrypted_msgTrue"""def __init__(self, groupObj):ABEnc.__init__(self)global util, grouputil = SecretUtil(groupObj, verbose=False)group = groupObj@Output(pk_t, mk_t)def setup(self):g, gp = group.random(G1), group.random(G2)alpha, beta = group.random(ZR), group.random(ZR)# initialize pre-processing for generatorsg.initPP();gp.initPP()h = g ** beta;f = g ** ~betae_gg_alpha = pair(g, gp ** alpha)pk = {'g': g, 'g2': gp, 'h': h, 'f': f, 'e_gg_alpha': e_gg_alpha}mk = {'beta': beta, 'g2_alpha': gp ** alpha}return (pk, mk)@Input(pk_t, mk_t, [str])@Output(sk_t)def keygen(self, pk, mk, S):r = group.random()g_r = (pk['g2'] ** r)D = (mk['g2_alpha'] * g_r) ** (1 / mk['beta'])D_j, D_j_pr = {}, {}for j in S:r_j = group.random()D_j[j] = g_r * (group.hash(j, G2) ** r_j)D_j_pr[j] = pk['g'] ** r_jreturn {'D': D, 'Dj': D_j, 'Djp': D_j_pr, 'S': S}@Input(pk_t, GT, str)@Output(ct_t)def encrypt(self, pk, M, policy_str):policy = util.createPolicy(policy_str)a_list = util.getAttributeList(policy)s = group.random(ZR)shares = util.calculateSharesDict(s, policy)C = pk['h'] ** sC_y, C_y_pr = {}, {}for i in shares.keys():j = util.strip_index(i)C_y[i] = pk['g'] ** shares[i]C_y_pr[i] = group.hash(j, G2) ** shares[i]return {'C_tilde': (pk['e_gg_alpha'] ** s) * M,'C': C, 'Cy': C_y, 'Cyp': C_y_pr, 'policy': policy_str, 'attributes': a_list}@Input(pk_t, sk_t, ct_t)@Output(GT)def decrypt(self, pk, sk, ct):policy = util.createPolicy(ct['policy'])pruned_list = util.prune(policy, sk['S'])if pruned_list == False:return Falsez = util.getCoefficients(policy)A = 1for i in pruned_list:j = i.getAttributeAndIndex();k = i.getAttribute()A *= (pair(ct['Cy'][j], sk['Dj'][k]) / pair(sk['Djp'][k], ct['Cyp'][j])) ** z[j]return ct['C_tilde'] / (pair(ct['C'], sk['D']) / A)def main():groupObj = PairingGroup('SS512')cpabe = CPabe_BSW07(groupObj)attrs = ['ONE', 'TWO', 'THREE']access_policy = '((four or three) and (three or one))'if debug:print("Attributes =>", attrs);print("Policy =>", access_policy)(pk, mk) = cpabe.setup()sk = cpabe.keygen(pk, mk, attrs)print("sk :=>", sk)rand_msg = groupObj.random(GT)if debug: print("msg =>", rand_msg)ct = cpabe.encrypt(pk, rand_msg, access_policy)if debug: print("\n\nCiphertext...\n")groupObj.debug(ct)rec_msg = cpabe.decrypt(pk, sk, ct)if debug: print("\n\nDecrypt...\n")if debug: print("Rec msg =>", rec_msg)assert rand_msg == rec_msg, "FAILED Decryption: message is incorrect"if debug: print("Successful Decryption!!!")if __name__ == "__main__":debug = Truemain()
  • 结果

参考

  • https://blog.csdn.net/qq_37272891/article/details/99631319
  • https://blog.csdn.net/thereblue/article/details/107854261

ubuntu系统安装charm-crypto相关推荐

  1. Ubuntu 系统安装OpenJDK 7,openjdk8

    Ubuntu 系统安装openjdk7 ,openjdk8 1 更新软件包:sudo apt-get update (这一步不执行也行) 2 安装 : sudo apt-get install ope ...

  2. ubuntu系统安装mysql(deb-bundle包)

    ubuntu系统安装mysql(deb-bundle包) 由于某些原因,又要在ubuntu系统中安装mysql了,之前曾经安装过好多次.都没记下来 以前一直动用源码包来安装,基于两个原因:1.一直用P ...

  3. 【以太坊】搭建测试网络之ubuntu系统安装geth客户端以及同步区块数据

    一.前言 在前两天就开始研究这个geth客户端,奈何中间一直遇到各种各样的问题,最后总算是成功在服务器上安装geth并开始同步区块了.这里记录一下过程. 1.虚拟机配置问题 博主最开始用的是虚拟机,但 ...

  4. Ubuntu系统安装Hadoop3.1.3并进行单机/伪分布式配置

    Ubuntu系统安装Hadoop3.1.3并进行单机/伪分布式配置 文章目录 Ubuntu系统安装Hadoop3.1.3并进行单机/伪分布式配置 前言 详细流程 创建Hadoop用户 安装Java 配 ...

  5. Ubuntu系统安装

    Ubuntu系统安装 从官网下载ubuntu系统安装: http://www.ubuntu.org.cn/download/ubuntu-kylin 可与windows安装双系统 若开机时无法提供双系 ...

  6. Ubuntu系统安装Ruby的三种方法

    Ubuntu系统安装Ruby的三种方法 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Ruby是一个开源的动态编程语言,它有优美的语法,可用于构建可伸缩 ...

  7. 五.开发记录之ubuntu系统安装各个软件

    专栏系列文章如下: 一.开发记录之AHRS.惯导传感器SBG-Ellipse-N传感器配置和使用_goldqiu的博客-CSDN博客_sbg传感器数据格式 二.开发记录之派勤工控机远程使用和ubunt ...

  8. 新买的服务器怎么安装Linux,买了新服务器,如何从头开始配置?Ubuntu系统安装+新建用户名+挂...

    买了新服务器,如何从头开始配置?Ubuntu系统安装+新建用户名+挂 买了新服务器,如何从头开始配置?Ubuntu系统安装+新建用户名+挂载硬盘+nvidia安装+cuda安装+cudnn安装+ana ...

  9. 英文Ubuntu系统安装中文支持,中文UTF-8

    英文Ubuntu系统安装中文支持,中文UTF-8 第一步,安装中文包: sudo apt-get install language-pack-zh* 第二步,配置相关环境变量: sudo vim /e ...

  10. ubuntu系统安装好搜狗输入法后只能输入英文,无法输入中文的解决方案

    写在前面 自己的电脑环境:Ubuntu20.04.5 一.问题描述 自己通过搜狗输入法官网下载deb安装包,然后按照如下指令安装搜狗输入法之后 sudo dpkg -i sogoupinyin_4.0 ...

最新文章

  1. Flutter开发之WebView加载网页(24)
  2. Oracle Spatial 翻译第一漳
  3. Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站
  4. 【数理统计】基础理论归纳
  5. 前端如何实现网络速度测试功能_前端组件单元测试
  6. 【LeetCode】15.Longest Common Prefix
  7. iOS8跳转到系统设置页
  8. 【转】js字符串转换成数字
  9. day41 - 异步IO、协程
  10. java new对象的创建过程
  11. mysql慢查询监控及sql优化
  12. 文本文件和二进制文件的差异和区别
  13. C++ RapidXml快速入门
  14. 计算机管理工具怎么设置,电脑音频管理器怎么设置,教你电脑音频管理器怎么设置...
  15. 英语单词记忆原理及方法 - 超全思维导图梳理
  16. 格兰蒂亚3 详细剧情攻略
  17. 工业机器人工具中心点标定的意义_如何理解工业机器人的工具中心点(TCP)?...
  18. 个人看过的动漫、动画电影推荐
  19. Python基础了解 python自带IDLE编译
  20. 饭后开车的不良习惯要改正

热门文章

  1. 介绍几款在线传输网站
  2. 银河麒麟高级服务器操作系统V10——LVM创建与使用
  3. 解析html网页脆炸鸡,脆皮炸鸡别再买了, 用这个方法做, 肉嫩入味, 脆鳞片片, 零失败!...
  4. JavaWeb(11) 快速爬取别人的网站页面(Ctrl+A,Ctrl+C,Ctrl+V一分钟搞定)
  5. 无法识别的USB设备
  6. 让C盘更加安全——电脑设置硬盘保护(转)
  7. 关于Ubuntu command-not-found是如何实现的研究
  8. Arcgis api for Javascript中多图层查询(上)
  9. 机器视觉齿轮磨损视觉检测系统
  10. UML相关箭头图的理解