网站好坏的标准,手机助手app下载,定制开发app软件,免费追漫软件app这篇文章主要介绍LattiGo团队搞出来的一个多方同态加密的工作。个人觉得比较优雅#xff0c;而且有库支持#xff0c;方便把玩#xff0c;所以记一下。 在攒毕业论文的时候整了这么个看上去很烂#xff0c;但是#xff08;个人觉得#xff09;有一点意思的烂活#xff0… 这篇文章主要介绍LattiGo团队搞出来的一个多方同态加密的工作。个人觉得比较优雅而且有库支持方便把玩所以记一下。 在攒毕业论文的时候整了这么个看上去很烂但是个人觉得有一点意思的烂活没心思写那么多的公式各位dalao凑合看欢迎轻喷。 简介和亮点
实现了CKKS方案的一个多方计算版本对BFV也适用。这个多方版本的方案将私钥拆分成了nnn份分给nnn个计算方一方一个。
对应的安全性只要这nnn方别都是内鬼比如所有方都沆瀣一气沟通私钥这个同态加密方案就具有语义安全性。
可以基于上述私钥拆分的想法设计一些有趣的多方解密/自举方案。
预备知识CKKS同态加密方案的简介
引个流看这儿。
LattiGo的多方CKKS方案
首先定义 nnn 个计算方PP1,...,PN\mathcal P P_1, ..., P_NPP1,...,PN。
私钥生成
参与计算的nnn方都随机生成一个私钥碎片ski,fori1,...,nsk_i, \textit{for}\ i1,...,nski,for i1,...,n。最后sk∑skisk \sum sk_isk∑ski就是完整的私钥多项式。这意味着每一方都持有一个私钥的碎片。
在具体操作中可以让客户端先线下生成nnn个私钥碎片再分发给nnn个计算方或者每个计算方先生成私钥碎片再发送给客户端。
在方案运行过程中各个计算方持有一个私钥碎片和全部的公钥。
其他钥生成不费脑子版本
我们先假设客户端持有私钥。那么客户端其实已经可以根据私钥计算出一系列的公钥比如加密公钥、重线性化钥、旋转钥blablabla然后公布给nnn个计算方使用。
至于nnn个计算方如何派生出这一系列公钥可以在看完下面多方解密和多方自举部分后留作文末习题doge
多方解密和多方自举
我们先通过介绍多方解密和多方自举方案来阐明文章里的一些核心想法。
多方解密
对于密文多项式对c(c0,c1)c(c_0, c_1)c(c0,c1)解密方案就是求解mc0c1⋅skm c_0c_1\cdot skmc0c1⋅sk。
这里多方参与完成解密就是计算c0c1⋅∑skic_0c_1\cdot \sum sk_ic0c1⋅∑ski。
解密方法如下
各方计算c1⋅skieic_1 \cdot sk_i e_ic1⋅skiei其中eie_iei是噪声。然后计算
c0∑(c1⋅skiei)c_0 \sum (c_1 \cdot sk_ie_i)c0∑(c1⋅skiei)
就完成了解密虽然带了点噪声。
在这个方案中RLWE问题的语义安全性保证了skisk_iski很难被爆破于是只要至少有一个计算方不是内鬼不是内鬼指保护好自己的私钥碎片那么私钥就不会被破解。
多方自举
在实现多方自举之前我们首先让各个计算方生成一个公有的密文ddd。
首先各方生成随机密文did_idi然后各方共同参与求和得到d∑did \sum d_id∑di。ddd被对外公布。
在这个过程中只要计算方不是全员内鬼那么did_idi和ddd就是语义安全的。
基于上述这些秘密did_idi和ddd我们可以设计多方自举方案。
对于密文多项式对c(c0,c1)c(c_0, c_1)c(c0,c1)
首先各方计算c1⋅skidieic_1\cdot sk_i d_i e_ic1⋅skidiei其中eie_iei是噪声。
求和得到mc0∑(c1⋅skidiei)m c_0 \sum(c_1\cdot sk_i d_i e_i)mc0∑(c1⋅skidiei)。
然后计算m−dm - dm−d。
于是多方自举就完成了。
本质上是对解密后的明文加上一层mask然后再把它抹掉就完事了。
其他钥生成费脑子版本
课后习题
nnn个计算方如何派生出加密公钥、重线性化钥、旋转钥blablabla一系列公钥呢