参考文献:
- [Prange62] Eugene Prange. The use of information sets in decoding cyclic codes. IRE Trans. Inf. Theory 8(5): 5-9 (1962).
- [Stern88] Jacques Stern. A method for finding codewords of small weight. Coding Theory and Applications 1988: 106-113.
- [Dumer89] Il’ya Isaakovich Dumer. Two decoding algorithms for linear codes. Problemy Peredachi Informatsii, 25(1):24–32, 1989.
- [HG10] Nick Howgrave-Graham, Antoine Joux. New Generic Algorithms for Hard Knapsacks. EUROCRYPT 2010: 235-256.
Information Set Decoding
目前求解汉明距离下校验子译码问题的最有效算法是 Information Set Decoding,最早由 [Prange62] 提出。所谓线性码 C C C 的信息集,就是一个指标集 J ⊆ [ n ] J \subseteq [n] J⊆[n],满足 ∣ J ∣ = k |J|=k ∣J∣=k 以及 ∣ C J ∣ = 2 k |C_J|=2^k ∣CJ∣=2k,其中 C J : = { c J ∣ c ∈ C } C_J := \{c_J \mid c \in C\} CJ:={cJ∣c∈C}。系统型生成矩阵满足 G J = I k G_J=I_k GJ=Ik,系统型校验矩阵满足 H J C = I n − k H_{J^C}=I_{n-k} HJC=In−k,这里 J C J^C JC 表示补集。
给定一个 SD 问题实例 ( H , s : = e H T ) (H,s:=eH^T) (H,s:=eHT),其中 H ∈ Z 2 ( n − k ) × n H \in \Z_2^{(n-k)\times n} H∈Z2(n−k)×n,以及 e ∈ Z 2 n e \in \Z_2^n e∈Z2n 满足 w t ( e ) ≤ w wt(e) \le w wt(e)≤w,那么 ISD 的基本步骤是,
-
找出(随机的)可逆矩阵 U ∈ Z 2 ( n − k ) × ( n − k ) U \in \Z_2^{(n-k) \times (n-k)} U∈Z2(n−k)×(n−k) 和置换矩阵 P ∈ Z 2 n × n P \in \Z_2^{n \times n} P∈Z2n×n(正交矩阵, P P T = P T P = I PP^T=P^TP=I PPT=PTP=I),将 H H H 变换为 quasi-systematic form,
U H P = H ~ = [ I n − k − l H 1 0 H 2 ] UHP = \tilde H = \begin{bmatrix} I_{n-k-l} & H_1\\ 0 & H_2 \end{bmatrix} UHP=H~=[In−k−l0H1H2] -
那么未知的 e e e 被转换为 e P T = ( e 1 , e 2 ) ∈ Z 2 n − k − l × Z 2 k + l eP^T = (e_1,e_2) \in \Z_2^{n-k-l} \times \Z_2^{k+l} ePT=(e1,e2)∈Z2n−k−l×Z2k+l,并且满足
e 1 + e 2 H 1 T = s 1 e 2 H 2 T = s 2 \begin{aligned} e_1+e_2H_1^T &= s_1\\ e_2H_2^T &= s_2 \end{aligned} e1+e2H1Te2H2T=s1=s2
其中 s U T = ( s 1 , s 2 ) ∈ Z 2 n − k − l × Z 2 l sU^T = (s_1,s_2) \in \Z_2^{n-k-l} \times \Z_2^{l} sUT=(s1,s2)∈Z2n−k−l×Z2l 是已知的 -
在第二个方程的解空间中枚举 e 2 e_2 e2,然后计算 e 1 = s 1 − e 2 H 1 T e_1 = s_1-e_2H_1^T e1=s1−e2H1T,检查条件 w t ( e 1 , e 2 ) ≤ w wt(e_1,e_2) \le w wt(e1,e2)≤w 是否被满足
Stern/Dumer algorithm
[Stern88] 和 [Dumer89] 引入了 meet-in-the-middle 策略,进一步将
e
2
e_2
e2 和
H
2
H_2
H2 拆分为两段,构建两个列表
L
1
:
=
{
(
x
1
,
x
1
H
2
(
1
)
)
∣
x
1
∈
Z
2
⌊
(
k
+
l
)
/
2
⌋
}
L
2
:
=
{
(
x
2
,
s
2
−
x
2
H
2
(
2
)
)
∣
x
2
∈
Z
2
⌈
(
k
+
l
)
/
2
⌉
}
\begin{aligned} L_1 &:= \left\{\left(x_1, x_1H_2^{(1)}\right) \mid x_1 \in \Z_2^{\lfloor(k+l)/2\rfloor}\right\}\\ L_2 &:= \left\{\left(x_2, s_2-x_2H_2^{(2)}\right) \mid x_2 \in \Z_2^{\lceil(k+l)/2\rceil}\right\} \end{aligned}
L1L2:={(x1,x1H2(1))∣x1∈Z2⌊(k+l)/2⌋}:={(x2,s2−x2H2(2))∣x2∈Z2⌈(k+l)/2⌉}
然后找到一对
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2),使之发生碰撞
x
1
H
2
(
1
)
=
s
2
−
x
2
H
2
(
2
)
x_1H_2^{(1)} = s_2-x_2H_2^{(2)}
x1H2(1)=s2−x2H2(2),那么就获得了
e
2
=
(
x
1
,
x
2
)
e_2=(x_1,x_2)
e2=(x1,x2) 满足
e
2
H
2
=
s
2
e_2H_2=s_2
e2H2=s2,然后继续计算
e
1
e_1
e1 并判断
w
t
(
e
)
≤
w
wt(e) \le w
wt(e)≤w 是否满足
Representation Technique
[HG10] 提出的表示技术,其思路是写出 e 2 = e ( 1 ) + e ( 2 ) e_2 = e^{(1)}+e^{(2)} e2=e(1)+e(2),其中 e ( 1 ) , e ( 2 ) ∈ Z 2 k + l e^{(1)},e^{(2)} \in \Z_2^{k+l} e(1),e(2)∈Z2k+l 的重量为 w ∗ ≥ w 2 / 2 w^* \ge w_2/2 w∗≥w2/2(可能相消,需更大),使得两者加和的重量为 w 2 w_2 w2(假设 w t ( e 2 ) = w 2 wt(e_2)=w_2 wt(e2)=w2)
构造两个列表,
S
1
:
=
{
(
e
(
1
)
,
e
(
1
)
H
2
)
∣
e
(
1
)
∈
Z
2
k
+
l
,
w
t
(
e
(
1
)
)
=
w
∗
}
S
2
:
=
{
(
e
(
2
)
,
s
2
−
e
(
2
)
H
2
)
∣
e
(
2
)
∈
Z
2
k
+
l
,
w
t
(
e
(
2
)
)
=
w
∗
}
\begin{aligned} S_1 &:= \left\{\left(e^{(1)}, e^{(1)}H_2\right) \mid e^{(1)} \in \Z_2^{k+l}, wt(e^{(1)})=w^*\right\}\\ S_2 &:= \left\{\left(e^{(2)}, s_2-e^{(2)}H_2\right) \mid e^{(2)} \in \Z_2^{k+l}, wt(e^{(2)})=w^*\right\} \end{aligned}
S1S2:={(e(1),e(1)H2)∣e(1)∈Z2k+l,wt(e(1))=w∗}:={(e(2),s2−e(2)H2)∣e(2)∈Z2k+l,wt(e(2))=w∗}
然后找到一对
(
e
(
1
)
,
e
(
2
)
)
(e^{(1)},e^{(2)})
(e(1),e(2)),使之发生碰撞
e
(
1
)
H
2
=
s
2
−
e
(
2
)
H
2
e^{(1)}H_2=s_2-e^{(2)}H_2
e(1)H2=s2−e(2)H2,那么就得到了
e
2
=
e
(
1
)
+
e
(
2
)
e_2=e^{(1)}+e^{(2)}
e2=e(1)+e(2) 满足
e
2
H
2
=
s
2
e_2H_2=s_2
e2H2=s2,然后判断
w
t
(
e
2
)
=
w
2
wt(e_2)=w_2
wt(e2)=w2 是否成立
Cost
对于
S
D
n
,
k
,
w
SD_{n,k,w}
SDn,k,w 实例,ISD 算法的开销为
W
F
I
S
D
(
n
,
k
,
w
)
=
2
c
⋅
w
⋅
(
1
+
o
(
1
)
)
WF_{ISD}(n,k,w) = 2^{c \cdot w \cdot (1+o(1))}
WFISD(n,k,w)=2c⋅w⋅(1+o(1))
其中
c
=
log
1
1
−
R
c = \log \frac{1}{1-R}
c=log1−R1,这里
R
=
k
/
n
R=k/n
R=k/n