2021SC@SDUSC-PALISADE(二)全同态与格密码

2021SC@SDUSC
本博客包含自己学习的密码学的前置知识,计划只写这一篇博客,后面会一直更新。为之后的PALISADE分析做准备。



一个密码体质可以用数学语言定义:

请添加图片描述

1 全同态加密体系

1.1 简介

简称FHE

要构建一个加密系统,往往都需要一个密钥(Key)。通过这个密钥,我们可以一头把明文的信息加密成密文,然后在另一头通过密钥再把密文变回原来的样子。如果没有这个Key的话,其他的人很难知道我们到底传递了什么信息。

img

上文的图例基本展示了所有常见加密体系的全貌。所有的加密体系,如果用比较正式的描述方法,无疑是做了三件事:

  1. 首先,通过一个生成算法KeyGen()来随机生成一对用于加密和解密的密钥(EncKey,DecKey)
  2. 加密方通过加密密钥EncKey和加密算法Encryption来加密原文 PlainText ,最后得到密文 Ciphertext
  3. 随后,在解密的时候,解密方可以通过解密密钥DecKey 和解密算法 Decryption 来解密密文,最后还原回来原来的原文。

加密体系分为两种:对称加密体系非对称加密体系。我们这里描述的这三个步骤,其实通用于任何加密体系。如果是对称的,那么加密和解密用的密钥就是一样的。如果是非对称的体系的话,那么加密用的就是公钥(Public Key),然后解密用的是不一样的私钥(Private Key)。

如果我们有一个加密函数 f , 把明文A变成密文A’, 把明文B变成密文B’,也就是说f(A) = A’ ,f(B) = B’ 。另外我们还有一个解密函数,
在这里插入图片描述
能够将 f 加密后的密文解密成加密前的明文。对于一般的加密函数,如果我们将A’和B’相加,得到C’。我们用
在这里插入图片描述
对C’进行解密得到的结果一般是毫无意义的乱码。但是,如果 f 是个可以进行加法同态加密的加密函数, 我们对C’使用
在这里插入图片描述
进行解密得到结果C, 这时候的C = A + B。而满足加法同态与乘法同态的加密函数被称为全同态加密。

1.2 全同态加密体系定义

系统性的定义一下全同态系统的正式定义。一个全同态加密系统,一共拥有四个算法:

  1. 密钥生成算法KenGen为了简单表示,我们这里假设这个加密系统是对称的(即加密密钥等于解密密钥)。
  2. 加密算法Enc(sk,m)->ct把原文m加密成密文ct
  3. 解密算法Dec(sk,ct)->m把密文 ct还原为原文m。解密算法不仅能对初始密文解密,还能够对计算后的密文解密
  4. 运算评估算法Eval(F,ct1,ct2...ctn)->ct_把n个密文组合起来,通过一个二进制逻辑电路 F,最后得到组合的密文ct_,通俗理解为将密文输入到函数f里进行计算。满足下面等式
    在这里插入图片描述

与此同时,FHE系统还需要满足三大属性(properties)

  1. 正确性(Correctness):一个FHE系统必须要是正确的。具体来说,也就是加密之后的密文可以被成功解密,并且Eval运算输出的密文也可以成功解密回原文。
  2. 语义安全(Semantic Security):FHE系统输出的密文必须要难以分辨。具体来说,如果有一个网络窃听者看到了所有的密文,那么这个窃听者并不能分辨出哪个密文是对应哪个原文的。
  3. 简短性(Compactness):FHE的运算算法Eval输出的密文的长度一定要独立于功能F的所对应的电路的大小。这一属性代表就算运算功能复杂,输出的密文仍然在一个可以控制的长度范围内,确保了FHE系统的实用性。

简单来说,FHE要解决的问题是这样的。假设一个用户拥有一个私密的值x,但是他想要委托远程的服务器在不知晓x的情况下计算一个功能f(x)的值

基于我们定义的四个算法,首先用户需要使用FHE加密算法来加密他的私密输入,得到Enc(S),然后发送给云端。随后,云端将会使用运算算法Eval来计算得到Enc(f(x)),并返回给用户。最后用户使用FHE的密钥来解开密文,得到f(x)

1.3 全同态的四个阶段

构成FHE系统的四个不同阶段

  1. 部分同态(Partially Homomorphic Encryption):在这一阶段下,我们可以运算的功能F只能够要么由加法/线性组合,要么由乘法构成。常见的例子有RSA(乘法同态)以及ElGamal(加法同态)
  2. 近似同态(Somewhat Homomorphic Encryption):这一阶段的算法拥有不完整的同态属性,比如拥有Pairing配对的ElGamal循环群,具有完整的加法同态属性,但是只有非常薄弱的乘法同态属性。
  3. 有限级数全同态(Leveled Fully Homomorphic Encryption):这一阶段的算法可以同态运算任意形式的功能F,但是功能F所转换成的电路的复杂度不能超过上限L,不然就会噪音太大丢失信息。
  4. 全同态(Fully Homomorphic Encryption):最后的阶段就是我们想要得到的FHE了。在这一阶段我们可以计算任意复杂度的功能F,并且噪音可以被完美的控制在可控范围内。

