zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

格密码学习笔记(五):对偶格

2023-04-18 14:25:57 时间

对偶空间

R mathbb{R} R上的向量空间 V V V满足以下2个性质:

  • 向量加法操作 x + y ∈ V m{x} + m{y} in V x+yV
  • 标量乘法操作 a ⋅ x ∈ V a cdot m{x} in V axV

线性空间里面有一个很重要的概念叫对偶空间(Dual Space)。具体可以参考
怎么形象地理解对偶空间(Dual Vector Space)? - 石在的回答 - 知乎

V V V上的线性泛函 ϕ phi ϕ是一个从 V V V R mathbb{R} R的线性映射,即 ϕ : V → R phi: V o mathbb{R} ϕ:VR。一般而言,对于 x ∈ V m{x} in V xV,有 ϕ y ( x ) = ⟨ x , y ⟩ phi_{m{y}}(m{x}) = langle m{x}, m{y} angle ϕy(x)=x,y

定义: V V V的对偶空间 V ∨ V^vee V是所有 ϕ phi ϕ构成的向量空间。

举一个例子:假想 x ∈ V m{x} in V xV是表示橘子的一个特征向量,每个维度/属性可以是维生素、糖分等,不同 x m{x} x表征不同橘子;线性泛函 y m{y} y每个维度规定维生素的价值、糖分的价值等, ⟨ x , y ⟩ langle m{x}, m{y} angle x,y算出一个橘子的具体价格;若 y m{y} y固定而 x m{x} x变化,可以推算出特定规格标准下不同规格的橘子的价格;若 x m{x} x固定而 y m{y} y变化,可以推算出同一个橘子在不同规格标准下的价格。

对偶格

定义(对偶格,Dual Lattice) Λ Lambda Λ为一个格, s p a n ( Λ ) mathrm{span}(Lambda) span(Λ)为该格张成的空间;记向量 x ∈ s p a n ( Λ ) m{x} in mathrm{span}(Lambda) xspan(Λ),对所有格向量 ∀ v ∈ Λ forall m{v} in Lambda vΛ x m{x} x满足 ⟨ x , y ⟩ ∈ Z langle m{x}, m{y} angle in mathbb{Z} x,yZ;所有可能的 x m{x} x构成 Λ Lambda Λ的对偶格 Λ ∨ Lambda^vee Λ

张成的定义可以参考线性代数——线性组合、张成的空间与基

以下图为例,它是一个整数格, ( Z n ) ∨ = Z n (mathbb{Z}^n)^vee = mathbb{Z}^n (Zn)=Zn。其中,黑色点为原来的格点,红色点为对应的对偶格点。

在这里插入图片描述

若对整数格加一个旋转,其对偶格为 ( R Λ ) ∨ = R ( Λ ∨ ) (m{R} Lambda)^vee = m{R}(Lambda^vee) (RΛ)=R(Λ)。原因:一个格向量发生了旋转,那么对偶格向量也必须旋转相同角度,才能保证向量乘积不变。

在这里插入图片描述

如果对格进行伸展,那么 ( q ⋅ Λ ) ∨ = 1 q ⋅ Λ ∨ (q cdot Lambda)^vee = frac{1}{q} cdot Lambda^vee (qΛ)=q1Λ

在这里插入图片描述

格与对偶格之间有一些基本属性关系,如:

  • Λ 1 ⊆ Λ 2 ⇔ Λ 1 ∨ ⊇ Λ 2 ∨ Lambda_1 subseteq Lambda_2 Leftrightarrow Lambda_1^vee supseteq Lambda_2^vee Λ1Λ2Λ1Λ2
  • ( Λ ∨ ) ∨ = Λ (Lambda^vee)^vee = Lambda (Λ)=Λ

整数格的对偶格比较好理解。但对于其它格,它们的对偶格看起来非常“混乱”,与原来的格没有太大的几何关系。例如,如果在原来的格上添加新的格点,由于定义中的约束关系: x ∈ Λ , y ∈ Λ ∨ , ⟨ x , y ⟩ ∈ Z m{x} in Lambda, m{y} in Lambda^vee, langle m{x}, m{y} angle in mathbb{Z} xΛ,yΛ,x,yZ,对偶格中的格点可能会减少。

