DGHV同态库
DGHV
DGHV全同态方案的实现
这是具有压缩公钥的DGHV的全同态加密方案的实现,参考文章:
[1] J.S. Coron, D. Naccache and M. Tibouchi, "Public-key Compression and Modulus Switching for Fully Homomorphic Encryption over the Integers", Proceedings of Eurocrypt 2012.available at http://eprint.iacr.org/2011/440
实现依靠数学库Sage,具体参考:数学库Sage安装和使用
什么是DGHV方案?
最初在下面的文章中给出:
[2] M. van Dijk, C. Gentry, S. Halevi and V. Vaikuntanathan, "FullyHomomorphic Encryption over the Integers". Proceedings of Eurocrypt 2010.and available at http://eprint.iacr.org/2009/616
加密:c= q*p + 2*r + m
这里p是密钥,m是比特明文(0或1),q是一个大随机数,r是一个小随机数
解密:m=(c mod p) mod 2,容易看出,若噪音2*r < p,则可以解密成功
例如:
给定两个密文:
c1= q1*p + 2*r1 + m1
c2= q2*p + 2*r2 + m2
加法:c1+c2=(q1+q2)*p+2*(r1+r2)+m1+m2
可以得到:m1+m2=( c1+c2)mod p mod 2
乘法:c1*c2=q12*p+2*(2*r1*r2+r1*m2+r2*m1)+m1*m2
也可以得到:m1*m2=( c1*c2)mod p mod 2
这里,密文的噪音比原始密文c1和c2扩大了两倍,由于噪声必须低于p,
因此在密文上进行的乘法次数是有限的,所以方案叫做 Somewhat FHE
为了获得“纯”的FHE,即密文的无限次加法和乘法,必须减少密文中的噪音量,叫做密文刷新。
Gentry的密文刷新的关键思想,是使用密钥位的加密对密文位上的解密电路进行同态计算,这叫做Bootstrapping技术,然而我们得到的不是明文位,而是明文位的加密,即相同明文的新密文,现在若解密电路有足够小的深度,那么新密文中的噪音量实际上小于原始明文中的噪音量,因此叫做密文刷新。
然而,之前的解密算法m=(c mod p) mod 2的深度并不小,因此解密过程必须被“压缩”,以便可以将其表示为低深度电路,在[2]中解释了是如何完成的。
到目前为止,我们只描述了一个私钥加密方案,即加密者必须知道私钥p,然而很容易获得公钥加密方案。为此生成一组公开密文xi,它们都是0的不同的加密,xi=qi*p+2*ri,然后加密1bit的m,c=m+2*r+random_subset_sum(xi),
c确实是m的加密。
在该库中,我们实现了DGHV的同态加密,即实现了密钥生成,加解密,同态加,同态乘和密文刷新
什么是压缩公钥?
在DGHV算法中我,密文大小必须是很大的,以防止格基约减算法,密文大小至少为10^7 bits,密钥p相对较小,大概为2000bit,大约10^4的密文必须包含在公钥中,所以我们给出公钥的的大小为10^11 bits,即12.5GB
为了减少公钥的大小,我们实现了[1]的技术,而不是生成 xi=qi*p+2*ri ,第一生成相同尺寸的伪随机数X,计算di,使得 xi=Xi-di是小的,模p,那么只有这些小的正确的值被存储在公钥中,(带有PRNG的种子),使用
这种压缩技术,可以减少公钥大小变为 10^4*(2*10^3)=2*10^7 bits,即2.5MB,这是可以接受的。
下载
git clone 地址
安装
1、安装sage库
具体参考:数学库Sage安装和使用
2、运行sage
./sage
load("dghv.sage")
testPkRecrypt()函数里面有密钥生成,密文加法、密文乘法和密文刷新
问题:


各种报错,欢迎交流!
参考
DGHV同态库的更多相关文章
- HEAAN库学习
本文主要学习HEAAN同态库,选择最老的一版:地址,最新版在:位置,HEAAN是CKKS17论文的主要代码复现. 版本 1.地址这是最老的一版,对应的论文CKKS17 2.在1的基础上,实现了boot ...
- SEAL库 - 安装和介绍
本篇文章介绍:SEAL同态库的安装和简单使用 注:使用Clang++编译的Microsoft Seal比使用GNUG++编译的Microsoft Seal具有更好的运行时性能. 1. cmake:适应 ...
- Homomorphic Evaluation of the AES Circuit:解读
之前看过一次,根本看不懂,现在隔这么久,再次阅读,希望有所收获! 论文版本:Homomorphic Evaluation of the AES Circuit(Updated Implementati ...
- 同态加密-Homomorphic encryption
同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样.换言之,这项技术令人 ...
- Paillier同态加密的介绍以及c++实现
我们先来简短认识一下Paillier同态加密算法: 如果就这么按照定义来用最简朴的c++程序写 就像这样: #include <iostream> #include <math.h& ...
- MAC上安装HEAAN库
介绍 HEAN是一个软件库,它实现支持定点运算的同态加密(HE),此库支持有理数之间的近似运算.近似误差取决于某些参数,与浮点运算误差几乎相同.该库中的方案发表在"近似数算术的同态加密&qu ...
- Tenseal库
在此记录Tenseal的学习笔记 介绍 在张量上进行同态计算的库,是对Seal的python版实现,给开发者提供简单的python接口,无需深究底层密码实现. 当前最新版本:3.11 位置:A lib ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)
使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...
随机推荐
- jquery总结和注意事项
1.关于页面元素的引用通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom ...
- UNIX基本命令
### 1. 必学命令 help [子命令] : 查看某一个具体的子命令的使用方法### 2. 常用命令 - cd path : 将当前路径切换到path路径 - pwd : 查看当前所在路径 - l ...
- navicat突然连接不上远程linux服务器上的mysql
我linux服务器上的mysql是docker安装的,突然有一天我的navicat连接不上服务器上的mysql,于是开始了下面一系列的修复 1.首先登录服务器上mysql,看是否能正常登录,我发现不能 ...
- 【编程思想】【设计模式】【创建模式creational】lazy_evaluation
Python版 https://github.com/faif/python-patterns/blob/master/creational/lazy_evaluation.py #!/usr/bin ...
- 【Services】【Web】【tomcat】配置tomcat支持https传输
1. 基础: 1.1. 描述:内网的tomcat接到外网nginx转发过来的请求之后需要和外网的客户端进行通讯,为了保证通讯内容的安装,使用tomcat使用https协议. 1.2. 链接:http: ...
- 【Java】面向类与对象
一.面向对象 对象封装:私有变量+公共方法 方法与构造方法 this变量 Animal.java public class Animal { String name; int age; void mo ...
- Sentinel之流控规则
在上文Sentinel流量防卫兵中讲到了Sentinel入门以及流控规则一小部分,而Sentinel还有以下规则: 熔断降级规则 热点参数规则 系统规则 黑白名单规则 本文要讲的是流控规则 流量控制规 ...
- 攻击科普:ARP攻击
目录 一.介绍 二.解决办法 一.介绍 ARP攻击的局限性 ARP攻击仅能在以太网(局域网如:机房.内网.公司网络等)进行. 无法对外网(互联网.非本区域内的局域网)进行攻击. ARP攻击就是通过伪造 ...
- 材料资源和成本资源(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 第二种资源就是[材料资源]啦~ 拿到资源第一件事就是输入基本信息,这个,不复读了,复读得我自己都嫌烦.好吧,还得说明一下, ...
- AtCoder Beginner Contest 169 题解
AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...