1.4 全同态中噪声

在全同态加密的方案里,密文都是含有噪音的,密文的计算会导致噪音的增长,如果把函数 f 表示成电路,那么Evaluate算法实际上只能够对有限深度L的电路进行计算,超过这个深度L的电路就不行了。而全同态加密追求的就是Evaluate算法能够对任意电路进行计算。

图6 一个电路的明文评估

然而,在若要在全同态加密的密文状态下评估该布尔电路(这里给你一个神奇的透视镜,让你能够看到加密密文里面加密的明文,越清晰说明噪声越小,越模糊说明噪声越大),不但评估时间变得十分漫长,噪声也随着经过的门电路的数量增加而增长,如果经过过多的门电路,则很可能导致最终的解密错误(解密后无法分辨0和1)。
图7 一个电路的密文评估

2 格密码理论

2.1 格与整数格

设有一组线性无关的向量v1,...vn属于Rn,由这组向量生成的格L是指向量v1,...vn的线性组合构成的向量集合,且其系数均在Zm中,m指vn的维度。

举个例子,假如线性空间V拥有两个基向量b0,b1,那么这个空间中的任何一个向量v都可以被表示为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAwkppaN-1633598630208)(E:\山大\笔记\PALISADE\palisade.assets\equation (6)].svg)

这里c0,c1可以是任何数字。我们也可以通过改变c0,c1这两个数字的值来改变最后生成的向量v。用这种方法可以生成的所有向量v最后就会组成一个线性空间V,我们称这个空间为b0,b1两个基向量的线性生成空间(Span)

我们日常生活中最常见的线性生成空间,就是**XY坐标系(笛卡尔坐标系)**了。笛卡尔坐标系的基向量就是两根坐标轴对应的单位向量

在这里插入图片描述

任何在XY坐标系中的向量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jueBp1SK-1633598630210)(E:\山大\笔记\PALISADE\palisade.assets\matrix1.svg)]****

都可以用i,j的线性组合来代表。

如果所有的系数c0,c1都只能用整数的话,那么我们不断的变动c0,c1这两个系数的值,形成的向量v不能组成一个连续的线性空间了。反而,这些向量会构成一个密布的、网格状的离散集合。就想上面的图例所示,其中每一个点都代表一个可以被表达成基向量的线性组合的一个独特向量。

因为图片上看上去是网格状的,我们把这样的一个离散的基向量生成空间集合,称之为整数格(Integer Lattice)。

img

2.2 整数格中的CVP问题

回到刚刚说的线性生成空间的问题上。在b0,b1组成的连续的二维线性生成空间中,因为系数c0,c1可以是任何数字,所以我们可以表达这个二维坐标系统里的任意向量。但假如我们把这个问题约束到一个整数格中,我们就没有办法这么做了。

之前举的笛卡尔坐标系的例子里,笛卡尔空间的基向量是

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkaoLVJz-1633598630214)(E:\山大\笔记\PALISADE\palisade.assets\matrix.svg)]

现在假设我们在i,j构成的整数格中,想要表达一个向量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nod5Ufs6-1633598630215)(E:\山大\笔记\PALISADE\palisade.assets\matrix2.svg)]。

我们会发现没有任何办法可以表达它,因为在整数格中系数c0,c1必须要是整数。

正因为我们无法完美的用整数格中的线性组合来表达我们想要得到的向量,这个问题衍生出了一个新的问题:是否可以找到一个最接近于想要表达的向量v的值v1,并且v1恰好在这个整数格可以表达的范围当中?