在学习时,最好是把对偶格中每一个向量理解成一个“线性变换函数“,而不是一个几何意义上的格点。 仅需牢记 ⟨ x , y ⟩ ∈ Z langle m{x}, m{y} angle in mathbb{Z} x,yZ即可,即格点和线性变换函数之间的运算。

在这里插入图片描述

格分层

对偶格 L ∨ mathcal{L}^vee L中的每个向量 v ∈ L ∨ m{v} in mathcal{L}^vee vL都能将格 L mathcal{L} L分割成诸多个正交于 v m{v} v的层。具体而言,选定对偶格中的一个点 v ∈ L ∨ m{v} in mathcal{L}^vee vL,然后让原本格中的所有点都与这个点相乘,把所有得到相同结果的格点都归为一层 L i L_i Li,即 L i = { x ∈ L : x ⋅ v = i } L_i = { m{x} in mathcal{L} : m{x} cdot m{v} = i } Li={xL:xv=i}

以下图为例,黑色点为原来的格点,红色点为对应的对偶格点。

在这里插入图片描述

取不同对偶向量会有不同划分法,层与层之间的距离与所选对偶向量的长度成反比,即 D i s t ( L i , L i + 1 ) = 1 ∥ v ∥ mathrm{Dist}(L_i, L_{i+1}) = frac{1}{| m{v} |} Dist(Li,Li+1)=v1

在这里插入图片描述

注意:层与层之间不包含格点。 如果在两个分层之间放置一个超球体,这个超球体也不会包含任何格点,可以用来逼近原有格覆盖半径的下界,即 μ ( L ) ≥ 1 2 ∥ v ∥ mu(mathcal{L}) geq frac{1}{2 | m{v} |} μ(L)2∥v1

在这里插入图片描述

如果对偶格的 λ 1 ( L ∨ ) lambda_1(mathcal{L}^vee) λ1(L)很小,那么原有格的覆盖半径 μ ( L ) mu(mathcal{L}) μ(L)会很大。

在这里插入图片描述

Banaszczyk定理

定理1 对于任意格 L mathcal{L} L,有 1 ≤ 2 λ 1 ( L ) ⋅ μ ( L ∨ ) ≤ n 1 leq 2lambda_1(mathcal{L}) cdot mu(mathcal{L}^vee) leq n 12λ1(L)μ(L)n

定理2 对于任意 i i i,有 1 ≤ λ i ( L ) ⋅ λ n − i + 1 ( L ∨ ) ≤ n 1 leq lambda_i(mathcal{L}) cdot lambda_{n-i+1}(mathcal{L}^vee) leq n 1λi(L)λni+1(L)n

BDD问题规约至SIVP问题上

下图简要给出了如何将BDD问题规约到SIVP问题上。个人疑问:为什么要选取SIVP问题的解? 推测是因为层间距离与 ∥ v i ∥ | m{v}_i | vi成反比,若不是挑选最短的基向量而是很长的向量的话,那么格划分的层数会非常多,导致计算复杂度极高。

在这里插入图片描述

这个算法以较大概率求解出BDD问题的解。如何判断这个概率呢?当满足 μ ( t , L ) ≤ λ 1 2 n ≤ 1 2 λ n ∨ ≤ 1 2 ∥ v i ∥ mu(m{t}, mathcal{L}) leq frac{lambda_1}{2n} leq frac{1}{2lambda_n^vee} leq frac{1}{2 | m{v}_i |} μ(t,L)2nλ12λn12∥vi1时,算法输出的解为正确解。

已知格基,如何求对偶格基

定理3 若格 L mathcal{L} L的基为 B m{B} B,那么 L ∨ mathcal{L}^vee L的基为 D = B ( B ⊤ B ) − 1 m{D} = m{B} (m{B}^ op m{B})^{-1} D=B(BB)1

参考:Dual lattice - Wikipedia

具体证明请参考:https://cseweb.ucsd.edu/classes/wi12/cse206A-a/LecDual.pdf

怎么求矩阵的乘积的逆矩阵?

矩阵的转置的逆

其它矩阵运算法则

致谢