基于格的 Hash 函数(SWIFFT)& BKW 算法

参考文献:Daniele Micciancio and Oded Regev. Lattice-based cryptography. Post-quantum cryptography. Springer, Berlin, Heidelberg, 2009.

Hash

随机格上的Ajtai构造

Ajtai构造:

  1. 公共参数:整数 n , m , q , d n,m,q,d n,m,q,d

  2. 密钥:均匀随机矩阵 A ← R Z q n × m A \leftarrow_R Z_q^{n \times m} ARZqn×m

  3. 压缩函数:
    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,,d1}myZqnAymodq

由于函数从 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} AZqn×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)=Fa(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] Fa(i)=[a(i),Fa(i),,Fn1a(i)]
其中方阵 F F F

在这里插入图片描述

其中 f = ( f 0 , f 1 , ⋯   , f n − 1 ) f = (f_0,f_1,\cdots,f_{n-1}) f=(f0,f1,,fn1),而 I I I n − 1 n-1 n1阶单位阵。

上述的矩阵 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+fn1xn1++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++an1(i)xn1

如果 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)=xn1,从而 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=0n1aj(i),,j=0n1aj(i)]
都是 Z p Z_p Zp上的常数向量。随机选取 c 1 , ⋯   , c m / n ∈ Z q c_1,\cdots,c_{m/n} \in Z_q c1,,cm/nZq,那么 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=c1Zqn也是常数向量,一共只有 q q q种不同取值,利用生日攻击,复杂度仅为 O ( q ) O(\sqrt q) O(q )

Hash函数的构造如下:

  1. 公共参数:整数 n , m , q , d n,m,q,d n,m,q,d,其中 n ∣ m n \mid m nm,向量 f ∈ Z n f \in Z^n fZn

  2. 密钥:独立的均匀随机向量 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

  3. 压缩函数:
    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,,d1}myZqn[Fa(1)Fa(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([Fa(1)Fa(m/n)])中寻找短向量,与在最坏情况下的理想格中的近似SVP和近似SIVP问题一样难,只要 f f f满足:

  1. 对于任意单位向量 u , v u,v u,v,使得 [ F ∗ u ] v [F*u]v [Fu]v较小范数,一般选取 O ( n ) O(\sqrt{n}) O(n )
  2. 多项式 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+fn1xn1++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是自然数

  1. 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
  2. n = r k − 1 , r = 2 n = r^{k-1},r=2 n=rk1,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=2k1 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 2nq1,那么 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= 111ww3w2n1w2w6w4n2wn1w3(n1)w(2n1)(n1) =[w(2i1)(j1)]i=1,j=1n,n
是范德蒙矩阵,因此任意向量 a ∈ Z q n a \in Z_{q}^{n} aZqn左乘 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,,w2n1上分别求值。由于 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 [Fa]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[Fa]b=(Wa)(Wb)modq
这里的算符 ⊙ \odot 是矩阵的Hadamard积(即元素宽度的乘积)。上述的矩阵乘 W b Wb Wb可以使用反循环NTT来计算,复杂度为 n log ⁡ n n \log n nlogn

构造如下:

  1. 公共参数:整数 n , m , q , d n,m,q,d n,m,q,d,其中 n n n 2 2 2的幂次, n ∣ m n \mid m nm,且 2 n ∣ q − 1 2n|q-1 2nq1 w w w Z q ∗ Z_q^* Zq 2 n 2n 2n次本原单位根

  2. 密钥:独立的均匀随机向量 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

  3. 压缩函数:
    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,,d1}my=[y(1),,y(m/n)]Zqni=1m/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 nm,从而复杂度为 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} AZqn×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)={yZm:Ay0modq}qZm
里的短向量,可以执行如下步骤:

  1. 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=[G1G2k]

  2. 对每一组 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,Gic):c{b,,b}m/2k}

  3. 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 xlist1,ylist2,使得 x + y x+y x+y的前 log ⁡ q L \log_q L logqL个分量为零,得到 2 k − 1 2^{k-1} 2k1个表 l i s t i list_i listi,期望上每个表包含 L ⋅ L L = L \frac{L \cdot L}{L} = L LLL=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,[G2iG2i+1]c):c{b,,b}2m/2k}

  4. 2 k − 1 2^{k-1} 2k1个表两两组合,令 x ∈ l i s t 1 , y ∈ l i s t 2 x \in list_1,y \in list_2 xlist1,ylist2,使得 x + y x+y x+y的前 2 log ⁡ q L 2\log_q L 2logqL个分量为零,得到 2 k − 2 2^{k-2} 2k2个表 l i s t i list_i listi,包含大约 L L L个向量

  5. 继续两两组合,共迭代 k k k次,得到 1 1 1个表,它包含大约 L L L个前 k ⋅ log ⁡ q L k \cdot \log_q L klogqL个分量为零的向量。在算法中选择尽可能大的 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+12knlogqmlog(2b+1)

  6. 由于只剩下最后 n − k log ⁡ q L ≈ log ⁡ q L n-k\log_q L \approx \log_q L nklogqLlogqL个分量可能非零,而表中包含 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}2km/2k}是个短向量

  7. 于是,我们找到了 A y ≡ 0 m o d    q Ay \equiv 0 \mod q Ay0modq的一个短整数解 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/162100,从而它的SIS问题实例是足够难的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值