🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
本节内容记录阅读该论文的笔记
介绍
首先,介绍了两种明文“打包”的方法:PVW和SV
PVW:对应论文(PVW:A framework for efficient and composable oblivious transfer),打包思想就是,将多个bit明文是为一个明文向量。
SV:对应论文(SV11:Fully homomorphic SIMD operations),打包思想:将多个明文通过“编码”插入到一个多项式上,转换成多项式的计算相当于这么多明文计算。多用于基于RLWE方案的。
Regev简介
原paper:On lattices, learning with errors, random linear codes, and cryptography
加密单比特数据:系统参数q∈Zq∈Zq\in Z,明文比特b∈(0,1)b∈(0,1)b\in (0,1),私钥sss和密文ccc都是向量ZnZnZ^n,
加解密
具体加解密参考:密码算法汇总
将明文bbb加密,密文是个向量,解密的私钥sss也是向量,解密框架为:
z=<c,s>(modq)=k.q+b.q/2+e(modq)z=<c,s>(modq)=k.q+b.q/2+e(modq)z=<c,s>(mod q)=k.q+b.q/2+e(mod q),其中e,ke,ke,k是小整数,zzz的范围为[−q/2,q/2][−q/2,q/2][-q/2,q/2],若|z|<q/4|z|<q/4|z|<q/4,则解密为0,否则为1。
同态计算
(1)加法
Regev本身支持同态加法计算,即E(b1+b2)=c1+c2(modq)E(b1+b2)=c1+c2(modq)E(b_1+b_2)=c_1+c_2(mod q)。
(2)乘法
在该paper:(BV11a:Efficient fully homomorphic encryption from (standard) LWE)中给出同态乘法运算:
这里的“乘法”是张量积,满足:E(b1.b2)=(c1⨂c2E(b1.b2)=(c1⨂c2E(b_1.b_2)=(c_1\bigotimes c_2),并满足<s1,c2>.<s2,c2>=<s1⨂s2,c1⨂c2><s1,c2>.<s2,c2>=<s1⨂s2,c1⨂c2><s_1,c_2>.<s_2,c_2>=<s_1\bigotimes s_2,c_1\bigotimes c_2>
张量积:参考(点积、张量积和范数)
下面就是如何构造乘法后的正确解密:
c∗=⌈2/q.(c1⨂c2)⌋c∗=⌈2/q.(c1⨂c2)⌋c^=\left \lceil 2/q.(c_1\bigotimes c_2)\right \rfloor
则:z∗=<s⨂s.c∗>=k∗.q+b1b2.q/2+e∗(modq)z∗=<s⨂s.c∗>=k∗.q+b1b2.q/2+e∗(modq)z^=<s\bigotimes s.c*>=k.q+b_1b_2.q/2+e^(mod q),其中k∗,e∗k∗,e∗k*,e*也是相对较小的,所以参数选取适当的情况下,乘法后能正常解密!
可以看出,如果c1,c2c1,c2c_1,c_2是一个nnn维的向量的话,则c1⨂c2c1⨂c2c_1\bigotimes c_2是一个n2n2n2维的矩阵,若在此基础上再进行一次乘法,则新密文的维数为n4n4n4,可见存在一个问题:密文维数随着乘法次数而变大(指数级)。
所以需要一种方法去“降维”,即(BV11a)中给出的**重线性化技术(re-linearization)**将密文维数n2n2n^2将为nnn。
重线性化,实质上就是密钥交换技术(Key Switching),即给出两个密钥s,s′s,s′s,s’,使用密钥交换技术将密钥s′s′s’对应的密文转换为sss对应的密文。密钥交换矩阵实际上包含用s′s′s’加密的sss,这是一个矩阵(密钥交换矩阵),其实也是将s⨂ss⨂ss\bigotimes s转换为sss
打包“压缩”明文
前面提到原始的Regev方案是加密单bit明文,密文和密钥都是向量,这样效率较低。
可以将多个密钥sisis_i按行组成一个矩阵SSS,可以加密一个明文向量bbb,解密时:z=S.c=k.q+b.q/2+ez=S.c=k.q+b.q/2+ez=S.c=k.q+b.q/2+e,其中k,ek,ek,e是小向量。(这里的密钥有多种