Code-based KEM:HQC

参考文献:

  1. 基于NTT的循环码:RS码、BCH码、RM码_vntt-CSDN博客
  2. 解码器:通用极大似然解码器、线性码的校验子解码器、BCH码的PGZ解码器_极大似然技术 编码-CSDN博客
  3. FO-like Transformation in QROM & Oracle Cloning-CSDN博客
  4. [Mac77] MacWilliams F J. The Theory of Error-Correcting Codes[J]. Elsevier Science Publishers BV google schola, 1977, 2: 39-47.
  5. [BMT78] E. Berlekamp, R. McEliece and H. van Tilborg, “On the inherent intractability of certain coding problems (Corresp.),” in IEEE Transactions on Information Theory, vol. 24, no. 3, pp. 384-386, May 1978, doi: 10.1109/TIT.1978.1055873.
  6. [Can89] Cantor D G. On arithmetical algorithms over finite fields[J]. Journal of Combinatorial Theory, Series A, 1989, 50(2): 285-300.
  7. [VG96] Von zur Gathen J, Gerhard J. Arithmetic and factorization of polynomial over F 2[C]//Proceedings of the 1996 international symposium on Symbolic and algebraic computation. 1996: 1-9.
  8. [AIK07] Applebaum B, Ishai Y, Kushilevitz E. Cryptography with constant input locality[C]//Annual International Cryptology Conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2007: 92-110.
  9. [GM10] Gao S, Mateer T. Additive fast Fourier transforms over finite fields[J]. IEEE Transactions on Information Theory, 2010, 56(12): 6265-6272.
  10. [HHK17] Hofheinz D, Hövelmanns K, Kiltz E. A modular analysis of the Fujisaki-Okamoto transformation[C]//Theory of Cryptography Conference. Cham: Springer International Publishing, 2017: 341-371.
  11. [MAB+22] Melchor C A, Aragon N, Bettaieb S, et al. Hamming quasi-cyclic (HQC). NIST PQC Round 4, 2022.

HQC

[MAB+22](该团队与 BIKE 基本重叠)设计的 HQC 是基于编码的 KEM 方案,具有一些理想的性质:基于 structured codes 上的校验子译码问题,可以证明其 IND-CPA 安全;不需要假设使用的 structured codes 与随机码不可区分;可以给出解码失败率(DFR)的上界,从而利用 FO 能够(可证明地)提升为 IND-CCA 安全。

HQC 也使用 QC-code 以减少通信,其定义和表示请看 BIKE。HQC 采取的矩阵/多项式记号的行/列和 BIKE 有区别,两者是互换的,不再赘述。

HQC 使用两种编码:可高效解码的系统编码(正确性),QC 随机码(安全性)。

在这里插入图片描述

HQC 的构造,我看着不太像 McEliece 或者 Niederreiter 方案,反倒是和 MLWE-based PKE 很类似(或者说是 ElGamal-like 框架)。

SD 问题

[BMT78] 证明了,汉明距离下的校验子译码问题(Syndrome Decoding)属于 NP-complete,[AIK07] 给出了从 search 到 decision 的归约(两者多项式等价)。

在这里插入图片描述

虽然 QC-codes 并没有一般的复杂性结果,但人们一般认为它是困难的;存在一些攻击利用了 QC 性质,但是其对复杂度的影响很小。

在 HQC 中仅使用码率 1 / 2 , 1 / 3 1/2,1/3 1/2,1/3 的 QC-codes,为了避免某些平凡的区分器,需要对校验矩阵 H H H 的奇偶性做出一些限制(纯技术性的),

在这里插入图片描述

HQC 依赖的困难性假设是:

在这里插入图片描述

以及

在这里插入图片描述

此外,HQC 使用的可高效译码的系统码是 Reed-Muller 和 Reed-Solomon 的级联码,其维度必然是合数。为了减少环 R = F 2 [ X ] / ( X n − 1 ) \mathcal R=\mathbb F_2[X]/(X^n-1) R=F2[X]/(Xn1) 的结构,需要设置 n n n使得 2 m o d    n 2 \mod n 2modn 是本原元的素数。因此,需要使用截断方法;由于损失了信息,所以译码问题的难度不会下降。

IND-CPA PKE

HQC 使用两个编码,

  1. 可高效解码的 [ n , k ] [n,k] [n,k]-线性码 C \mathcal C C,生成矩阵 G ∈ F 2 k × n G \in \mathbb F_2^{k \times n} GF2k×n,能够纠正至少 δ \delta δ 个错误
  2. 随机的 [ 2 n , n ] [2n,n] [2n,n]-双循环码,校验矩阵 ( 1 , h ) ∈ R 2 (1,h) \in \mathcal R^2 (1,h)R2

PKE 的构造如下:

在这里插入图片描述

