同态加密入门

简介:

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

区块链开发教程链接: 以太坊 | 比特币 | EOS | Tendermint | Hyperledger Fabric | Omni/USDT | Ripple

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没有必须的第三方依赖。可选的依赖包括:zlibMicrosoft 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支持,不需要进行本地编译。


原文链接:同态加密应用开发入门 — 汇智网

目录
相关文章
|
3月前
|
算法 安全 物联网
全面了解AES加密:入门指南(二)
全面了解AES加密:入门指南
|
1月前
|
机器学习/深度学习 安全 算法
安全多方计算之三:同态加密
安全多方计算之三:同态加密
361 42
|
2月前
|
数据安全/隐私保护 Python Windows
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
44 0
|
3月前
|
存储 安全 算法
全面了解AES加密:入门指南(一)
全面了解AES加密:入门指南
|
3月前
|
数据安全/隐私保护 Python
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)(下)
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
34 1
|
3月前
|
数据安全/隐私保护 Python Windows
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)(上)
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
52 0
|
10月前
|
安全 算法 搜索推荐
探索密码学的未来:SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算
探索密码学的未来:SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算
545 0
|
12月前
|
存储 算法 安全
同态随机基加密的量子多方密码-数学公式
同态随机基加密的量子多方密码-数学公式
70 0
|
12月前
|
传感器 存储 安全
IFIT2022-智能城市环境中的医疗物联网:基于量子同态加密的医疗成像架构
随着医疗互联网的不断壮大,越来越多的数据在医疗互联网中生成,保护医疗数据的隐私性与安全性越来越重要。量子计算作为能够高效破解基于质因数分解的经典密码技术备受瞩目,因此未来一定是以量子技术为安全基础的高性能计算时代。现正处于经典计算到量子计算的过渡阶段,该阶段下如何将经典算法与量子算法进行有机结合进而提高效率与安全性一直是一个开放型的课题。本文基于上述背景,提出了一个基于量子同态加密的安全云框架,该框架将量子计算与同态加密结合从而构建了一个安全且高效的云环境。该系统基于量子特性与同态密码的理论进行设计,它们的具体实现存在困难,希望能为以后研究者们的持续研究做出引导思路的贡献。
144 0
|
算法 安全 Java
web3:同态加密(二)
web3:同态加密(二)
355 0
web3:同态加密(二)