同态 加密_同态加密—用于Web Apps(第1部分)

同态 加密

我从哪说起呢?

大约5年前,我第一次学习了同态加密(HE)。 从那时起,我开始学习如何在应用程序中利用它。 我发现的大多数库都使用许多不同的样式或“方案类型”,并以低级语言(例如C ++)编写。 这主要是由于性能,但是具有很难采用的副作用。

那么我们如何在Web应用程序中使用C ++库? 剧透— WebAssembly。

希望到本文结尾,您将对如何在Web应用程序中使用HE有了更好的了解。 我将简要介绍一些技术术语,并说明使用HE背后的痛苦点以及一些替代方案。

简要背景

他是改变隐私的游戏规则。 它允许在解密数据的情况下处理数据。 这个概念可以追溯到RSA加密-是的,即使RSA也具有有限的 HE功能。 但是,该行业花了很长时间才看到变化。

2009年,克雷格·金特里(Craig Gentry)的论文发表,并引发了具有不同功能和不同性能的库的泛滥。 剩下的就是历史了。

寻找图书馆

如今,可以找到许多随处可见的图书馆。 我列出了一些流行的类型以及它们各自支持的方案类型,但还有其他值得注意的类型。

  • Microsoft SEAL :BFV,CKKS(C ++)
  • HElib :BGV(带有GHS),CKKS(C ++)
  • PALISADE :BFV,BGV,CKKS,FHEW(C ++)
  • TFHE :GSW的环形变体(C ++)
  • HEAAN :CKKS(带有自举程序)(C ++)

为您的应用找到合适的库和方案类型需要大量的研究。 这些实现有什么区别? 他们需要什么依赖关系-如何在我的应用程序中使用它? 方案类型如何影响性能-甚至更加令人困惑,方案对加密数据施加了哪些限制? 到底是什么问题,我需要吗?

您甚至开始设计隐私保护应用程序之前,其中一些问题需要答案。

首先,我将讨论Microsoft SEAL,因为它是我学习时提供的最佳文档,也是我最熟悉的文档。 全面披露-我既不赞助也不隶属于Microsoft。 我将简化并做出非常笼统的假设,这样我们就可以继续进行下去,而不再赘述细节。

使用Microsoft SEAL😎

让我们简单介绍一下如何加密数据。 首先,获取一个数组(或C ++中的一个向量),将其编码为特殊格式为纯文本 ,然后将其加密密文 。 同态评估发生在密文上 。 要取回值,您需要解密和解码。

伪代码

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, ...]

哇! 牵着你的马-我跳过了前面,使这看起来很容易。 有几个步骤之前,你甚至可以得到这一点。 以下是该库的概述:

依存关系

可用方案

  • BFV —允许您对有符号和无符号整数进行运算
  • CKKS —允许您对浮点数进行操作

基本差异和局限性

  • BFV —密码可以保存的数据量(数组长度)由加密参数定义。 数组中的每个元素也具有参数规定的上限和下限。
  • CKKS —允许在数组中的每个元素上使用更大的边界,但具有使用BFV方案加密的等效密码的一半容量(数组大小的一半)。 它还仅计算近似值

不用担心这是否对您来说很陌生……与我同在……

*有关引导的注意事项

引导程序允许对加密数据进行无限同态评估。 没有它,在由于噪声因素导致无法正确解密之前,您可以对密码执行多少个评估(乘法等)是受限制的。

目前,它尚未在SEAL中实现; 但是,这是他们在CKKS的路线图上。 话虽如此,实施引导程序可能会导致性能显着下降,通常是一个数量级。 在许多情况下,给定应用程序的同态算法甚至不需要引导。

没有自举的同态算法称为分级算法。 算法的级别数(也就是多少次评估)由您选择的加密参数严格定义。

选择方案类型

第一步是选择适合您的应用程序的方案。 您需要整数还是可以提供误差范围? 当您绝对需要准确性时,应使用BFV。 CKKS有其自身的优点,但是在解密中引入了一些错误。 使用足够的参数,可以将误差降低到可接受的范围内-一开始很难学习。

如何选择合适的参数?