HQC 采用 Reed-Muller 和 Reed-Solomon 的级联码作为码 C \mathcal C C,因此需要修正为 G ∈ F 2 n 1 n 2 G \in \mathbb F_2^{n_1n_2} GF2n1n2,满足 n 1 n 2 ≤ n n_1n_2 \le n n1n2n。密文中的 v v v 丢弃了前 l = n − n 1 n 2 l=n-n_1n_2 l=nn1n2 个比特,记为 c = ( u , v ( l ) ) c=(u,v^{(l)}) c=(u,v(l))。为了减少空间开销, s k sk sk h h h 分别用 s e e d 1 , s e e d 2 seed1,seed2 seed1,seed2 来记录。

容易验证,为了正确解密,需要满足:
H W ( x ⋅ r 2 − y ⋅ r 1 + e ) ≤ δ HW(x \cdot r_2 - y \cdot r_1 + e) \le \delta HW(xr2yr1+e)δ
[MAB+22] 给出了上述错误分布的理论推导(特别复杂),在启发式假设下其各个系数是独立同分布的伯努利。仿真实验表明错误会比理论分析更加集中,因此实际 DFR 会比理论推导的上界更小。

容易看出,密钥安全基于 ( 1 , h ) ∈ R 2 (1,h) \in \mathcal R^2 (1,h)R2 指定的 search-QCSD 问题,消息安全则基于截断 l l l 比特的 decision-QCSD 问题。

IND-CCA KEM

HQC 采用 [HHK17] 中的 Q U ⊥ QU^\perp QU 将上述 IND-CPA PKE 加强为 IND-CCA KEM。事实上, F O ⊥ FO^\perp FO 本身就是 QROM 下安全的,可以省略密文中的保长哈希。为了消除 multi-ciphertext attack,还在生成随机带的哈希中添加了公开的随机盐

KEM 的构造如下:

在这里插入图片描述

其中的 H , K , G H,K,G H,K,G 都使用 SHAKE256 实例化,固定其输出长度 512 比特,添加了 domain seperation tag 以成为独立的 RO。

RS & RM

HQC 使用的码 C \mathcal C C 是由 Reed-Solomon 和 Reed-Muller 级联得到的。级联码定义如下:

在这里插入图片描述

HQC 使用 G F ( 2 8 ) GF(2^8) GF(28) 上的 Reed-Solomon 作为外码,使用 G F ( 2 ) GF(2) GF(2) 上的 [ 128 , 8 , 64 ] [128,8,64] [128,8,64] Reed-Muller 的重复码作为内码。确切地说,

  1. 消息 m ∈ G F ( 2 8 ) k e m \in GF(2^8)^{k_e} mGF(28)ke 首先被 Reed-Solomon 编码,获得空间 G F ( 2 8 ) n e GF(2^8)^{n_e} GF(28)ne 中的码字;
  2. 然后该码字的每个 G F ( 2 8 ) GF(2^8) GF(28) 上系数被拍平为 G F ( 2 ) 8 GF(2)^8 GF(2)8 上向量,分别用 Reed-Muller 编码;
  3. 最后把获得的码字重复 3 , 5 3,5 3,5 次,以提高纠错能力(重复 r r r 次,则最小距离乘以 r r r)。

Reed-Solomon 码是极大距离可分的(maximum distance separable, MDS),达到了 Singleton Bound(即 d m i n = n − k + 1 d_{min}=n-k+1 dmin=nk+1),具有很高的码率。它的解码器类似于 BCH 的 PGZ 算法,也是根据 FFT-form 构造线性方程组以及 error location polynomial 来解码的,其中利用了 Additive FFT 加速后者的求根。Reed-Muller 码的码率很低,但是其解码速度很快。

HQC 使用截断的 RS 码,参数如下:

在这里插入图片描述

HQC 使用重复的 RM 码,参数如下:

在这里插入图片描述

