本节内容记录阅读该论文的笔记

介绍

首先,介绍了两种明文“打包”的方法: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\in Z\),明文比特\(b\in (0,1)\),私钥\(s\)和密文\(c\)都是向量\(Z^n\),

加解密

具体加解密参考:密码算法汇总

将明文\(b\)加密,密文是个向量,解密的私钥\(s\)也是向量,解密框架为:

\(z=<c,s>(mod q)=k.q+b.q/2+e(mod q)\),其中\(e,k\)是小整数,\(z\)的范围为\([-q/2,q/2]\),若\(|z|<q/4\),则解密为0,否则为1。

同态计算

(1)加法

Regev本身支持同态加法计算,即\(E(b_1+b_2)=c_1+c_2(mod q)\)。

(2)乘法

在该paper:(BV11a:Efficient fully homomorphic encryption from (standard) LWE)中给出同态乘法运算:

这里的“乘法”是张量积,满足:\(E(b_1.b_2)=(c_1\bigotimes c_2\)),并满足\(<s_1,c_2>.<s_2,c_2>=<s_1\bigotimes s_2,c_1\bigotimes c_2>\)

张量积:参考(点积、张量积和范数

下面就是如何构造乘法后的正确解密:

\(c^*=\left \lceil 2/q.(c_1\bigotimes c_2)\right \rfloor\)

则:\(z^*=<s\bigotimes s.c^*>=k^*.q+b_1b_2.q/2+e^*(mod q)\),其中\(k^*,e^*\)也是相对较小的,所以参数选取适当的情况下,乘法后能正常解密!

可以看出,如果\(c_1,c_2\)是一个\(n\)维的向量的话,则\(c_1\bigotimes c_2\)是一个\(n^2\)维的矩阵,若在此基础上再进行一次乘法,则新密文的维数为\(n^4\),可见存在一个问题:密文维数随着乘法次数而变大(指数级)。

所以需要一种方法去“降维”,即(BV11a)中给出的重线性化技术(re-linearization)将密文维数\(n^2\)将为\(n\)。

重线性化,实质上就是密钥交换技术(Key Switching),即给出两个密钥\(s,s'\),使用密钥交换技术将密钥\(s'\)对应的密文转换为\(s\)对应的密文。密钥交换矩阵实际上包含用\(s'\)加密的\(s\),这是一个矩阵(密钥交换矩阵),其实也是将\(s\bigotimes s\)转换为\(s\)

打包“压缩”明文

前面提到原始的Regev方案是加密单bit明文,密文和密钥都是向量,这样效率较低。

可以将多个密钥\(s_i\)按行组成一个矩阵\(S\),可以加密一个明文向量\(b\),解密时:\(z=S.c=k.q+b.q/2+e\),其中\(k,e\)是小向量。(这里的密钥有多种?)

(1)打包明文的计算

还是和上面说的类似,加法(mod q),乘法通过张量积。

只不过在乘法后执行重线性化时有些变化:

假设\(c^*\)是一个高维的“打包”密文,对于每\(i\)个明文\(b_ib_i'\),对应的密钥为\(s_i\bigotimes s_i\),现在如何进行重线性化呢?

选择一个合适的密钥交换矩阵(用\(s_i加密的\)s_i\bigotimes s_i\(),可以将\)c^*\(转换为一个新的密文\)c'$,对应的密钥为 \(s_i\)。

(2)其他计算

可以在“打包”明文基础上实现SIMD同态计算、密文置换(permutation),并且使用PVW方法进行密文置换比使用SV方法更有优势。

SV方法,是通过自同构(automorphisms)实现,但是需要其他计算;而PVW是通过密钥交换实现的。

密文置换:移动密文内的slot,实现密文置换,解密后相当于明文置换。

基础

符号

(1)范数

\(||v||_1\):欧式范数

\(||v||_{\infty }\):无穷范数

具体参考:点积、张量积和范数

(2)其他符号

\(Z_q\):表示范围在\([-q/2,+q/2]\)内的整数

\([a]_q\):表示\(a mod q\)

\(\left \lceil a \right \rfloor\):表示四舍五入

\(\left \lceil a \right \rfloor_q\):表示\(\left [\left \lceil a \right \rfloor \right ]_q\)

LWE问题

安全参数\(n\),模数\(q>poly(n)\),\(\chi\)表示均值为0,标准差为\(q/ \beta\)的离散高斯分布,\(\beta =poly(n)\)

问:poly()表示什么意思?

关于LWE问题的困难性,在[Regev09]中给出了证明,表明能将LWE问题通过量子规约(quantum reductions)到\(n\)维格上的困难问题;在[Pei09]中给出了经典规约的方法(classical reductions)

SLWE

即搜索版本的LWE(search-LWE):

对于\((a_i\in Z_q^n,b_i=[<s,a_i>+e_i]_q)\),\(e_i\in \beta\) ,给出\(a_i,b_i\),难以计算出\(s\)

DLWE

即判绝版本的LWE(decision-LWE):

给出\(<a_i'\in Z_q^n,b_i'\in Z_q^n>\)和\((a_i\in Z_q^n,b_i=[<s,a_i>+e_i]_q)\)是难以区分的

Regev方案

一个基于LWE问题的公钥加密方案,这里给出了一个对称加密方案,可以通过范型变换(generic transformations)获得一个公钥加密方案。

范型变换?

明文空间\(Z_2=(0,1)\),模数\(q\),安全参数\(n'\),\(n=n'+1\)

这里介绍对称加密方案

密钥生成

密钥\(s'\in \chi ^{n'}\),明文\(\sigma\in Z_2\),选取\(a\in Z_q^{n'}\),\(e\in \chi\)(小向量)

加解密

计算\(b=[\sigma q/2-<s',a>+e]_q\),输出密文\((b,a)\)

解密:

计算\(d=[b+<s',a>]_q=[\sigma q/2+e]_q\),若\(d>q/4\),则输出1,否则输出0。

解密成功的关键在于\(||e||_{\infty}<<q/4\)

上述解密可以看作:\(\sigma =\left \lceil [<s,c>]_q /(q/2)\right \rfloor_2\),其中\(s=(s|s'),c=(b|a)\)都是\(n\)维向量。

\(<s,c>=kq+\sigma q/2+e\),\(||<s,c>||_{\infty}<<q^2,|k|<<q\)。

以上基础的加密方案只需\(|e|<<q/4\),下面在同态计算中,需要\(k,e<<q\)。

同态计算

若\(c_1,c_2\)是两个有效密文,分别对应的明文为\(b_1,b_2\in Z_2\),使用的密钥是\(s\),从上面可知,满足:\(<s,c_i>=k_iq+b_iq/2+e_i\),其中\(k_i,e_i\)是很小的数。

(1)加法

对于\(c'=[c_1+c+2]\),满足\(<s,c'>=k'q+(b_1\bigoplus b_2)q/2+e_i'\),其中\(k'=k_1+k_2\) 或 \(k_1+k_2\pm 1<<q\)和\(e'=e_1+e_2 <<q\)。(这里的加法是异或)

所以\(c'\)是\(b_1+b_2\)的有效加密。

(2)乘法

在【BV11】和【Bra12】中给出了Regev的乘法同态。

对于\(c^*=c_1\bigotimes c_2\)(\(n^2\)维向量),\(s^*=s\bigotimes s\),有乘法:

这里的\(e''\)是多项式大于(polynomially (n) larger )\(e_1,e_2\)的,因为\(k_1,k_2\)是有范围的\(poly(n)\)

这里如何理解:polynomially larger?

见参考【1】



在这里的意思就是\(e''/e_1\)或者\(e''/e_2\)是有范围的!

下面将\(2/q.c^*\)四舍五入为整数向量,即求\(\left \lceil 2/q.c^*\right \rfloor=2/q.c^*+e\),其中\(e\)是舍入误差,\(||e||_{\infty} \leq 1/2\),则:

其中\(e^*\)是误差集合,\(k^*\)是一些整数,由于\(s^*=s\bigotimes s\)和\(e\)中元素很小,所以\(<s^*,e>\)也很小,且\(|e^*|<<q\)。

最后令\(c''=\left \lceil 2/q.c^*\right \rfloor_q\),满足:

其中\(e^*<<q\),\(k^*\)满足:

所以\(c''\)是\(b_1b_2\)的有效加密,密钥为\(s^*=s\bigotimes s\)。

密钥交换

上面可以看出,密文相乘后,维数扩张严重(指数级)。在【BV11a】中给出了方法-密钥交换技术,作用就是降维。

从上面密钥交换的简单介绍中,可知道主要功能:将一个维数为\(n^2\)维的密文\(c'\),对应的密钥为\(s'\),转换为一个新的密文\(c\),其维数为\(n\),对应的密钥为\(s\)。

下面介绍一种密钥交换的变体技术,相对更加简单。

(1)密钥交换需要一个密钥交换矩阵

密钥交换(\(s^*->s\))可以看成:在密钥\(s\)下加密的\(s^*\),详细点说:对于每一个\(s^*[i]\),构造一个公开的“计算密钥”\(w_i\)(rational “ciphertext” ),满足:\(<s,w_i>=k_iq+s^*[i]+e_i\),其中\(k_1\)是一个整数,\(|e_i|\leq poly(n)/q\),将所有的\(w_i\)按列组成一个\(n*n^2\)的矩阵\(W\),满足\(s.W=kq+s*+e\),其中\(k\)是一个整数向量,\(||e_i||_{\infty}\leq poly(n)/q\)。

(2)然后将高维密文转换为低维密文

给出一个\(n^2\)维密文向量\(c^*\)满足:\(<s^*,c^*>=k'q+b(q/2)+e'\),其中\(k'\)是小整数,\(e' <<q ,b\in Z_2\)。定义\(c=\left \lceil Wc^* \right \rfloor_q=Wc^* +e^* +k^*q\),其中\(e^*\)是舍入误差,\(k^*\)是整数,则:

其中的\(\widetilde{e}\)是有界限的:

即\(|\widetilde{e}|<<q\),那么对于\(\widetilde{k}\),有:

总的来说,对于维数为\(n\)的新密文\(c\),满足\(<s,c>=\widetilde{k}q+b(q/2)+\widetilde{e}\),其中\(\widetilde{k},\widetilde{e}<<q\),所以能够将一个高维\(n^2\)密文\(c^*\),转换为低维\(n\)的密文\(c\),且对应的明文都是\(b\),即新密文\(c\)是有效的加密,其中密钥是\(s\)。

“打包”明文的计算

介绍

从上面可以看出,1bit的明文加密后的密文是\(n'+1\)维,在【PVW08】中给出了一种“打包”明文的方法,提升计算效率,简单点说就是,\(m'\)bit的明文加密后的密文是\(m=n'+m'\)维

这里选取\(m'\)个向量(\(m'\)个大小为\(n'\)的向量),即\(s_i\in \chi^{n'}\),将其组成一个\(m'.n'\)的矩阵\(S'\)(按行),之前使用的是\(n'+1\)维的密钥向量\(s=(1|s')\),现在使用的是\(m'.m\)的密钥矩阵\(S=(I|S')\),其中,\(I\)是i个\(m'.m'\)的单位矩阵。

上面是密钥生成,下面开始加解密:

(1)加密

对于明文\(b\in Z_2^{m'}\),即明文是一个比特串(向量),随机取向量\(z\in Z_q^{n'}\),误差向量\(x\in \chi ^m\),计算\(d=[b.q/2-S'a+x]_q\),输出密文向量\(c=(d|a)\in Z_q^m\)。

(2)解密

计算\(Sc=d+S'a=b.q/2+x(mod q)\),对于计算结果(向量),观察其中每个元素,若元素大于\(q/4\),则为1,否则为0。其中\(x\)中的每个元素远小于\(q\),解密也可以表示为\(b=\left \lceil [Sc]_q/(q/2) \right \rfloor_2\)。

总的来说,对于密文\(c\),对应密钥为\(S\),有效的解密为:



其中\(\left\|k \right\|_{\infty },\left\|x \right\|_{\infty }<<q\)。

(3)同态计算

从加解密来看,对于两个密文\(c_1,c_2\in Z_q^m\),分别对应明文是\(b_1,b_2\in Z_2^{m'}\),密钥为\(S\in Z_q^{m'.m}\)。

密文相加\(c'=[c_1+c_2]_q\),分别对应于明文\((b_1\bigoplus b_2)\)。

密文相乘\(c''=[2/q.c_1 \bigotimes c_2]_q\),分别对应明文\(b_1\bigodot b_2\in Z_2^{m'}\)(bitwise product,按位乘)。

密钥交换

密钥交换是需要“计算密钥”(public key key-switching gadgets)的,利用计算密钥使得\(s_i^*->s_i\),但是这样对于每一个密文转换\((c''->c)\),都需要一个计算密钥,我们想要的是使用一个计算密钥,将高维密文\(c''\)(对应的密钥为\(s^*\)),转换为一个低维密文\(c\)(对应密钥为\(s\))。

计算密钥能得到密钥交换矩阵\(W\)

密钥交换的“计算密钥”可以看作是用密钥\(s\)加密\(s^*\)构成的。具体来看,就是把\(s_i\)作为密钥,加密所有的\(s_i^*\)。

这里的密钥交换矩阵\(W\),满足\(SW=S*+E(mod q)\),其中\(E\)是误差矩阵。具体说,\(m=n'+m'\),可以利用\(W\in Q^{m.m^2}\),将\(S^*\in Z^{m'.m^2}\)对应的密文转换为\(S=(I|S')\in Z^{m'.m}\)对应的密文,那\(W\)如何求呢?



上面比较重要的内容是:想要安全性高,那就要提升模数\(n'\)的大小。

对于\(j\in (1,2,...,m^2)\),\(\widetilde{s}_j \in Z^{m'}\)组成矩阵\(S^*\)(按列),\(a_i\in Z_Q^{n'}\)组成矩阵\(W\)(按行),\(e_j\in Z^{m'}\)是误差向量,计算\(d_j=[2^l.\widetilde{s}_j-S'a_j+e_j]_Q\),输出\(w_j=(d_j|a_j)^T/2^l\in Q^m\),按行组成\(W\)。

\(d_j\)也可以表示为\(d_j=2^l.\widetilde{s}_j-S'a_j+e_j+kQ\),则满足:

也即是:



其中整数矩阵\(K\)和误差矩阵\(E\)满足\(\left\|E \right\|_{\infty }\leq poly(n)/q\)

总结

给出一个高维密文\(c^*\),对应密钥为\(S*\),利用密钥交换矩阵\(W\),可得低维新密文\(c=\left \lceil Wc^* \right \rfloor_q\),对应密钥为\(S\),且解密后的明文是一样的。

若对于\(S^*.c^*=k^*.q+b(q/2)+e^*\)和\(S.c=k.q+b(q/2)+e\),需要满足\(k^*,e^*,k,e<<q\)。

在一个Leveled-FHE方案中,需要提前生成多个互相独立的密钥矩阵\(S_k\),使得在每次乘法后执行密钥交换,转换为新的密钥,所以在该方案中,乘法的次数就受限于密钥的个数。

安全性是基于LWE问题。上面的引理是在\(S^*\)和\(S\)是独立关系的前提下,假如\(S^*\)和\(S\)不是独立的,那这就依赖于“循环安全假设”(circular security)了。

密文置换

使用以上技术,可以实现“压缩”版的SIMD同态计算,就是每计算一次相当于计算多次!

在密文计算量更大的需求下,“压缩”实为是一种好的实现,对于密文置换,可以利用密钥交换实现。

介绍

什么是密文置换?

规定一种置换映射\(\pi()\):

对于一个密文\(c\),对应密钥为\(S\),解密后的密文为\(b\in Z_2^{m'}\),将其作用在\(\pi()\)上,得到\(c'=\pi(c)\)。用\(S\)去解密\(c'\),会得到\(\pi(b)\)。

使用密钥交换实现很简单:准备一个密钥交换矩阵\(W\),可以得到将\((\pi(S)->S)\)

对于\(\pi(c)\),对应密钥为\(\pi(S)\),解密明文为\(\pi(b)\),使用密钥交换,将其转换为一个新的密文\(c'\),对应的密钥为\(S\),解密明文为\(\pi(b)\)。

总结

本文基于LWE问题,设计了一种PVW变体的压缩明文方案,这就类似于SV压缩方案,在环上的便利。

基于整数环和多项式环上的对比

(1)基于多项上环比实数环的方案具有更好的渐进效率(asymptotic efficiency)

(2)两种情况下密文的大小大致相同:多项式环上的密文是一个多项式,其中包含\(O(n)\)个整数。

(3)对于密文乘法(tensor product multiplication),基于整数的密文大小扩大为\(O(n^2)\)倍,基于多项式的密文大小仍是\(O(n)\)。

(4)对于重线性化,基于整数的密钥交换矩阵为\(O(n^3)\),基于多项式的密钥交换矩阵为\(O(n)\),基于整数上的计算会产生更多开销。

(5)对于密文中的“slot”个数,基于多项式的是由底层环结构决定的,基于整数的slot个数可以任意设置。

(6)在密文置换上,基于整数的比基于多项式更优。

(7)对于密钥交换,基于整数的比基于多项式的更方便和高效。

参考

1、【论文阅读笔记】-针对RSA的短解密指数的密码学分析(Cryptanalysis of Short RSA Secret Exponents)

2、范数||x||(norm)笔记

Packed Ciphertexts in LWE-based Homomorphic Encryption:解读的更多相关文章

  1. TENSEAL: A LIBRARY FOR ENCRYPTED TENSOR OP- ERATIONS USING HOMOMORPHIC ENCRYPTION 解读

    本文记录阅读该paper的笔记,这篇论文是TenSeal库的原理介绍. 摘要 机器学习算法已经取得了显著的效果,并被广泛应用于各个领域.这些算法通常依赖于敏感和私有数据,如医疗和财务记录.因此,进一步 ...

  2. Improved Security for a Ring-Based Fully Homomorphic Encryption Scheme-2013:解读

    本文记录阅读此论文的笔记 摘要 (1)1996年,HPS三人提出一个格上的高效加密方案,叫做NTRUEncrypt,但是没有安全性证明:之后2011年,SS等人修改此方案,将其安全规约到标准格上的困难 ...

  3. Privacy-Preserving Deep Learning via Additively Homomorphic Encryption

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Full version of a paper at the 8-th International Conference on Appli ...

  4. 同态加密-Homomorphic encryption

    同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样.换言之,这项技术令人 ...

  5. Homomorphic Evaluation of the AES Circuit:解读

    之前看过一次,根本看不懂,现在隔这么久,再次阅读,希望有所收获! 论文版本:Homomorphic Evaluation of the AES Circuit(Updated Implementati ...

  6. 京东云开发者|经典同态加密算法Paillier解读 - 原理、实现和应用

    摘要 随着云计算和人工智能的兴起,如何安全有效地利用数据,对持有大量数字资产的企业来说至关重要.同态加密,是解决云计算和分布式机器学习中数据安全问题的关键技术,也是隐私计算中,横跨多方安全计算,联邦学 ...

  7. (转)Awesome Courses

    Awesome Courses  Introduction There is a lot of hidden treasure lying within university pages scatte ...

  8. ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)

    IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...

  9. Federated Machine Learning: Concept and Applications

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Qiang Yang, Yang Liu, Tianjian Chen, and Yongxin Tong. 2019. Federate ...

随机推荐

  1. mybatis-02-mapper生成器插件使用

    sb_mybatis <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  2. SQL语句之Column 'Status' in where clause is ambiguous错误

    问题: AND created_by IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) limit 0, 10]; Column 'created_by' in where cla ...

  3. task0002(四)- 练习:数据处理、轮播及交互

    转载自我的个人博客 欢迎大家批评指正 包括5部分: 小练习1-处理用户输入 小练习2-日期对象的使用 小练习3:轮播图 小练习4:输入提示框 小练习5:界面拖拽交互 源码地址task0002 在线De ...

  4. 学习如何运用GitHub网站+出现的问题+Git基本操作总结

    首先介绍一下GitHub网站: github是一个基于git的代码托管平台. GitHub 拥有一个非常鼓励合作的社区氛围.这一方面源于 GitHub 的付费模式:私有项目需要付费,而公共项目完全免费 ...

  5. myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小 java.lang.OutOfMemoryError: PermGen space及其解决方法

    Window->Preferences->MyEclipse->Servers->Tomcat x.x->JDK->Optional Java VM argumen ...

  6. xml中的<![CDATA[]]>和转义字符

    被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容"<". 此标记用于xml文档中,我们先 ...

  7. Spring Boot-切换嵌入式Servlet容器

    首先我们先查看Spring Boot中支持几种嵌入式容器 选中ConfigurableWebServerFactory类,点击ctrl+h键,查看 切换到jetty容器步骤如下 1.排除掉tomcat ...

  8. Struts2-获取值栈对象与结构

    1.获取值栈对象有多种方式 (1)使用ActionContext类里面的方法获取值栈对象 @Override public String execute(){ //1.获取ActionContext类 ...

  9. 深入理解Kafka核心设计及原理(二):生产者

    转载请注明出处: 2.1Kafka生产者客户端架构 2.2 Kafka 进行消息生产发送代码示例及ProducerRecord对象 kafka进行消息生产发送代码示例: public class Ka ...

  10. 网卡激活-up(dhcp方式获得ip)

    一次修复记录 采样: [root@fp-web-124 network-scripts]# cat /etc/redhat-release CentOS Linux release 7.2.1511 ...