在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持。

1、同态加密概述

同态加密改变了隐私保护的游戏规则,它允许直接操作加密数据而无需先进行解密。这一概念可以追溯到RSA加密 —— RSA也具备有限的同态加密功能。不过同态加密很长时间都局限在学术界,直到2009年Craig Gentry的论文发表后,才涌现了大量的同态加密库。

现在已经有很多可用的同态加密库了。下面列出了一些比较流行的同态加密开发包以及它们支持的方案类型,当然这个清单是不完整的:

Microsoft SEAL: BFV, CKKS (C++)

HElib: BGV (with GHS), CKKS (C++)

PALISADE: BFV, BGV, CKKS, FHEW (C++)

TFHE: Ring-variant of GSW (C++)

HEAAN: CKKS (with bootstrapping) (C++)

为你的web'应用找到合适的同态加密开发包以及方案类型需要进行大量的研究工作:

这些不同的同态加密实现代码有什么区别?

安装这些同态加密开发包需要什么依赖?

我如何在自己的web应用中使用同态加密库?

一个加密方案对性能有什么影响?

这个加密方案对数据有什么特殊的要求?

什么是自举?为什么我需要这个环节?

在你开始设计一个隐私保护的应用之前,有些问题就需要先找出答案。

在这个教程里,让我们从微软的SEAL开始介绍,因为SEAL的文档非常好。

2、使用Microsfot SEAL同态加密库

让我们先看看如何加密数据。首先你可以将一个数组(或者c++里的vector)编码为特定格式的平文本,然后再将平文本加密成密文。同态处理是在密文上进行的。为了读取处理结果,你需要解密然后再解码。

上述过程的伪代码如下:

const arr = [1,2,3...]

const plain = encode(arr)

const cipher = encrypt(plain)

// Add the cipher to itself - element wise

evaluate.add(cipher, cipher)

const decrypted = decrypt(cipher)

const decoded = decode(decrypted)

// `decoded` contains [2,4,6, ...]

上面的代码我进行了简化,实际上这之前还有一些必要的步骤。

下面是SEAL同态加密库的一些基本信息。

第三方依赖

SEAL没有必须的第三方依赖。可选的依赖包括:zlib和Microsoft GSL

支持的方案

BFV:操作有符号/无符号整数

CKKS:操作浮点数

基本的差别和限制

BFV:密文的数据容量由加密参数决定,数组中每个元素的上下界也是参数决定的

CKKS:数组中的每个成员的取值范围更大,但是密文容量相比BFV减半。而且CKKS 只能进行近似计算

自举(Bootstrapping)允许在加密数据上进行无限的同态处理。没有自举的话,只能执行有限次数的 同态处理(例如乘法等)。目前SEAL同态加密库还不支持自举,但是已经有计划为CKKS方案添加自举支持。自举会对性能有很大的影响,在很多情况下你在使用同态算法时都不需要自举。

没有自举的同态算法被称为层级化算法。分层的数量(也就是可以执行多少次同态处理)是由你选择的加密参数来决定的。

3、选择同态加密方案

第一步是为你的应用选择一个合适的同态加密方案。你是需要整数还是可以容忍一定的误差?当你需要绝对精度时应该使用BFV方案。CKKS有它的优势,但是会在解密时引入一定的误差 —— 虽然通过调整参数可以让误差减小到可以接受的范围,但是对于新手来说这是有难度的。

4、选择合适的同态加密参数

一旦你选好了同态加密方案,下面就需要确定算法的参数了。这个问题应该是最难回答的,因为它取决于很多因素。此外还有更多的问题,例如:

如何测试那些参数有效?

是否还有优化的空间?

是否需要为每一组参数都构建一个新的测试应用?

下面是我们的同态加密实用方法学:

选择同态加密方案:我认为BFV要比CKKS更容易商收。至少当解密结果不正确时 你可以立刻判断有问题

从128位加密层级开始:虽然有更高的可选项,但是代价是缩减的同态加密操作- 能工作就好:从一个中等层级的PolyModulusDegree (4096)开始,然后逐渐增加 直到不能成功解密。再反向逐渐减小至不能成功解密。用这样的办法得到上下界。

细调:修改CoeffModulus的位数,使用模数转换或CKKS的重缩放。

5、使用Node-Seal为web应用增加同态加密支持

作为替代的方案,我建议你通过快速实验来找出适合你的应用的参数。为此我开发了一个开源软件node-seal,以便在JavaScript中实用SEAL同态加密库。你可以利用这个软件快速编写一个JavaScript测试应用来进行参数实验。node-seal的内核采用webassembly,可以运行在Node.js或现代浏览器中,已经包含了zlib支持,不需要进行本地编译。