[MAB+22] 花费大量篇幅描述了 RS 和 RM 的解码器,看不懂 (;′⌒`)。他们给出了该级联码的 DFR 上界,从而可以证明 IND-CCA 安全。

Additive FFT

原始的 FFT 算法,计算的是多项式 f f f 在单位根群 ( ζ n ) (\zeta_n) (ζn) 上的求值,单位根群是由本原单位根 ζ n \zeta_n ζn 生成的乘法循环群。[Can89] 提出了 Additive FFT 的概念,它计算 f ∈ G F ( p m ) [ X ] f \in GF(p^m)[X] fGF(pm)[X] 在某个加法子群 G ⊆ G F ( p m ) G \subseteq GF(p^m) GGF(pm) 上的求值,复杂度为 O ( m p m ) O(mp^m) O(mpm) 次域 G F ( p m ) GF(p^m) GF(pm) 上的乘法和 O ( m 2 p m ) O(m^2p^m) O(m2pm) 次域 G F ( p m ) GF(p^m) GF(pm) 上的加法,但是要求具有 m = p k m=p^k m=pk 的形式,并且要 4 n ≤ m p m 4n \le mp^m 4nmpm,这里 n : = deg ⁡ f n:=\deg f n:=degf。[VG96] 扩展了 [Can89] 的算法,可以用于任意的 m m m,其复杂度为 O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n) 次域 G F ( p m ) GF(p^m) GF(pm) 上的乘法和加法,只需满足 p ≤ n ≤ p m p \le n \le p^m pnpm

[GM10] 使用多项式 Taylor 展开,提出了复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn) 次域 G F ( 2 m ) GF(2^m) GF(2m) 上乘法、 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n) 次域 G F ( p m ) GF(p^m) GF(pm) 上加法的算法;特别地,对于特征 p = 2 p=2 p=2,可以进一步获得复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn) 次域 G F ( 2 m ) GF(2^m) GF(2m) 上乘法和加法的算法。一般地, G F ( 2 m ) GF(2^m) GF(2m) 上乘法(word-level Shift + XOR)的开销是加法(word-level XOR)的 2 m − 1 2m-1 2m1 倍。同时在现代计算机中,Shift 和 XOR 的开销和 int 上的加法、乘法开销很接近。

F \mathbb F F 是包含至少 2 m 2^m 2m 个元素的特征 2 2 2 域,令 β 1 , ⋯   , β m ∈ F \beta_1,\cdots,\beta_m \in \mathbb F β1,,βmF F 2 \mathbb F_2 F2-线性独立的元素,它们张成一个子空间 B = ⟨ β 1 , ⋯   , β m ⟩ B = \langle \beta_1,\cdots,\beta_m \rangle B=β1,,βm,以坐标 ( a 1 , ⋯   , a m ) ∈ F 2 (a_1,\cdots,a_m) \in \mathbb F_2 (a1,,am)F2 的二进制合成 i ∈ [ 2 m ] i \in [2^m] i[2m] 诱导其中元素的排序。

给定某次数小于 n = 2 m n=2^m n=2m 的多项式 f ( x ) f(x) f(x),想要快速计算它在加法子群 B B B 上的求值,
F F T ( f , m , B ) : = ( f ( B [ 0 ] ) , f ( B [ 1 ] ) , ⋯   , f ( [ B [ n − 1 ] ] ) ) FFT(f,m,B) := \left(f(B[0]),f(B[1]),\cdots,f([B[n-1]])\right) FFT(f,m,B):=(f(B[0]),f(B[1]),,f([B[n1]]))
[GM10] 定义 g ( x ) = f ( β m ⋅ x ) g(x)=f(\beta_m\cdot x) g(x)=f(βmx) 以及 γ i = β i ⋅ β m − 1 \gamma_i=\beta_i \cdot \beta_m^{-1} γi=βiβm1,于是将上述问题划分为子群及其陪集上的两个问题:
F F T ( f , m , B ) = ( F F T ( g , m − 1 , G ) , F F T ( g , m − 1 , G + 1 ) ) FFT(f,m,B) = (FFT(g,m-1,G), FFT(g,m-1,G+1)) FFT(f,m,B)=(FFT(g,m1,G),FFT(g,m1,G+1))
其中 B ⋅ β m − 1 = G ∪ ( G + 1 ) B \cdot \beta_m^{-1} = G \cup (G+1) Bβm1=G(G+1),以及 G = ⟨ γ 1 , ⋯   , γ m − 1 ⟩ G=\langle \gamma_1,\cdots,\gamma_{m-1} \rangle G=γ1,,γm1。注意 G + 1 G+1 G+1 不是群,因此还需继续处理。[GM10] 将 g ( x ) g(x) g(x) 关于 ( x 2 − x ) (x^2-x) (x2x) 做泰勒展开,将 g ( x ) g(x) g(x) 分解为 g 0 ( x ) , g 1 ( x ) g_0(x),g_1(x) g0(x),g1(x) 的某种表示,最后把 F F T ( g , m − 1 , G + 1 ) FFT(g,m-1,G+1) FFT(g,m1,G+1) 进一步转换为 F F T ( g 0 , m − 1 , D ) FFT(g_0,m-1,D) FFT(g0,m1,D) F F T ( g 1 , m − 1 , D ) FFT(g_1,m-1,D) FFT(g1,m1,D),其中 D D D 是某一个加法群。

这样,就把问题 F F T ( f , m , B ) FFT(f,m,B) FFT(f,m,B) 拆解为了三个子问题: F F T ( g , m − 1 , G ) FFT(g,m-1,G) FFT(g,m1,G) F F T ( g 0 , m − 1 , D ) FFT(g_0,m-1,D) FFT(g0,m1,D) F F T ( g 1 , m − 1 , D ) FFT(g_1,m-1,D) FFT(g1,m1,D),它们的规模是原问题的一半。[GM10] 给出了如下的复杂度分析,单位是 F \mathbb F F 上的乘法、加法。

在这里插入图片描述

如果 m m m 也是 2 2 2 的幂次,[GM10] 给出了优化的算法,渐进地降低了 A ( n ) A(n) A(n) 一个对数因子。

代码实现

NIST PQC Round 4 提供了 HQC 的优化实现,使用 gpreftools 测试结果如下:

请添加图片描述

不知为何,没有显示 KeyGen、Enc、Dec 节点。但是可以看到,Karatzuba 算法的开销占比很大。

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值