參考:連接html
一、定義在非空有限集合上的偏序集合 L,知足集合 L 中的任意元素 a,b,使得 a,b 在 L 中存在一個最大下界,和最小上界。算法
二、羣論中的定義,是 RnRn 中的知足某種性質的子集。固然,也能夠是其它羣。安全
一、格中計算問題的困難性,即這些問題的計算複雜性,主要有:atom
二、如何求解格中的困難性問題,目前既有近似算法,也有一些精確性算法。加密
三、基於格的密碼分析,即如何利用格理論分析一些已有的密碼學算法,目前有以下研究:spa
四、如何基於格困難問題設計新的密碼體制,這也是後量子密碼時代的重要研究方向之一,目前有如下研究:.net
參考:連接設計
時間 | 標誌事件 |
---|---|
18世紀–1982年 | 格經典數學問題的討論,表明人物:Lagrange,Gues,Hermite,MInkowski等 |
1982年–1996年 | 期間標誌性事件是LLL算法的提出(Lenstra-Lenstra-Lovasz) |
1996年–2005年 | 第一代格密碼誕生(Ajtai96, AD97G, GH9) |
2005年–2016年 | 第二代格密碼出現並逐步完善,並實用化格密碼算法 (Regev05, GPV08,MP12 BLISS ,NewHope, Frodo) |
2016年– | 格密碼逐步得以標準化 |
發展:3d
從前 | 如今 | |
---|---|---|
具備悠久歷史的格經典數學問題的研究 | ⟹ |
近30多年來高維格困難問題的求解算法及其計算複雜性理論研究 |
使用格困難問題的求解算法分析非格公鑰密碼體制的安全性 | ⟹ | 基於格困難問題的密碼體制的設計 |
優點:orm
格密碼 | 經典密碼 |
---|---|
量子攻擊算法 | Shor算法 |
矩陣乘法、多項式乘法 | Shor算法 |
Worst-case hardness | Average-case hardnes |
結構靈活、功能豐富 | 結構簡單、功能受限 |
簡而言之,格是n個線性無關向量的全部整係數的線性組合
一、det(A)
指方陣A的行列式
二、向量範數
三、基礎區域 F
一個格L的任何基礎區域都有着相同的 「體積」
下面的平行四邊形即爲一個【基礎區域F】
基礎區域 F 的n維體積稱爲 L 的行列式,記爲det L
四、Hadamard 不等式
L是一個格,任意一個基和基礎區域 F ,有
det L = vol(F)≤ || v1|| || v2|| .....|| vm|| ,基向量越接近垂直,等式越成立
vol(F)是F的體積
五、dim(L)
格的維度,即格的基中的向量個數
六、Hadamard比率
用於描述一組向量的正交程度
格的基 B ={v1,v2,...,vn},有
0< H(B)≤1,且越接近1,則基中的向量就越接近兩兩正交
matlab代碼實現:
function [result] = H(m) % 計算一組基的Hadamard比率 % 輸入:基向量做爲行向量所構成的方陣 % 輸出:當前基的Hadamard比率 % 一、取出矩陣中的每一個行向量 % 二、按照Hadamard比率公式計算 % 三、返回計算結果 n = size(m); %m是矩陣,size返回矩陣維度(行,列) n = n(1); %取行 product = 1; for i = 1:n product = product * norm(m(i,:)); % norm求每一個行向量的向量範數,product是 ||v1|| ||v2|| ... ||vn|| end result = (abs(det(m)) / product^1/n); %abs取絕對值,det是矩陣的行列式 end
七、格基相互轉化
格L的任意兩個基能夠經過在左邊乘上一個特定的矩陣來相互轉化,這個矩陣由整數構成,且它的行列式爲 ±1
八、生成優質基
隨機生成知足Hadamard比率的優質基
matlab代碼實現:
function result = good_basis(N,v,h) % 隨機生成一組優質基 % N是基向量的座標的絕對值上限,v是向量的個數(格的維度),h是Hadamard比率的下限 % 輸入:向量中座標的取值下限,基中向量的個數,Hadamard比率的下限 % 輸出:矩陣形式的優質基 % 一、根據取值下限和維度,隨機生成矩陣 % 二、調用H()計算Hadamard比率 % 三、若比率大於下限,則返回該矩陣,不然跳轉1 result = unidrnd(2*N,v) - N; %unidrnd 返回隨機方陣 while H(result) < h result = unidrnd(2*N,v) - N; end end
九、計算矩陣行範數
matlab代碼實現:
function [result] = row_norm(m) %計算一個矩陣的行範式 % 輸入:矩陣形式的一組基 % 輸出:一個包含每個行向量範數的列向量 % 一、取出矩陣中的每一個行向量 % 二、計算每一個行向量的範數 % 三、返回計算結果 n = size(m); result = zeros(n(1),1); % 返回一個全0的矩陣(n(1)行,1列) for i = 1:n(1) result(i,1) = norm(m(i,:)); % 每一個列向量的第一個位向量範數 end end
十、向量正交化
施密特正交化:
matlab代碼實現:
function [M] = orthogonal(m) % 使用施密特正交化對矩陣m以行爲單位進行正交化,並未單位化 % 輸入:矩陣形式的一組基 % 輸出:正交化後的矩陣 n = size(m); M = zeros(n); n = n(1); M(1,:) = m(1,:); for i = 2:n M(i,:) = m(i,:); for j = 1:i-1 u_ij = dot(m(i,:),M(j,:)) / (norm(M(j,:))^2); M(i,:) = M(i,:) - u_ij * M(j,:); end end end
最基本的難題SVP和CVP,其餘的困難問題可由這兩種問題變形獲得。
Shortest Vector Problem,最短向量問題
在格中尋找一個最短的非零向量,即尋找一個向量 v∈ L,使得它的歐幾里得範數 ||v|| 最小
問題:一個格的最短非零向量多長?
高斯指望(高斯啓發式)能夠求出最短向量問題
Closest Vector Problem,最近向量問題
給定一個不在格L中的向量 t∈Rm ,尋找一個向量 v∈ L,使得它最接近w,即尋找一個向量 v∈ L,使得它的歐幾里得範數 ||w - v|| 最小
問題:如何使向量接近兩兩正交的基來求解最近向量問題?
方法1:尋找頂點法
「優基」適合,「劣基」不合適
方法2:
Babai算法
功能:將一個劣質基轉換成一個優質基,且優質基中的第一個行向量就是格中的最短非零向量
算法爲兩部分:
劣質基會變得更優,且基中向量的範數也會適當的減少
matlab代碼實現:
function [result] = LLL(v) % 格基約減的控制算法,對矩陣處理,v是每行的行向量 % 輸入:矩陣形式的一組基 % 輸出: 約減一次後的基 a = LLL_if(v); b= LLL_if(a); while a ~= b % a和b不一樣時 a = b; b = LLL_if(b); end result = b; end
控制基格約減的循環條件
matlab代碼實現:
function [result] = LLL_if(v) % LLL約減算法 % 輸入:矩陣形式的一組基 % 輸出:約減後的基 % 一、對輸入參數,調用LLL() % 二、對1的結果再次調用LLL() % 三、重複2,直到結果再也不變化 % 四、返回再也不變化的結果 n = size(v); n = n(1); k = 2; while k <= n V = orthogonal(v(1:k,:)); for j = 1:k-1 u = dot(v(k,:),V(j,:)) / (norm(V(j,:))^2); v(k,:) = v(k,:) - round(u) * v(l,:); end u = dot(v(k,:),V(k-1,:)) / (norm(V(k-1,:))^2); if norm(V(k,:))^2 >= (3/4 - u^2) * norm(V(k-1,:))^2 k = k + 1; else temp = v(k-1,:); v(k-1,:) =v(k,:); v(k,:) = temp; k = max(k-1,2); end end result = v; return; end