格(Lattice)
什么是 lattice? 它是 n 维空间中具有周期结构的点集合,如图1所示。
让 v1,v2,⋯,vn 是在 n 维欧几里得空间(Euclidean space) Rn 中的独立向量(independent vectors)。格(lattice)记作 L ,它是由 {v1,v2,⋯,vn} 的线性组合的集合, v1,v2,⋯,vn 的系数为整数:
L={a1v1+a2v2+⋯+anvn,ai∈Z}
备注: L 的基是生成 L 的 n 个独立向量的任意集合。格子有无穷多个基。
为了方便,通常可以把 {v1,v2,⋯,vn} 的线性组合写作矩阵形式。换句话说,假设 {v1,v2,⋯,vn} 是格 L 的一组基,因此可以化简为:
如果用线在所有格都连起来,那么格在 Rn 中就是一个拥有周期性且无限延伸的网格,在二维平面上就好像切起来的砖头一样好看。
如果是个n维度的话格就是一个圆吗?
- 如图2中的(a)所示,通过 (1,0)T 和(0,1)T 生成的格为 Z2 ,包含所有整数的格(Integer Lattice)。
- 当然,整数格的基向量并不是唯一的,如图2中的(b)所示,通过 (1,1)T 和(2,1)T 或(2005,1)T 和(2006,1)T 同样能够生成 Z2。
- 如图2中(c)所示,(1,1)T和(2,0)T不是 Z2的基向量,相反,它生成的整数格中,整数坐标的和为偶数。以上,所有的例子都是满格。
- 如图2(d)所示,一个不是满格的例子是 L((2,1)T) 。 它是秩为1的2维格。
- 最后, Z=L((1)) 是一维满格。
看一个密码学方案:它是 lattice 可用于传统公钥密码分析的例证,另外也是 NTRU 公钥密码体系的一个低端版本。
首先,Alice 选择一个大整数 q 作为公共参数。然后选择两个比较小的整数 f,g 满足:
接下来,Alice 计算:
这里f虽然很小但是逆元后会很大,Alice的公钥是h,私钥是<f,g>
在来考虑 Bob 如何给 Alice 发送消息。首先,Bob 有一个小于 q/4 的明文 m,然后他随机选择整数 r<q/2. 计算:
e≡rh+m(modq)将 e 作为密文发送给 Alice. 接下来 Alice 如此解密:先计算
a≡fe(modq)
然后计算
b≡f−1a(modg)
其中 f 的逆元也是在模 g 群中的。
我们断言这里求出来的 b,就等于 m.
首先,有 a 满足a≡fe≡rg+fm(modq)我们注意到,从而知道 a 就是 rg+fm 的真实值,即a=rg+fm
接下来的步骤就顺理成章了。将 a 模掉 g,分离出 fm(modg);然后乘以 f 的逆元得到 m(modg). 而 m 是小于 g 的,从而这个 m 是真实值。
现在,我们来考虑敌手 Eve 如何攻击这个密码体系。仅仅已知公钥 (q,h),她并不能找到真正的 (f,g);但她可以找到一组 (F,G),如果 (F,G) 在解密时表现与 (f,g) 相同,那么 Eve 就可以完成解密工作。具体而言,她需要找到 F,G 满足Fh≡G(modq),F=O(q),G=O(q)显然真正的 (f,g) 是合法的 (F,G). 现在的问题是为什么这样的 (F,G) 可以用于解密。我们有Fe≡F⋅(rh+m)≡rG+Fm(modq)注意到这求出了 rG+Fm 的真实值。继续按照原先的解密算法来操作,模掉 G 获得 Fm(modG),乘以 F 的逆元,即可恢复出 m.
也就是说,Eve 只需要找到合法的 (F,G),就可以攻破这个密码体系。将 Fh≡G(modR) 改写为等价形式 Fh=G+qR,那么 Eve 的任务就是找到足够小的 F,G 使得F(1,h)−R(0,q)=(F,G)
这个式子等价于 (1,h),(0,q) 这两个向量以 F,R 为系数进行线性组合。如果我们能找到合适的 F,R,使得线性组合出来的向量足够短,那么我们就找到了合法的 (F,G) 来攻击密码体系。
上面的问题可以概括为:有两个已知的向量,需要找出一套线性组合系数(必须是整数),来生成一个足够短的向量。Eve 的任务是:已知 v1=(1,h) 和 v2=(0,q),长度均为 O(q),要寻找它们的线性组合 w=a1v1+a2v2,长度为 O(q). 要求系数 a1,a2 均为整数。
从 lattice 的角度看,Eve 是在一个 lattice L 中寻找一个很短的向量:L={a1v1+a2v2:a1,a2∈Z}