重新转述一下这个问题的话,也就是说:能否找到一组整数系数c0,c1,使得
在这里插入图片描述
组成的向量v`在这个整数格中距离目标向量v的距离最近?我们把这一类在离散线性集合中逼近目标向量的问题,统称为最近向量问题(Closest Vector Problem,CVP)

2.3 LWE问题

我们求解线性方程组Ax=b时通常对增广矩阵做初等行变换求解,现在,我们把这个问题变化一下,给它增加一些难度:增加噪音。假如这个问题变成,如果已知一个矩阵A,并且我们还知道一个向量

其中e是我们在一个固定数值范围内随机采集的一个随机噪音向量

加上这么一个随机噪音之后,我们线性代数的方法就已经不管用了,因为如果我们使用高斯消除法对每一行进行消除的时候,同时还会带着噪音进去。

带上了噪音之后,这个问题就变成了已知一个矩阵A,和它与一个向量x乘得到的乘积再加上一定的误差(error)e如何有效的还原(learn)未知的向量。我们把这一类的问题统称为误差还原(Learning With Error, LWE)问题。

这个LWE问题与我们之前提到的CVP最近向量问题有着惊人的相似。其实两个问题都一样,我们都是需要找到一组“系数”(我们可以用向量x表示),使得一组基向量(我们用矩阵A来表示)的线性组合无限逼近我们想要的目标向量b。这里我们使用误差噪音e的大小来定义到底我们需要距离目标向量b多近。

正式定义:

  1. 素数有限域2. LWE
    在这里插入图片描述

2.4 GSW

GSW系统是Gentry,Sahai,Waters三位大牛在2013年提出的第三代同态加密系统。整套加密系统围绕了一个核心概念:矩阵的近似特征向量

整个系统也分为三个阶段,每一个阶段都提出了一个LFHE系统的尝试,并且评估了这一尝试是否可行。

从FHE的定义来看,只要我们能够构建一个加密体系,并且可以保证Eval算法可以任意计算加法乘法,那么这个体系就是全同态的。

参考博客:初探全同态加密之三:构建GSW全同态加密系统 - 知乎 (zhihu.com)

4.4.1 第一阶段:矩阵的特征值与特征向量

第一阶段主要就是利用了Ax=rx的线性关系,其中r是特征值。

  • 密钥生成KeyGen:我们只需要随机选取一个向量S,然后作为我们加密的密钥。

  • “加密”算法EncEnc(s,u)->C

    如果我们要加密任意一个数字u,我们只需要找到一个矩阵C,使得C满足:
    C ∗ s ⃗ = u ∗ s ⃗ C*\vec{s} = u*\vec{s} Cs =us
    等式中s是矩阵的特征向量,加密的数字u是这个矩阵的特征值,C是密文

  • 解密算法Dec:如果需要解密一个密文矩阵C,只需C*s就会得到u*s了

  • 运算算法Eval:一个体系只要可以运算加法以及乘法,那么这个体系就是全同态的。接下来,我们看一看这个体系能否完成对于这两个功能的运算。

    • Eval(+,C1,C2)
      ( C 1 + C 2 ) ∗ s ⃗ = C 1 ∗ s ⃗ + C 2 ∗ s ⃗ = u 1 ∗ s ⃗ + u 2 ∗ s ⃗ = ( u 1 + u 2 ) ∗ s ⃗ (C_1+C_2)*\vec{s}=C_1*\vec{s}+C_2*\vec{s}=u_1*\vec{s}+u_2*\vec{s}=(u_1+u_2)*\vec{s} (C1+C2)s =C1s +C2s =u1s +u2s =(u1+u2)s

    • Eval(x,C1,C2)
      ( C 1 ⋅ C 2 ) ⋅ s ⃗ = C 1 ⋅ u 2 ⋅ s ⃗ = u 2 ⋅ C 1 ⋅ s ⃗ = ( u 1 ⋅ u 2 ) ⋅ s ⃗ (C_1\cdot C_2)\cdot\vec{s}=C1\cdot u_2\cdot\vec{s}=u_2\cdot C1\cdot\vec{s}=(u_1\cdot u_2)\cdot \vec{s} (C1C2)s =C1u2s =u2C1s =(u1u2)s

    然而这个加密体系可以轻松的被破解,不需要密钥s,我们可以根据C找到特征向量与特征值

4.4.2 加入随机噪音

我们可以尝试把原本的特征向量等式转换为:
C ∗ s ⃗ = u ∗ s ⃗ + e ⃗ ( e ⃗ 为 随 机 噪 声 ) C*\vec{s} = u*\vec{s}+\vec{e} (\vec{e}为随机噪声) Cs =us +e (e )
我们系统性的定义一下这一体系的具体构造。

  • 密钥生成KeyGen

  • 加密算法Enc

  • 解密算法Dec

  • 运算算法Eval

虽然在原有的特征向量系统中加入噪音可以有效的使整个FHE系统变得安全,但是与此同时也使得整个FHE系统丢失了原本的全同态特性——因为运算乘法的时候会引入过大的噪音,导致运算结果无法被成功解密。

我们观察到最后一项C1*e2取值没有上限的原因是因为矩阵C1是在素数有限域Zq中任意取值的。这么说矩阵C的无限范数(infinity norm)就是
∣ ∣ C ∣ ∣ ∞ < = q / 2 ||C||_\infty<=q/2 C<=q/2
有没有什么办法,可以让我们
使得C的无限范数下降到一个可控的小范围内,但是仍然保证C矩阵中的数字是随机取的
呢?

4.4.3 二进制分解

4.4.3 加入二进制分解(GSW系统)

上一次尝试中,最后不完美的部分在于计算乘法运算的时候,我们会得到一个没有约束的噪音项

过对于矩阵C的观察之后,我们发现只要确保矩阵C里面的值可以被约束在一个小的区间,那么整体来说这一个噪音项就不会带来太大的噪音上限。

刚才我们也学习了二进制分解可以很有效的把一个高范数的矩阵C分解为一个低范数的二进制bit矩阵C`,并且二进制重组的过程可以被完美的描述为一个线性变换(矩阵)

  • 密钥生成KeyGen

  • 加密算法Enc

  • 解密算法Dec

  • 运算算法Eval

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunburst7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值