bfv同态加密_同态加密入门教程相关推荐

  1. bfv同态加密_同态加密简明教程

    在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持. 1.同态加密概述 同态加密改变了隐私保护的游戏规则,它允 ...

  2. bfv同态加密_同态加密综述

    目前大部分内容翻译自维基百科, 后续会根据调研情况不断丰富. 基本概念 同态加密(Homomorphic encryption) 是一种可以支持在密文上进行计算的加密方式, 对在密文上计算得到的结果进 ...

  3. 函数加密_同态加密__密码学课堂笔记

    背景 对称.公钥加密算法解密密文,得到的是明文的全部信息.但是我们希望能够对密文的访问附加特殊的要求,使访问者只得到明文的一个函数值,而不会泄露明文. FE的核心要求:对明文的灵活访问 FE密钥:基于 ...

  4. mysql怎么滤空_《MySQL 入门教程》第 08 篇 过滤条件

    文章来源:<MySQL 入门教程>第 08 篇 过滤条件 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们学习了如何使用 SELECT 和 FROM 查询表中的数据.很多时候 ...

  5. 32位mysql安装包_《MySQL 入门教程》第 02 篇 MySQL 安装

    文章来源:<MySQL 入门教程>第 02 篇 MySQL 安装 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们了解了什么是MySQL数据库. 本文介绍如何在 Window ...

  6. 实习二 分组密码加密_分组密码加密模式

    在分组密码中,一般所选用的密码算法都是公开的,加密过程中,只有密钥是保密的.一旦密钥固定,那么可以将加解密过程视为一个映射,例如AES算法,每加密一次,就可以视为128bit到128bit的数据映射. ...

  7. css中的单位换算_金蝶ERP入门教程:动态换算率及辅助计量单位的应用

    金蝶ERP入门教程:动态换算率及辅助计量单位的应用 关注我,我将定期分享更多的ERP解决方案 如果您喜欢且觉得内容有用,请点击分享转发 如果你有什么关于ERP系统的问题和疑问,可私信联系我 大家好,我 ...

  8. api接口加密_接口加密如何测试?

    摘要算法: 对明文编码生成信息摘要,以防止被篡改.比如MD5使用的是Hash算法,无论多长的输入,MD5都会输出长度为128bits的一个串. 摘要算法不要秘钥,客户端和服务端采用相同的摘要算法即可针 ...

  9. java ecb加密_各加密模式的演示(ECB,CBC) .

    对于较长的明文进行加密需要进行分块加密,但是直接加密(ecb)不容易隐藏模式,用OpenCV写了个程序论证了一下 ECB 优点就是简单,可以并行计算,不会迭代误差 缺点就是隐藏不了模式 CBC 需要初 ...

最新文章

  1. php输出报错Message: Array to string conversion
  2. Laravel php artisan optimize 源码解读
  3. 移动端picker插件
  4. python 消息队列 sqlite_sqlite 数据存储 消息队列
  5. SQL语法(1、安装操作)
  6. Linux DMA Engine framework(3)_dma controller驱动
  7. 【修正】Q93:PLY文件对应图形法向量反向问题——以bunny10K为例
  8. camshift算法的应用
  9. [转]制作一个64M的U盘启动盘(mini linux + winpe +dos toolbox)
  10. 基于自适应惯性权重的樽海鞘群算法
  11. Python 代码超级玛丽实现
  12. 位置式数字PI控制器C语言
  13. python使用gdal读写BIP、BSQ数据格式tif及相互转换
  14. 【ABMDRNet2021】 Adaptive-weighted Bi-directional Modality Difference Reduction Network for RGB-T Sema
  15. 阿里巴巴校招实习面试
  16. flutter pdf 插件使用
  17. Android,什么是MVP模式?
  18. 广义相对论和狭义相对论到底是讲什么的?
  19. 天耀18期 - 12.数据结构-1-2.LinkedList【作业】-猜数字.doc
  20. 手撸一个Switch开关组件

热门文章

  1. linux窗口特效,Ubuntu 8.04中将Compiz Fusion最小化窗口神灯效果水蛇状改成MAC OSX神奇特效...
  2. 科大奥锐干涉法测微小量实验的数据_基于组件的虚拟物理仿真实验软件V4.0
  3. 使用Eclipse开发PHP项目
  4. openstack 云_OpenStack中的人道主义应用程序,云的Rosetta Stone等
  5. MOXA串口服务器6450串口引脚图
  6. TI RTOS User Guide
  7. 指令集创始人潘爱民博士参加之江实验室“第二届智能计算创新论坛”并作报告...
  8. 信息收集(二) 站长工具 ZoomEye
  9. 磁盘分区与多系统安装(windows ubuntu)
  10. java php token,java后台返回token