使用damgard-jurik密码系统的阈值变量的同态加密。

damgard-jurik的Python项目详细描述


Damgard Jurik

Damgard-Jurik同态加密系统门限变量的一种实现。

目录

安装

需要Python3.6+。

pip install damgard-jurik

或者,代码可以克隆并在本地安装,如下所示。

git clone https://github.com/cryptovoting/damgard-jurik.git
cd damgard-jurik
pip install -e .

注意-e标志将指示pip将包安装为“可编辑”。也就是说,当在开发过程中对包的任何部分进行更改时,这些更改将立即在激活的python环境中在系统范围内可用。

此包的所有要求都应添加到setup.py

公钥和私钥

在这个存储库中实现的damgard jurik的阈值变体中,密钥对由单个公钥和使用Shamir's secret sharing拆分为多个组件的私钥组成。公钥对消息进行加密,而私钥的共享部分都参与解密,而无需重新构造私钥。因此,在私钥股份的持有人之间分配信任。

在这个实现中,公钥是带加密函数的PublicKey对象,而私钥共享是带解密函数的PrivateKeyShare对象,该解密函数使用私钥的共享部分执行解密。一个PrivateKeyRing对象持有一组PrivateKeyShares,并包含一个解密函数,该函数调用每个PrivateKeyShare的解密函数,并将结果合并以获得最终解密。

密钥生成

要生成PublicKey和相应的PrivateKeyRing,请运行以下命令:

fromdamgard_jurikimportkeygenpublic_key,private_key_ring=keygen(n_bits=64,s=1,threshold=3,n_shares=3)

keygen的参数如下:

  • n_bits:公钥和私钥共享中使用的加密位数。
  • s:公钥参数n被提升到的指数(其中n = p * q是两个n_bits-位素数pq的乘积)。明文是空间Z_n^s = {0, 1, ..., n^s - 1}中的整数。
  • threshold:解密加密消息所需的最小私钥共享数。
  • n_shares:要生成的私钥共享数。

加密和解密

加密和解密分别作为PublicKey类和PrivateKeyRing类的方法实现。

例如:

m=42c=public_key.encrypt(m)m_prime=private_key_ring.decrypt(c)# m_prime = 42

m这样的明文只是python整数,而像c这样的密文(加密明文)是EncryptedNumber类的实例。EncryptedNumber对象包含对明文的加密以及对用于加密明文的PublicKey的引用。

另外,PublicKeyPrivateKingRing类具有加密和解密整数列表的方便方法,如下所示。

m_list=[42,33,100]c_list=public_key.encrypt_list(m_list)m_prime_list=private_key_ring.decrypt_list(c_list)# m_prime_list = [42, 33, 100]

同态运算

由于damgard-jurik密码系统的附加同态性质,密文可以以这样的方式组合以获得相关明文之和的加密。此外,密文可以与未加密整数组合,以获得相关的明文和未加密整数的乘积。为了方便起见,EncryptedNumber类重写了+-*/运算符来实现这些操作。

例如:

m_1,m_2=42,33c_1,c_2=public_key.encrypt(m_1),public_key.encrypt(m_2)c=c_1+c_2m_prime=private_key_ring.decrypt(c)# m_prime = 75 = 42 + 33
m,s=42,2c=public_key.encrypt(m)c_prime=c*sm_prime=private_key_ring.decrypt(c_prime)# m_prime = 84 = 42 * 2

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要设置框架。可设置大小(false)以重新绘制()   java我对PDF文件感到困惑   为什么是太阳。jvm。热点。调试器。DebuggerException:无法打开二进制文件`?   设置结果为textview时出现java空指针异常   我应该使用什么同步原语在Java中实现事件驱动程序框架?   java为什么WindowClosing处理程序在退出程序之前不执行后台任务?   如何将“20170712T18:43:04.000Z”转换为安卓或java中的相对时间?   Java,获取按键的时间长度,currentTimeMillies()始终为24   maven构建的java可执行Jar找不到logback。xml   java在其外部的函数中使用for循环中的值   java如何以表格格式将不同长度的数据对齐   java Play 2.5 WebSocket连接构建   maven而非eclipse的java强制转换问题   java如何在JFreeChart中使X轴上的值水平?   构建Java Windows应用程序以访问在线MySQL数据库需要什么   java添加构造函数会出错吗?这没有道理,请帮忙,编程问题   java在一个jframe中的两个JPanel中使用两个绘制方法   java数学或逻辑问题   java如何复制Androids库存摄像头方向更改