pypbc的使用与一个密码方案的实现

本文介绍了pypbc的安装过程,包括在不同Linux系统中的注意事项,并概述了包的初始化和主要函数。接着,文章展示了如何利用pypbc实现一个基于对称双线性群的密码方案,包括模板加密、Bloom过滤器生成和查询等步骤,提供了部分代码以供理解。
摘要由CSDN通过智能技术生成

一、pypbc的安装

具体的安装过程可以见文章安装点这里。
讲一点自己的感受:安装其实比较简单,但对于不常使用linux的人来说,多少有一点困难,我是在deepin系统里安装的,但其实还是建议安装在ubuntu下;安装gmp、pbc等必须的依赖包的时候,可以先下载,再解压,然后运行什么./configure、make、make check、make install等相关操作,这个并不难,不过,我现在依然不是很熟练,慢慢来,总会安装好的。最近又试了一下在ubuntu下安装,好像是得输入sudo ldconfig才会安装成功。

二、包的相关情况

简单的使用可以参见github上的test.py文档。里面对于双线性对操作的几个函数如何使用演示的比较详细,耐心的一点,会看懂的。
可以进行如下操作,查看包的帮助信息,内容很全很多。

打开终端输入:python3
而后引入包:import pypbc
最后输入:help(pypbc)

在pypbc包中,有三种对象:Element,Pairing,Parameters。我们按照使用顺序来简单介绍一下。

1、初始化

首先,要对参数进行初始化,设定使用什么样的曲线,在pbc当中实现了好几种,有a.param,b.param……,在pbc里面,注意,不是在pypbc,是安装pbc的时候下载的pbc的包里面有一个param的文件夹,可以打开看看,就是一堆字母数字,都是格式化的东西。具体使用的时候有三种参数初始化的方式:

     |  Parameters(param_string=s) -> a set of parameters built according to s.
     |  Parameters(n=x, short=True/False) -> a type A1 or F curve.
     |  Parameters(qbits=q, rbits=r, short=True/False) -> type A or E curve.

这些参数如何设置,请参照pbc的使用文档,这对我来说有点难,不过并不妨碍使用。
例1:

#随机取两个256位的素数
q_1 = get_random_prime(256)
q_2 = get_random_prime(256)

#使用的是pbc中的a1_param参数,详见pbc_manul手册中的说明
params = Parameters( n = q_1 * q_2 )   

#实例化双线性对对象,也就是经常表示的e(a,b),先这么理解吧。
pairing = Pairing( params )

这就基本完成了初始化了。
例2:

#这里的内容就可以换成pbc中param文件夹下的几种曲线参数了,但是“”“是要保留的哦。
stored_params = """type a
q 8780710799663312522437781984754049815806883199414208211028653399266475630880222957078625179422662221423155858769582317459277713367317481324925129998224791
h 12016012264891146079388821366740534204802954401251311822919615131047207289359704531102844802183906537786776
r 730750818665451621361119245571504901405976559617
exp2 159
exp1 107
sign1 1
sign0 1
"""

params = Parameters(param_string=stored_params)	# type a
pairing = Pairing(params)

例3:

params = Parameters(qbits=512, rbits=160) # type a
pairing = Pairing(params)

2、函数介绍

初始化完成后,就可以做运算了,对我用到的几个函数或操作介绍一下。
先说一下,在上面提到了pypbc包的三个对象的两个,其实最重要的是Element,但大多数的操作也都与之相关,就放到这讲了;当然还有什么G1,G2,GT,Zr等相关知识,自行学习吧,我要实现的方案是基于对称的双线性群,所以并没有了解相关的非对称双线性群相关情况,也不多介绍。

#从G2中取一个随机数,并初始化一个元素,一般是取g的,也就是生成元。
g = Element.random( pairing, G2 )

#初始化一个GT元素
a = Element( pairing, GT )
#初始化一个G2元素
b = Element( pairing, G2 )
#初始化一个Zr元素
c = Element( pairing, Zr )
#初始化一个GT中的元素并置为1
Element.one( pairing, GT )
#初始化一个Zr中的元素并置为0
Element.zero( pairing, Zr )
#希望使用过程中元素的运算或赋值都使用这样的方式来进行,pairing是一定要写的,G2代表返回值的类型,
#value=就是值等于多少,也是一定要写的,G2中的元素做底数,Zr中的元素做指数,这个千万不能错。
#其实也能使用b = g ** c是同样的效果,但下面这样写更加工整,看着更明白,减少出错。
b = Element( pairing, G2, value = g ** c )   #b = g^c
注意,对运算就不能像上面那样了,得这样算,a = e(g,g)&#
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值