确定方案后,现在该定义参数了。 这个问题也许是最难回答的,因为它取决于许多因素。 然后还有更多问题:我们如何测试哪些有效? 有优化的空间吗? 每次都必须构建一个新的测试应用程序吗?

是的,您可以,但是让我们回顾一下方法。 现在,请忽略这些定义的含义。

  1. 选择SchemeType-在我看来,BFV相对于CKKS更容易学习。 至少,很容易看到解密何时完全错误。
  2. 从128位SecurityLevel开始-可以使用更高的选项,但要以减少同构运算为代价。
  3. 使其正常工作-从中级PolyModulusDegree(4096)开始,并在无法成功解密时增加。 相反,减小它,直到无法成功解密以进行优化。
  4. 测试上限和下限—当您仅针对性能进行优化以仅发现应用程序的某些值解密失败时,这很令人沮丧。
  5. 微调—修改CoeffModulus的位大小。 也可以使用模数转换(和/或对CKKS重新缩放)。
  6. (仅适用于BFV):将PlainModulus设置为20的合理值,并在遇到正确的解密(直至上限)时进行调整。 这代表了数组中每个元素的上限和下限,但是同样受到同态评估的影响。

哇-好多事情! 更令人沮丧的是,这些都是相当糟糕的概括。 关于优化还有很多东西要学习,我们甚至还没有开始编写一个简单的例子……😑

备择方案

这是困扰我数日的问题。 我不会立即讨论如何选择参数,而是会告诉您一种可以自己快速进行实验的方法。

我利用Microsoft SEAL在JavaScript中构建了一个开源库node-seal 。 我认为用JavaScript而不是C ++编写测试套件会更快。

它的核心是使用WebAssembly和轻绑定,可在Node.js或现代浏览器中使用。 npm软件包已经包含zlib和内置函数,以使性能接近本机库。 安装就像npm install node-seal或yarn add node-seal一样简单-无需编译任何内容且没有依赖项。

这是利用HE构建Web应用程序的第一步,但这仍然不能解决快速迭代参数以查找有效和无效参数的问题

在Web应用程序中使用HE

没有解决方案,我做了其他开发人员会做的事–我为此开发了一个应用程序

我构建了Morfix.io以快速测试加密参数,以了解它们如何影响算法设计和解密结果。 该方法的每一步都以与本机C ++库相同的方式执行,这意味着您将看到的大多数异常都反映了本机库的运行时异常。 您可以创建键,变量甚至函数。 布置好算法后,只需执行它们,然后观看计算就可以渗透到整个页面-所有这些都是实时的 。 我还提供了一个简单的代码生成器,以帮助您开始使用JavaScript。

我已经确定在客户端应用程序中可以使用HE,但是下一步是处理加密的数据。

现在,我必须构建服务器端逻辑,对吗?

是的,您可以-但不必这样做。 通过成为我的平台上的Beta用户,您可以创建一个在一组参数和公钥下运行的API。 除非您要模拟解密,否则不需要任何秘密密钥。

如何开始

  • 👉🏻选择加密参数
  • Upload️上传并分配公钥
  • ➕以PlainTexts和CipherTexts的形式创建变量
  • ➕创建一系列功能并相应地分配变量
  • 🚀执行和解密(使用非永久性的SecretKey)

一个有用的测试平台可以模拟从浏览器发送和接收加密请求,因此您可以将更多精力放在构建内容上,而不是进行调试。 哦,还有Node.js的另一个基本代码生成器,因此您可以将请求从计算机发送到云,然后再发送回💪🏻。

结论

归根结底,学习HE很难—确实没有轻松的方法。 我已经构建了一些工具来帮助您开始使用客户端或服务器端应用程序。

〜所有都无需解密您的数据〜

在Microsoft SEAL上大声疾呼!!!

请继续关注第2部分 ,在第2部分中 ,我将利用同态API和JavaScript构建一个简单的应用程序。

谢谢阅读!

先前发布在https://medium.com/@s0l0ist/homomorphic-encryption-for-web-apps-a3fa52e9f03d

翻译自: https://hackernoon.com/homomorphic-encryption-for-web-apps-zfa93ysr

同态 加密

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值