本文是阅读 Introduction of Mathematical Cryptography Second Edition 一书中关于格密码一章的Review,只讲述简单的总结,具体内容请翻阅该书的第七章(下文中大部分图片均来自此书)
同余密码体系与背包密码
同余(Congruence)密码 流程如下,可以看做一个低维的格密码,破解该种密码可以相当于找一个向量,这个向量就是私钥
将上面这个问题用向量的形式写出来,就是要找一个 a 1 , a 2 ∈ Z a_1,a_2\in \mathbb{Z} a1,a2∈Z来找到一个小的向量,如下面的表达式所示
L = { a 1 v 1 + a 2 v 2 : a 1 , a 2 ∈ Z } L=\{a_1v_1+a_2v_2:a_1,a_2\in\mathbb{Z}\} L={
a1v1+a2v2:a1,a2∈Z}
使用格理论可以解出。
背包密码 (Knapsack Cryptosystem)关注于背包问题,一个简单的例子是Subset-sum problem,在这一章里作者举出了Merkle-Hellman subset-sum cryptosystem作为例子,如下所示:
要破解这个密码系统,我们要根据密文S获得明文 x \boldsymbol{x} x,就是说找到一个 x = ( x 1 , … , x n ) \boldsymbol{x}=\left(x_{1}, \ldots, x_{n}\right) x=(x1,…,xn) ,使得 S = x 1 m 1 + x 2 m 2 + . . . + x n m n S=x_1m_1+x_2m_2+...+x_nm_n S=x1m1+x2m2+...+xnmn,将问题转换为下面的向量问题:
v 1 = ( 2 , 0 , 0 , … , 0 , m 1 ) v 2 = ( 0 , 2 , 0 , … , 0 , m 2 ) ⋮ v n = ( 0 , 0 , 0 , … , 2 , m n ) v n + 1 = ( 1 , 1 , 1 , … , 1 , S ) \begin{array}{c} {\boldsymbol{v}_{1}=\left(2,0,0, \ldots, 0, m_{1}\right)} \\ {\boldsymbol{v}_{2}=\left(0,2,0, \ldots, 0, m_{2}\right)} \\ {\vdots} \\ {\boldsymbol{v}_{n}=\left(0,0,0, \ldots, 2, m_{n}\right)} \\ {\boldsymbol{v}_{n+1}=(1,1,1, \ldots, 1, S)} \end{array} v1=(2,0,0,…,0,m1)v2=(0,2,0,…,0,m2)⋮vn=(0,0,0,…,2,mn)vn+1