首页 » 软件开发 » 同态加密应用开发入门(同态加密方案参数解密)

同态加密应用开发入门(同态加密方案参数解密)

落叶飘零 2024-07-25 00:53:12 0

扫一扫用手机浏览

文章目录 [+]

区块链开发教程链接: 以太坊 | 比特币 | 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 wiseevaluate.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支持,不需要进行本地编译。

原文链接:http://blog.hubwiz.com/2020/03/28/homomorphic-encryption-for-web-apps/

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读1 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0