格(Lattice)基础(一)
格(Lattice)
格(lattice)的定義
不是那么標準的定義
有一組線性無關的空間向量(b1,b2,…,bn)∈Rn(b_1,b_2,\ldots,b_n) \in \mathbb{R^n}(b1?,b2?,…,bn?)∈Rn作為基,該組的每個向量若乘以某個整數系數(也就是通過線性變換)所產生的離散基向量生成空間向量集合就稱為格。
L(b1,b2,…,bn)={Σxibi∣xi∈Z}\mathcal{L}\left(b_{1}, b_{2}, \ldots, b_{n}\right)=\left\{\Sigma x_{i} b_{i} \mid x_{i} \in \mathbb{Z}\right\} L(b1?,b2?,…,bn?)={Σxi?bi?∣xi?∈Z}
如果把基向量組合用合成矩陣BBB來表示
L(B)=L(b1,b2,…,bn)=∑i=1nbi?Z={Bx∣x∈Zn}\mathcal{L}(B)=\mathcal{L}\left(b_{1}, b_{2}, \ldots, b_{n}\right)=\sum_{i=1}^{n} \mathbf_{i} \cdot \mathbb{Z}=\left\{B x \mid x \in \mathbb{Z}^{n}\right\} L(B)=L(b1?,b2?,…,bn?)=i=1∑n?bi??Z={Bx∣x∈Zn}
幫助理解: 假如把空間里的向量的末端視為一個點,則格就是某空間里面的具有一些規律的離散的點集合,也可以說格是某空間中的一個離散的、具有加法運算的子群。類似這樣
值得注意的是:
證明過程如下,
同時,這種矩陣也稱為幺模矩陣
(unimodular matrix)
定義: U∈Zn×nU\in\mathbb{Z}^{n \times n}U∈Zn×n,∣U∣=±1|U|=\pm1∣U∣=±1,UUU稱為幺模矩陣同時它的逆也是幺模矩陣。
如何判定兩個格基是否能生成同一個格呢?
當一個格基能通過幺模矩陣進行變換到另一個格基的時候,這兩個格基就可以生成相同的格。
基礎區域(Fundamental Parallelepiped)
由格基BBB線性組合,系數在[0,1)[0,1)[0,1)之間組成的一塊區域。
P(B)={Bx∣x∈Rn,?i:0?xi<1}\mathcal{P}(B)=\left\{B x \mid x \in \mathbb{R}^{n}, \forall i: 0 \leqslant x_{i}<1\right\} P(B)={Bx∣x∈Rn,?i:0?xi?<1}
大概像這樣,
如何判定給定的向量集是否構成格的“basis”?
由向量生成的"basic parallelepiped"不應該包含除原點外的任何格點,即基礎區域與格的交集為0。
如下圖
圖2(c)中所示的"basic parallelepiped"包含格點 (1,0),而圖2(a)和圖2(b)中的基本平行不包含任何非零格點。
一個格的任意基礎區域都擁有相同的體積(體積不是狹義的三維體積,可以擴展到n維,如二維是面積,三維是體積)。
行列式(Determinant)
類似于線性空間里,一個格的行列式代表了對應基向量所組成的幾何體體積
定義格的行列式作為基礎區域的n維體積
det(L)=∑ibi?[0,1)=vol(P(B))det(\mathcal{L})=\sum_{i}{\mathbf_{i}}\cdot[0,1)=vol(\mathcal{P(\mathbf{B})}) det(L)=i∑?bi??[0,1)=vol(P(B))
注意
給定任意一組基向量,這個Determinant大小是不變的,也就是無論怎么變換,都能找到這個值,即一個格的任意基礎區域體積都相同。它不依賴于計算它的某個具體基礎區域,是格的不變量。證明過程如下
格密度
格的密度可以理解為,在空間里任意取一個超球體,然后看這個球體里面覆蓋了多少格點,點的數量平均于球體體積,這個就是密度
格的行列式與其密度成反比
ForallsufficientlylargeS?Rn:∣S∩L∣≈vol?(S)/det?(L)For\ all\ sufficiently\ large\ S \subseteq \mathbb{R}^{n} :\\ |S \cap \mathcal{L}| \approx \operatorname{vol}(S) / \operatorname{det}(\mathcal{L}) For?all?sufficiently?large?S?Rn:∣S∩L∣≈vol(S)/det(L)
最短距離與連續最小值
格的一個基本參數是格中最短非零向量的長度,也就是點與點之間的最短距離,為了方便可以把其中一個點設置為坐標軸的原點。
λ1=min?x,y∈L,x≠y∥x?y∥=min?x∈L,x≠0∥x∥\begin{aligned} \lambda_{1} &=\min _{x, y \in \mathcal{L}, x \neq y}\|x-y\| \\ &=\min _{x \in \mathcal{L}, x \neq 0}\|x\| \end{aligned} λ1??=x,y∈L,x=ymin?∥x?y∥=x∈L,x=0min?∥x∥?
記為λ1(L),\lambda_1(\mathcal{L}),λ1?(L),同理可定義第二近到第nnn近的λ2(L),λ3(L),…,λn(L)\lambda_2(\mathcal{L}),\lambda_3(\mathcal{L}),\ldots,\lambda_n(\mathcal{L})λ2?(L),λ3?(L),…,λn?(L)。
距離函數(Distance Function)與覆蓋半徑(Covering Radius)
給定一個任意點t\mathbf{t}t(可以不在格上),定義距離函數μ(t,L)\mu(\mathbf{t},\mathcal{L})μ(t,L)為這個點到附近的格點的最短距離。
μ(t,L)=min?x∈L∥t?x∥\mu(\mathbf{t},\mathcal{L})=\min _{\mathbf{x} \in \mathcal{L}}\|\mathbf{t}-\mathbf{x}\| μ(t,L)=x∈Lmin?∥t?x∥
可以通過移動t\mathbf{t}t位置得到這個格中最大的μ\muμ,這個就稱為覆蓋半徑(Covering Radius)
μ(L)=max?t∈span(L)μ(t,L)\mu(\mathcal{L})=\max _{\mathbf{t} \in span(\mathcal{L})} \mu(\mathbf{t}, \mathcal{L}) μ(L)=t∈span(L)max?μ(t,L)
注意μ\muμ是點到格點的最短距離,如果把點換為格點,以每個格點為圓心畫圓并逐步擴大,直到這些圓正好完美的覆蓋所有空間的時候,這個半徑就是最大的μ\muμ,即覆蓋半徑了。
格的Smoothing
假如將上述的圓,改變為疊加圓形范圍內取值的隨機噪音,而當達到覆蓋半徑的時候將會出現取值分布很不平均的問題,那么為了解決此問題就需要smooth一下格。
理論上當半徑到無限大的時候,得到的分布是很完美的,但是這種構造就沒了意義,所以就出現了一個Smoothing的半徑最大上限,該上限由格中距離最大的最短向量λn\lambda_{n}λn?來決定的,大于這個距離之后,必然會覆蓋其他的格點。
Minkowski定理
凸集定理(Convex body theorem)
用于尋找一個格點周圍最近的其他格點的。
給出一個Lattice中最短向量的一個上限值。
λ1(L)≤nr=n?det?(L)1/n\lambda_{1}(\mathcal{L}) \leq \sqrt{n} r=\sqrt{n} \cdot \operatorname{det}(\mathcal{L})^{1 / n} λ1?(L)≤n?r=n??det(L)1/n
假如把格的Determinant對應空間壓縮為一個立方體,那么該立方體的對角線長度就是nr\sqrt{n}rn?r,對角線的另一頭必然是下一個格點(但不一定是最近的格點),所以肯定要小于等于這個對角線的長度
第二定理
給出一個對于其他最短向量λi\lambda_{i}λi?的一個取值上限
λ1(L)≤(∏iλi(L))1/n≤n?det?(L)1/n\lambda_{1}(\mathcal{L}) \leq\left(\prod_{i} \lambda_{i}(\mathcal{L})\right)^{1 / n} \leq \sqrt{n} \cdot \operatorname{det}(\mathcal{L})^{1 / n} λ1?(L)≤(i∏?λi?(L))1/n≤n??det(L)1/n
第二定理指出全部nnn個最短向量的幾何平均數,小于之前的對角線長度,由于任意一個格的Determinant對應空間的Parallelepiped是不規則的,所以用幾何平均數能很好約束Parallelepiped邊的長度
格中難題
最短向量問題(SVP)
定義
在格中需找一個最短的非零格點
可以理解為:尋找一組整數與基向量線性組合使得組合后的向量的長度最短?;蛘?#xff0c;理解為給定一個基的格,找到一個這個基構成的格點,使得這個點距離坐標原點距離最近。
寬松版(SVPγSVP_\gammaSVPγ?):找到γ\gammaγ倍距離就行
判定版(GapSVP)
最短獨立向量問題(SIVP)
定義
給定一個格,找到n個線性無關的向量,并且這些向量的長度都要小于定于最長的最短向量。
寬松版(SIVPγSIVP_\gammaSIVPγ?):找到γ\gammaγ倍距離就行
判定版(GapSIVP)
最近向量問題(CVP)
定義
在離散線性集合中逼近目標向量的問題
給定一個不在格中的目標向量,在各種尋找一個向量使得該向量與目標向量距離最近。
可以理解為:給定一組格基向量,和一個目標向量,很難找到一組整數與基向量線性組合使得組合后的向量距離目標向量最近。或者,理解為給定連續空間中任意一個點,找到距離這個點最近的格點。這個距離一定是小于等于覆蓋半徑的。
還有一種定義是給定一個格,一個隨機點和搜索距離,并且假設覆蓋半徑小于等于搜索距離,CVP問題就是找到一個合理的格點并且這個點到隨機點的距離小于等于搜索距離。
寬松版(CVPγCVP_\gammaCVPγ?):找到γ\gammaγ倍距離就行
判定版(GapCVP)
格基約減算法(Lattice Basis Reduction)
在上述問題中,都需要輸入格的基,來形成一個格,從而找到相應的值。同一個格有很多基,有些基是短的,盡可能垂直的,稱為“好”的基。而有些基又是長的,且方向接近于同一方向或相反方向的,稱為“壞”的基。比如整數格Zn\mathbb{Z}^nZn就是一個“好”的基,在它上面解決CVP問題,只需要通過上下取整即可。
所以,需要將“壞”基轉變為“好”基,目標是找到一組非常接近垂直基,這個過程稱之為 格基約減,就是為了發現一組又短又垂直的基。
比較常見的算法就是施密特正交化,即輸入一組基,通過反復迭代最后輸出一組垂直的基,這組基能夠張成與輸入基相同的空間。由于格的系數都是整數,所以應用于格的時候需要把系數進行四舍五入的取整到最近整數。
施密特方法高度依賴向量的順序問題,不同的基向量順序將導致不同的結果,為解決這個問題,誕生了LLL算法,但LLL算法只是一次考慮兩個向量,由此又誕生了BKZ算法。
參考
- 格密碼理論與應用實踐
- 【格理論與密碼學】周福才,徐劍編著
- yue佬專欄里的格文章
總結
以上是生活随笔為你收集整理的格(Lattice)基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享个PDF文件签名盖章 DEMO
- 下一篇: 也许是全网最全的 Angular 新手入