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)工具集合; 嗯,也挺棒的^,^ 在项目中 ...
随机推荐
- Centos 7 安装redis,修改配置文件不生效、外网不能访问。
前提: 在用Centos 7 安装 redis 时,遇上一下几个问题 ,记录下 . 1.修改配置文件,按官网步骤启动,不生效. 2.外网无法访问redis. 步骤: 1.打开centos 虚拟机 ,按 ...
- 【科研】科研【合同】盖章流程/横向·非涉密/电子科技大学
[前置手续] 一.在科研管理系统里填单子,立项. 二.科研管理系统审核通过后,对于对面给好的合同,在合同系统里选择[合同业务发起-发起非标准合同],填单子. 三.会有一系列的审核,审核完成后打印合同备 ...
- 莫烦python教程学习笔记——保存模型、加载模型的两种方法
# View more python tutorials on my Youtube and Youku channel!!! # Youtube video tutorial: https://ww ...
- ThreadLocal的使用方法
ThreadLocal的使用方法 (2011-10-10 22:05:48) 转载▼ 概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个 ...
- GraphQL 到底有什么魔力?
时间退回到 2012年的一个下午, 美国加利福尼亚州, facebook 的工程师们发现他们才上架没多久的移动端应用就收到了很多差评, 用户反映app响应慢,耗电严重等,经过分析后发现, 应用在第一次 ...
- 韩顺平Java(持续更新中)
原创上课笔记,转载请注明出处 第一章 面向对象编程(中级部分) PDF为主 1.1 IDEA 删除当前行,ctrl+y 复制当前行,ctrl+d 补全代码,alt+/ 添加或者取消注释,ctrl+/ ...
- 对QuerySet的理解
1. 如何通过Django的Model操作数据库? 在Django的Model中,QuerySet是一个很重要的概念.因为我们同数据库的所有查询以及更新交互都是通过它来完成的. 2. Django的M ...
- CF1443A Kids Seating 题解
Content 有 \(t\) 组询问,每组询问给定一个数 \(n\),试构造出一个长度为 \(n\) 的数列 \(\{a_i\}_{i=1}^n\),使得: \(\forall i\in[1,n], ...
- redis hash操作 list列表操作
HSET key 子key 子value 192.168.11.5:6379> HSET stu1 name 'zhangmingda'(integer) 1192.168.11.5:6379& ...
- Xshell连接Ubuntu服务器连接不上 显示拒绝了密码
确保下方两个都安装了 sudo apt-get install openssh-server sudo apt-get install ssh 修改 vim /etc/ssh/sshd_config ...