以gmpy2实现的无证书签密方案

本文介绍了如何使用gmpy2在Python中实现无证书签密方案,包括系统建立、用户密钥生成、签密和解签密四个阶段。详细阐述了每个阶段的具体步骤,并提供了相关代码实现的参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:能来找gmpy2的使用肯定应该都知道它是干什么用的,有哪些功能,如果还不知道的,请出门找度娘先问一下,我这篇文章不适合你;要了解gmpy2更高深的用法的,请移步官方文档,这里我就简单介绍一下我用gmpy2实现的我的密码方案的一系列过程。

一、gmpy2安装

(安装好的大神请略过此节)
就安装而言,其实比较简单,优快云上有很好的解决方案,请自行查找,如果对于Linux不太熟的同学来说,还是老老实实的在Windows下做实验的比较好,至少不用去用那些麻烦的apt-get或是yum,反正我到现在还是用得不太溜。有精力的话还是试一下ubuntu下的使用,可以增长很多linux知识,也是不错的。
Windows下的话建议使用VSCode进行开发,我用的就是它。
Windows下有一个比较大的坑,大家都知道如果直接使用源代码是无法安装的,因为那些依赖包无法解决(gmp等),需要用到.whl文件的安装方式,但很多同学可能像我一样,一开始下载了最新版的python3.7或更高的版本,怎么安都安不上,提示错误。以 gmpy2-2.1.0a1-cp36-cp36m-win_amd64.whl为例,这个安装包只能安装在python3.6的环境下使用。

pip install 文件路径/gmpy2-2.1.0a1-cp36-cp36m-win_amd64.whl

二、gmpy2简介和学习感受

gmpy2的参考文件点这里
与gmpy2所基于的gmp大数库相比,gmpy2理解起来相对简单,这也跟python语言的特性有关,由gmpy2编写的代码更加简洁易读,对于懂技术但编程水平一般的人来说,再合适不过了。
本人是学信息安全的,本科时跟导师做毕业设计,实现BLS短签名,用的是pbc包,pbc用的好像是C或C++,首先,当时光是安装各种数据包(gmp,m4,pbc)就已经把我折磨坏了,当然,这也跟本人学艺不精有关。上研究生的时候,写论文都很少用到实验,现在想来,就是跟本科时的毕业设计留下的心理阴影有关。去年心血来潮,学了python,本来以为很难,但学了之后,也没有想像中的难,在实现我去年写的论文中的方案时,没有费多大力气就学会了。也跟当时的运气有关吧,在注册了github帐号后,无聊搜索研究生的一篇论文《基于Paillier公钥密码体制的签密方案》中涉及的Paillier方案时,搜索到了Paillier-gmpy2 [ 1 ] ^{[1]} [1],细看之后,这就是我想要的

三、无证书签密方案实现

以周彦伟等人于2016年发表的论文《不使用双线性映射的无证书签密方案的安全性分析及改进》 [ 2 ] ^{[2]} [2]为例,来看一下如何使用gmpy2来进行密码方案的实现。

(一)方案介绍

1.系统建立阶段( S e t u p Setup Setup
在系统初始化阶段,KGC进行如下操作:
1)输入安全参数 k k k,输出满足条件 q ∣ p − 1 q|p-1 qp1的两个大素数 p p p q q q(在计算机学报官网上下载的此处有一错误,原文为 p ∣ q − 1 p|q-1 pq1,不明白的请在此论文的文献中去看, p > q p>q p>q才是对的),取 g g g为群 Z p ∗ Z_p^* Zp中任意阶为 q q q的生成元;
2)定义抗碰撞的安全哈希函数: H 1 : { 0 , 1 } L 1 × Z p ∗ × Z p ∗ → Z q ∗ H_1:\{0,1\}^{L_1}\times Z_p^*\times Z_p^*\rightarrow Z_q^* H1:{ 0,1}L1×Zp×ZpZq H 2 : { 0 , 1 } L 1 × { 0 , 1 } L 2 × Z p ∗ → Z q ∗ H_2:\{0,1\}^{L_1}\times \{0,1\}^{L_2}\times Z_p^*\rightarrow Z_q^* H2:{ 0,1}L1×{ 0,1}L2×ZpZq H 3 : Z p ∗ → : { 0 , 1 } L 2 + ∣ Z q ∗ ∣ H_3: Z_p^*\rightarrow :\{0,1\}^{L_2+|Z_q^*|} H3:Zp:{ 0,1}L2+Zq H 2 : { 0 , 1 } L 1 × { 0 , 1 } L 2 × Z p ∗ × Z p ∗ → Z q ∗ H_2:\{0,1\}^{L_1}\times \{0,1\}^{L_2}\times Z_p^*\times Z_p^*\rightarrow Z_q^* H2:{ 0,1}L1×{ 0,1}L2×Zp×ZpZq,其中, L 1 L_1 L1为用户身份标识 I D ID ID的长度, L 2 L_2 L2为明文消息的长度, ∣ Z q ∗ ∣ |Z_q^*|

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值