McEliece PKC
令 ( n , k ) q (n,k)_q (n,k)q线性码 C \mathscr C C可以纠正 t ≪ n t \ll n t≪n位错, G ∈ G F ( q ) k × n G \in GF(q)^{k \times n} G∈GF(q)k×n是生成矩阵,令 D C D_\mathscr C DC是有效解码算法,令 G J ∈ G F ( q ) k × k G_J \in GF(q)^{k \times k} GJ∈GF(q)k×k是 G G G的可逆子方阵。
-
G e n Gen Gen:令 S ∈ G F ( q ) k × k S \in GF(q)^{k \times k} S∈GF(q)k×k是非奇异混淆矩阵(可逆方阵), P ∈ G F ( q ) n × n P \in GF(q)^{n \times n} P∈GF(q)n×n是置换矩阵(每行每列恰存在一个 1 1 1,其余皆 0 0 0),输出私钥 ( S , D C , P ) (S,D_\mathscr C,P) (S,DC,P),输出公钥 ( G ′ : = S G P , t ) (G':=SGP,\, t) (G′:=SGP,t)
-
E n c Enc Enc:输入明文 m ∈ G F ( q ) k m \in GF(q)^k m∈GF(q)k,随机选择 e ∈ G F ( q ) n e \in GF(q)^n e∈GF(q)n且保证 w t ( e ) = t wt(e)=t wt(e)=t,输出密文
c = m G ′ + e ∈ G F ( q ) n c = mG'+e \in GF(q)^n c=mG′+e∈GF(q)n -
D e c Dec Dec:输入密文 c c c,首先计算
c P − 1 = ( m S ) G + e P − 1 cP^{-1} = (mS)G + eP^{-1} cP−1=(mS)G+eP−1
然后纠错 ( m S ) G = D C ( c P − 1 ) (mS)G = D_\mathscr C(cP^{-1}) (mS)G=DC(cP−1),并恢复数据字 m S = D C ( c P − 1 ) ⋅ G J mS = D_\mathscr C(cP^{-1}) \cdot G_J mS=DC(cP−1)⋅GJ,最后输出明文
m = D C ( c P − 1 ) ⋅ G J ⋅ S − 1 m = D_\mathscr C(cP^{-1}) \cdot G_J \cdot S^{-1} m=DC(cP−1)⋅GJ⋅S−1
格(lattice)上的应用:基于BDD问题的GGH加密方案
- G e n Gen Gen:格 L ⊂ R n L \subset R^n L⊂Rn,公钥是“坏”格基 B B B,私钥是“好”格基 S S S
- E n c Enc Enc:利用格基 B B B,将消息m编码到随机格点 v ∈ L v \in L v∈L(例如 v = B m v=Bm v=Bm),添加小的错误 e ∈ R n e \in R^n e∈Rn,输出 c = v + e c=v+e c=v+e
- D e c Dec Dec:利用格基 S S S,从 c c c中恢复 v v v(纠错),然后解码得到消息m
Niederreiter PKC
令 ( n , k ) q (n,k)_q (n,k)q线性码 C \mathscr C C可以纠正 t ≪ n t \ll n t≪n位错,记 r = n − k r=n-k r=n−k, H ∈ G F ( q ) r × n H \in GF(q)^{r \times n} H∈GF(q)r×n是校验矩阵,令 D C D_\mathscr C DC是有效解码算法。
-
G e n Gen Gen:令 S ∈ G F ( q ) k × k S \in GF(q)^{k \times k} S∈GF(q)k×k是非奇异混淆矩阵(可逆方阵), P ∈ G F ( q ) n × n P \in GF(q)^{n \times n} P∈GF(q)n×n是置换矩阵(每行每列恰存在一个 1 1 1,其余皆 0 0 0),输出私钥 ( S , D C , P ) (S,D_\mathscr C,P) (S,DC,P),输出公钥 ( H ′ : = S H P , t ) (H':=SHP,\, t) (H′:=SHP,t)
-
E n c Enc Enc:输入明文 m ∈ G F ( q ) l m \in GF(q)^l m∈GF(q)l,做可逆映射 ϕ ( m ) = e ∈ G F ( q ) n \phi(m)=e \in GF(q)^n ϕ(m)=e∈GF(q)n且保证 w t ( e ) = t wt(e)=t wt(e)=t,输出密文
c = H ′ e T ∈ G F ( q ) r c = H'e^T \in GF(q)^r c=H′eT∈GF(q)r -
D e c Dec Dec:输入密文 c c c,首先计算校验子
S − 1 c = H ( P e T ) S^{-1}c = H(Pe^T) S−1c=H(PeT)
然后做校验子解码 P e T = D C ( S − 1 c ) Pe^T = D_\mathscr C(S^{-1}c) PeT=DC(S−1c),并做逆置换得到错误 e e e,最后输出明文
m = ϕ − 1 ( P − 1 D C ( S − 1 c ) ) m = \phi^{-1}(P^{-1} D_\mathscr C(S^{-1}c)) m=ϕ−1(P−1DC(S−1c))
安全性
置换等价(permutation-equivalent):我们说两个线性码
C
,
C
′
C,C'
C,C′是置换等价的,如果存在一个置换
σ
\sigma
σ,使得
C
′
=
σ
(
C
)
=
{
(
x
σ
−
1
(
i
)
)
i
∈
I
:
(
x
i
)
i
∈
I
∈
C
}
C'=\sigma(C)=\{ (x_{\sigma^{-1}(i)})_{i \in I}: (x_i)_{i \in I} \in C \}
C′=σ(C)={(xσ−1(i))i∈I:(xi)i∈I∈C}
McEliece问题:对于某类线性码
C
\mathscr C
C,给定公钥
(
G
′
,
t
)
(G',t)
(G′,t)以及密文
c
∈
G
F
(
q
)
n
c \in GF(q)^n
c∈GF(q)n,寻找唯一的明文
m
∈
G
F
(
q
)
k
m \in GF(q)^k
m∈GF(q)k,使得
w
t
(
m
G
′
−
c
)
=
t
wt(mG'-c)=t
wt(mG′−c)=t
很明显,如果可以求解 Syndrome Decoding 问题,那么我们就解决了上述问题。但反之不正确,因为 C ′ = < G ′ > \mathscr C' = <G'> C′=<G′>并非随机码,而是一个已知码类的置换等价,解决 McEliece 问题就可以在特定的码类里解决一般解码问题。我们假设 McEliece 问题属于 N P NP NP类。
Code Equivalence:给定 G F ( q ) GF(q) GF(q)上两个生成矩阵 G 1 , G 2 G_1,G_2 G1,G2,判断分别由它们张成的线性码 C 1 , C 2 C_1,C_2 C1,C2是否是置换等价的。
有文章证明,上述的码等价问题比图同构问题(graph isomorphism problem)更难,同时如果 P ≠ N P P \neq NP P=NP则它不属于 N P C NPC NPC类。
所有的拥有有效纠错算法的码都有良好的代数结构。对于大多数码,关于正规生成矩阵的知识(the knowledge of the canonical generator matrix)将导致一个有效的纠错算法(canonical generator的定义作者没找到╭(╯^╰)╮)。在 McEliece PKC 中的置换矩阵 P P P用于隐藏线性码的代数结构,因为大多数码的结构与位置有关。
Niederreiter PKC 是McEliece PKC的对偶变体(dual variant),两者的安全性等价,一个敌手如果可以攻破其中一个那么就同时攻破另一个。