参考文献:Daniele Micciancio and Oded Regev. Lattice-based cryptography. Post-quantum cryptography. Springer, Berlin, Heidelberg, 2009.
Hash
随机格上的Ajtai构造
Ajtai构造:
-
公共参数:整数 n , m , q , d n,m,q,d n,m,q,d
-
密钥:均匀随机矩阵 A ← R Z q n × m A \leftarrow_R Z_q^{n \times m} A←RZqn×m
-
压缩函数:
f A : { 0 , ⋯ , d − 1 } m → Z q n y → A y m o d q \begin{aligned} f_A: \{0,\cdots,d-1\}^m &\to Z_q^n\\ y &\to Ay \mod q \end{aligned} fA:{0,⋯,d−1}my→Zqn→Aymodq
由于函数从
m
log
d
m \log d
mlogd比特映射到
n
log
q
n \log q
nlogq比特,因此需要使得
m
>
n
log
q
log
d
m > \dfrac{n \log q}{\log d}
m>logdnlogq
一般的,选取
d
=
2
d=2
d=2,
q
=
n
2
q=n^2
q=n2,
m
=
2
n
log
q
=
4
n
log
n
m = 2n \log q = 4n \log n
m=2nlogq=4nlogn,从而这个Hash函数的安全性依赖于整数
n
n
n
上述构造的Hash函数是OWF:如果 f A f_A fA可逆,那么就解决了SIS问题。
理想格上的Hash函数
由于
A
∈
Z
q
n
×
m
A \in Z_q^{n \times m}
A∈Zqn×m对于一个Hash函数来说过大了,因此我们希望减小它的大小。使用分块矩阵:
A
=
[
A
(
1
)
∣
⋯
∣
A
(
m
/
n
)
]
A = \left[A^{(1)}|\cdots|A^{(m/n)}\right]
A=[A(1)∣⋯∣A(m/n)]
并且令
A
(
i
)
=
F
∗
a
(
i
)
A^{(i)} = F*a^{(i)}
A(i)=F∗a(i),定义如下
F
∗
a
(
i
)
=
[
a
(
i
)
,
F
a
(
i
)
,
⋯
,
F
n
−
1
a
(
i
)
]
F*a^{(i)} = \left[a^{(i)},Fa^{(i)},\cdots,F^{n-1}a^{(i)}\right]
F∗a(i)=[a(i),Fa(i),⋯,Fn−1a(i)]
其中方阵
F
F
F为
其中 f = ( f 0 , f 1 , ⋯ , f n − 1 ) f = (f_0,f_1,\cdots,f_{n-1}) f=(f0,f1,⋯,fn−1),而 I I I是 n − 1 n-1 n−1阶单位阵。
上述的矩阵
A
(
i
)
A^{(i)}
A(i)是理想格(ideal lattices),可以嵌入到商环
Z
[
x
]
/
(
f
(
x
)
)
Z[x]/(f(x))
Z[x]/(f(x))的理想
(
a
(
i
)
(
x
)
)
(a^{(i)}(x))
(a(i)(x))上,这里
f
(
x
)
=
x
n
+
f
n
−
1
x
n
−
1
+
⋯
+
f
1
x
+
f
0
f(x) = x^n + f_{n-1}x^{n-1}+\cdots+f_1x+f_0
f(x)=xn+fn−1xn−1+⋯+f1x+f0
a ( i ) ( x ) = a 0 ( i ) + a 1 ( i ) x + ⋯ + a n − 1 ( i ) x n − 1 a^{(i)}(x) = a_0^{(i)} + a_1^{(i)}x + \cdots + a_{n-1}^{(i)}x^{n-1} a(i)(x)=a0(i)+a1(i)x+⋯+an−1(i)xn−1
如果
f
=
(
−
1
,
0
,
⋯
,
0
)
f = (-1,0,\cdots,0)
f=(−1,0,⋯,0),那么
f
(
x
)
=
x
n
−
1
f(x)=x^n-1
f(x)=xn−1,从而
A
(
i
)
A^{(i)}
A(i)是循环矩阵,即第
j
j
j列是将列向量
a
(
i
)
a^{(i)}
a(i)循环移位
j
j
j次。此时,构造的Hash函数不抗碰撞:
A
(
i
)
A^{(i)}
A(i)是循环矩阵,所以
Z
p
Z_p
Zp上的常数向量
c
i
1
=
(
c
i
,
⋯
,
c
i
)
c_i\pmb1=(c_i,\cdots,c_i)
ci1=(ci,⋯,ci)与它相乘,得到的向量
A
(
i
)
⋅
c
i
1
=
c
i
[
∑
j
=
0
n
−
1
a
j
(
i
)
,
⋯
,
∑
j
=
0
n
−
1
a
j
(
i
)
]
A^{(i)}\cdot c_i\pmb1 = c_i[\sum_{j=0}^{n-1} a^{(i)}_j,\cdots,\sum_{j=0}^{n-1} a^{(i)}_j]
A(i)⋅ci1=ci[j=0∑n−1aj(i),⋯,j=0∑n−1aj(i)]
都是
Z
p
Z_p
Zp上的常数向量。随机选取
c
1
,
⋯
,
c
m
/
n
∈
Z
q
c_1,\cdots,c_{m/n} \in Z_q
c1,⋯,cm/n∈Zq,那么
A
[
c
1
1
,
⋯
,
c
m
/
n
1
]
T
=
c
1
∈
Z
q
n
A[c_1\pmb1,\cdots,c_{m/n}\pmb1]^T = c\pmb1 \in Z_q^n
A[c11,⋯,cm/n1]T=c1∈Zqn也是常数向量,一共只有
q
q
q种不同取值,利用生日攻击,复杂度仅为
O
(
q
)
O(\sqrt q)
O(q)
Hash函数的构造如下:
-
公共参数:整数 n , m , q , d n,m,q,d n,m,q,d,其中 n ∣ m n \mid m n∣m,向量 f ∈ Z n f \in Z^n f∈Zn
-
密钥:独立的均匀随机向量 a ( 1 ) , ⋯ , a ( m / n ) ← R Z q n a^{(1)},\cdots,a^{(m/n)} \leftarrow_R Z_q^{n} a(1),⋯,a(m/n)←RZqn
-
压缩函数:
f A : { 0 , ⋯ , d − 1 } m → Z q n y → [ F ∗ a ( 1 ) ∣ ⋯ ∣ F ∗ a ( m / n ) ] y m o d q \begin{aligned} f_A: \{0,\cdots,d-1\}^m &\to Z_q^n\\ y &\to \left[F*a^{(1)} | \cdots | F*a^{(m/n)}\right]y \mod q \end{aligned} fA:{0,⋯,d−1}my→Zqn→[F∗a(1)∣⋯∣F∗a(m/n)]ymodq
在平均情况下的对偶格 Λ q ⊥ ( [ F ∗ a ( 1 ) ∣ ⋯ ∣ F ∗ a ( m / n ) ] ) \Lambda_q^\perp(\left[F*a^{(1)} | \cdots | F*a^{(m/n)}\right]) Λq⊥([F∗a(1)∣⋯∣F∗a(m/n)])中寻找短向量,与在最坏情况下的理想格中的近似SVP和近似SIVP问题一样难,只要 f f f满足:
- 对于任意单位向量 u , v u,v u,v,使得 [ F ∗ u ] v [F*u]v [F∗u]v有较小范数,一般选取 O ( n ) O(\sqrt{n}) O(n)
- 多项式 f ( x ) = x n + f n − 1 x n − 1 + ⋯ + f 1 x + f 0 f(x) = x^n + f_{n-1}x^{n-1} +\cdots+ f_1x + f_0 f(x)=xn+fn−1xn−1+⋯+f1x+f0是不可约的
可以验证,循环格对应的 f = ( − 1 , 0 , ⋯ , 0 ) f = (-1,0,\cdots,0) f=(−1,0,⋯,0)满足性质 1 1 1但不满足性质 2 2 2。一般地,可以选取分圆多项式 Q r k ( x ) Q_{r^k}(x) Qrk(x)对应的 f f f,其中 r r r是素数, k k k是自然数
- 令 n + 1 = r , k = 1 n+1=r,k=1 n+1=r,k=1,那么 f = ( 1 , 1 , ⋯ , 1 ) ∈ Z n f = (1,1,\cdots,1) \in Z^n f=(1,1,⋯,1)∈Zn
- 令 n = r k − 1 , r = 2 n = r^{k-1},r=2 n=rk−1,r=2,那么 f = ( 1 , 0 , ⋯ , 0 ) ∈ Z n f = (1,0,\cdots,0) \in Z^n f=(1,0,⋯,0)∈Zn
分圆多项式是有理数域上的不可约整系数多项式。
SWIFFT Hash函数
我们设置
n
=
2
k
−
1
n=2^{k-1}
n=2k−1,
f
=
(
1
,
0
,
⋯
,
0
)
f = (1,0,\cdots,0)
f=(1,0,⋯,0),于是
f
(
x
)
=
x
n
+
1
f(x)=x^n+1
f(x)=xn+1是不可约多项式。选取
2
n
∣
q
−
1
2n \mid q-1
2n∣q−1,那么
G
F
(
q
)
GF(q)
GF(q)中包含
2
n
2n
2n次单位根。我们令
W
=
[
1
w
w
2
⋯
w
n
−
1
1
w
3
w
6
⋯
w
3
(
n
−
1
)
⋮
1
w
2
n
−
1
w
4
n
−
2
⋯
w
(
2
n
−
1
)
(
n
−
1
)
]
=
[
w
(
2
i
−
1
)
(
j
−
1
)
]
i
=
1
,
j
=
1
n
,
n
W = \begin{bmatrix} 1 & w & w^2 & \cdots & w^{n-1}\\ 1 & w^3 & w^6 & \cdots & w^{3(n-1)}\\ \vdots\\ 1 & w^{2n-1} & w^{4n-2} & \cdots & w^{(2n-1)(n-1)}\\ \end{bmatrix} = \left[ w^{(2i-1)(j-1)} \right]_{i=1,j=1}^{n,n}
W=
11⋮1ww3w2n−1w2w6w4n−2⋯⋯⋯wn−1w3(n−1)w(2n−1)(n−1)
=[w(2i−1)(j−1)]i=1,j=1n,n
是范德蒙矩阵,因此任意向量
a
∈
Z
q
n
a \in Z_{q}^{n}
a∈Zqn左乘
W
W
W就是多项式
a
(
x
)
a(x)
a(x)在点
w
,
w
3
,
⋯
,
w
2
n
−
1
w,w^3,\cdots,w^{2n-1}
w,w3,⋯,w2n−1上分别求值。由于
w
w
w的阶为
2
n
2n
2n,那么这些点各不相同,从而
W
W
W是可逆阵。因此,如果随机选取
a
(
i
)
a^{(i)}
a(i),那么
a
ˉ
(
i
)
=
W
a
(
i
)
\bar a^{(i)} = Wa^{(i)}
aˉ(i)=Wa(i)也是均匀随机的。
容易看出
[
F
∗
a
]
b
[F*a]b
[F∗a]b是环
Z
[
x
]
/
(
f
(
x
)
)
Z[x]/(f(x))
Z[x]/(f(x))上的多项式乘法,从而
W
⋅
[
F
∗
a
]
b
=
(
W
a
)
⊙
(
W
b
)
m
o
d
q
W \cdot \left[ F*a \right]b = (Wa) \odot (Wb) \mod q
W⋅[F∗a]b=(Wa)⊙(Wb)modq
这里的算符
⊙
\odot
⊙是矩阵的Hadamard积(即元素宽度的乘积)。上述的矩阵乘
W
b
Wb
Wb可以使用反循环NTT来计算,复杂度为
n
log
n
n \log n
nlogn
构造如下:
-
公共参数:整数 n , m , q , d n,m,q,d n,m,q,d,其中 n n n是 2 2 2的幂次, n ∣ m n \mid m n∣m,且 2 n ∣ q − 1 2n|q-1 2n∣q−1, w w w是 Z q ∗ Z_q^* Zq∗的 2 n 2n 2n次本原单位根
-
密钥:独立的均匀随机向量 a ˉ ( 1 ) , ⋯ , a ˉ ( m / n ) ← R Z q n \bar a^{(1)},\cdots,\bar a^{(m/n)} \leftarrow_R Z_q^{n} aˉ(1),⋯,aˉ(m/n)←RZqn
-
压缩函数:
f A : { 0 , ⋯ , d − 1 } m → Z q n y = [ y ( 1 ) , ⋯ , y ( m / n ) ] → ∑ i = 1 m / n ( a ˉ ( i ) ⊙ W y ( i ) ) \begin{aligned} f_A: && \{0,\cdots,d-1\}^m &\to Z_q^n\\ && y=\left[ y^{(1)},\cdots,y^{(m/n)} \right] &\to \sum_{i=1}^{m/n} \left( \bar a^{(i)} \odot Wy^{(i)} \right) \end{aligned} fA:{0,⋯,d−1}my=[y(1),⋯,y(m/n)]→Zqn→i=1∑m/n(aˉ(i)⊙Wy(i))
需要计算 m / n m/n m/n次反循环NTT,因此总的复杂度为 O ( m log n ) O(m \log n) O(mlogn),一般地 n ≪ m n \ll m n≪m,从而复杂度为 O ~ ( m ) \tilde O(m) O~(m)(这里 O ~ ( g ( n ) \tilde O(g(n) O~(g(n)是 O ( g ( n ) log k n ) O(g(n) \log^k n) O(g(n)logkn)的简写)
在上述参数下,SWIFFT Hash函数的吞吐率,接近Sha-2函数族。
BKW
为了计算关于矩阵
A
∈
Z
q
n
×
m
A \in Z_q^{n \times m}
A∈Zqn×m的对偶格
Λ
q
⊥
(
A
)
=
{
y
∈
Z
m
:
A
y
≡
0
m
o
d
q
}
⊇
q
Z
m
\Lambda_q^\perp(A) = \{y \in Z^m : Ay \equiv 0 \mod q\} \supseteq qZ^m
Λq⊥(A)={y∈Zm:Ay≡0modq}⊇qZm
里的短向量,可以执行如下步骤:
-
将 A A A按列分为 2 k 2^k 2k组,每组包含 m / 2 k m/2^k m/2k个列向量, A = [ G 1 ∣ ⋯ ∣ G 2 k ] A=[G_1|\cdots|G_{2^k}] A=[G1∣⋯∣G2k]
-
对每一组 G i G_i Gi,计算所有的线性组合,组合系数 c c c取自 { − b , ⋯ , 0 , ⋯ , b } \{-b,\cdots,0,\cdots,b\} {−b,⋯,0,⋯,b},得到 L = ( 2 b + 1 ) m / 2 k L = (2b+1)^{m/2^k} L=(2b+1)m/2k个向量,
l i s t i = { ( c , G i ⋅ c ) : c ∈ { − b , ⋯ , b } m / 2 k } list_i = \{(c,\,\,G_i \cdot c): c \in \{-b,\cdots,b\}^{m/2^k}\} listi={(c,Gi⋅c):c∈{−b,⋯,b}m/2k} -
将 2 k 2^k 2k个表两两组合,令 x ∈ l i s t 1 , y ∈ l i s t 2 x \in list_1,y \in list_2 x∈list1,y∈list2,使得 x + y x+y x+y的前 log q L \log_q L logqL个分量为零,得到 2 k − 1 2^{k-1} 2k−1个表 l i s t i list_i listi,期望上每个表包含 L ⋅ L L = L \frac{L \cdot L}{L} = L LL⋅L=L个向量,
l i s t i = { ( c , [ G 2 i ∣ G 2 i + 1 ] ⋅ c ) : c ∈ { − b , ⋯ , b } 2 ⋅ m / 2 k } list_i = \{(c,\,\,[G_{2i}|G_{2i+1}] \cdot c): c \in \{-b,\cdots,b\}^{2 \cdot m/2^{k}}\} listi={(c,[G2i∣G2i+1]⋅c):c∈{−b,⋯,b}2⋅m/2k} -
将 2 k − 1 2^{k-1} 2k−1个表两两组合,令 x ∈ l i s t 1 , y ∈ l i s t 2 x \in list_1,y \in list_2 x∈list1,y∈list2,使得 x + y x+y x+y的前 2 log q L 2\log_q L 2logqL个分量为零,得到 2 k − 2 2^{k-2} 2k−2个表 l i s t i list_i listi,包含大约 L L L个向量
-
继续两两组合,共迭代 k k k次,得到 1 1 1个表,它包含大约 L L L个前 k ⋅ log q L k \cdot \log_q L k⋅logqL个分量为零的向量。在算法中选择尽可能大的 k k k,它满足:
n ≈ ( k + 1 ) log q L n \approx (k+1) \log_q L n≈(k+1)logqL
或者说,
2 k k + 1 ≈ m log ( 2 b + 1 ) n log q \dfrac{2^k}{k+1} \approx \dfrac{m \log(2b+1)}{n \log q} k+12k≈nlogqmlog(2b+1) -
由于只剩下最后 n − k log q L ≈ log q L n-k\log_q L \approx \log_q L n−klogqL≈logqL个分量可能非零,而表中包含 L L L个向量,因此在期望上包含一个零向量,它对应的系数 c ∈ { − b , ⋯ , b } 2 k ⋅ m / 2 k } c \in \{-b,\cdots,b\}^{2^k \cdot m/2^{k}}\} c∈{−b,⋯,b}2k⋅m/2k}是个短向量
-
于是,我们找到了 A y ≡ 0 m o d q Ay \equiv 0 \mod q Ay≡0modq的一个短整数解 c c c,它是对偶格 Λ q ⊥ \Lambda_q^\perp Λq⊥的近似SVP的解,或者说SIS解
容易看出,算法复杂度为 O ( 2 k L 2 ) O(2^k L^2) O(2kL2)。
对于SWIFFT Hash函数的对偶格,选取 b = 1 , k = 4 b=1,k=4 b=1,k=4,那么 L = 3 m / 16 ≥ 2 100 L = 3^{m/16} \ge 2^{100} L=3m/16≥2100,从而它的SIS问题实例是足够难的。