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()函数里面有密钥生成,密文加法、密文乘法和密文刷新

问题:

各种报错,欢迎交流!

参考

1、dghv code运行笔记

DGHV同态库的更多相关文章

  1. HEAAN库学习

    本文主要学习HEAAN同态库,选择最老的一版:地址,最新版在:位置,HEAAN是CKKS17论文的主要代码复现. 版本 1.地址这是最老的一版,对应的论文CKKS17 2.在1的基础上,实现了boot ...

  2. SEAL库 - 安装和介绍

    本篇文章介绍:SEAL同态库的安装和简单使用 注:使用Clang++编译的Microsoft Seal比使用GNUG++编译的Microsoft Seal具有更好的运行时性能. 1. cmake:适应 ...

  3. Homomorphic Evaluation of the AES Circuit:解读

    之前看过一次,根本看不懂,现在隔这么久,再次阅读,希望有所收获! 论文版本:Homomorphic Evaluation of the AES Circuit(Updated Implementati ...

  4. 同态加密-Homomorphic encryption

    同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样.换言之,这项技术令人 ...

  5. Paillier同态加密的介绍以及c++实现

    我们先来简短认识一下Paillier同态加密算法: 如果就这么按照定义来用最简朴的c++程序写 就像这样: #include <iostream> #include <math.h& ...

  6. MAC上安装HEAAN库

    介绍 HEAN是一个软件库,它实现支持定点运算的同态加密(HE),此库支持有理数之间的近似运算.近似误差取决于某些参数,与浮点运算误差几乎相同.该库中的方案发表在"近似数算术的同态加密&qu ...

  7. Tenseal库

    在此记录Tenseal的学习笔记 介绍 在张量上进行同态计算的库,是对Seal的python版实现,给开发者提供简单的python接口,无需深究底层密码实现. 当前最新版本:3.11 位置:A lib ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)

    使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...

随机推荐

  1. 【Java基础】HashMap原理详解

    哈希表(hash table) 也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中Has ...

  2. MyBatis一对多映射简单查询案例(嵌套结果)

    一.案例描述 书本类别表和书本信息表,查询书本类别表中的某一记录,连带查询出所有该类别书本的信息. 二.数据库表格 书本类别表(booktypeid,booktypename) 书本信息表(booki ...

  3. 【Spark】【RDD】从本地文件系统创建RDD

    练习作业 完成任务从文件创建三个RDD(math bigdata student) cd ~ touch math touch bigdata touch student pwd 启动Spark-sh ...

  4. Nginx配置访问黑名单

    目录 一.简介 二.脚本 一.简介 有的时候需要将某些大访问量的ip加入到黑名单中 二.脚本 1.脚本内容为,检测本地并发访问超过15并且是ip地址,则加入nginx黑名单中.其中的53a是deny行 ...

  5. [BUUCTF]REVERSE——[V&N2020 公开赛]strangeCpp

    [V&N2020 公开赛]strangeCpp 附加 步骤 查壳,无壳,64位程序 64位ida载入,没有main函数,根据程序里的字符串,去查看函数 __int64 __fastcall s ...

  6. MVC三种分页方法

    View部分: @using WebApplication1.Models;分页方法1引包 @*@using PagedList.Mvc; @using WebApplication1.Models; ...

  7. IDEA快速创建一个简单的SpringBoot项目(需要联网)

    一.点击File-New-Project,选择Spring initializr ,选择jdk1.8及以上 二.填写相关信息,点击Next 3.选择Web -Spring Web,点击Next 4.输 ...

  8. Github访问加速(解决md图片显示问题)

    参考自知乎:https://zhuanlan.zhihu.com/p/107691233 基本步骤 查找域名对应IP https://www.ipaddress.com http://tool.chi ...

  9. VS c/c++常用配置项

    VS2015 下面的配置,Vs是通用的 自己常用VS2015, 但其默认的一些设置不能满足我的日常. 比较熟悉c/c++, 以下配置仅适用c/c++ 设置方法: 工具-选项-文本编辑器-c/c++ 常 ...

  10. windows10使用vscode+cmake编译c++代码

    概述 本文将介绍 VScode + cmake 在 windows10上编译c++代码 前提: 我之前已经安装过VS2017, 故 编译将采用cl.exe. 开始之前 本文演示环境基于 windows ...