后量子 KEM 方案:LAC

参考文献:

  1. Lyubashevsky V, Peikert C, Regev O. On ideal lattices and learning with errors over rings[J]. Journal of the ACM (JACM), 2013, 60(6): 1-35.
  2. Lu X, Liu Y, Zhang Z, et al. LAC: Practical ring-LWE based public-key encryption with byte-level modulus[J]. Cryptology ePrint Archive, 2018.
  3. Lu X, Liu Y, Jia D, et al. LAC: Lattice-based cryptosystems[J]. NIST PQC Round, 2019, 2: 4.
  4. Fujisaki E, Okamoto T. How to enhance the security of public-key encryption at minimum cost[C]//Public Key Cryptography: Second International Workshop on Practice and Theory in Public Key Cryptography, PKC’99 Kamakura, Japan, March 1–3, 1999 Proceedings. Berlin, Heidelberg: Springer Berlin Heidelberg, 1999: 53-68.
  5. Fujioka A, Suzuki K, Xagawa K, et al. Practical and post-quantum authenticated key exchange from one-way secure key encapsulation mechanism[C]//Proceedings of the 8th ACM SIGSAC symposium on Information, computer and communications security. 2013: 83-94.

LAC

目前几乎所有的基于 RLWE/MLWE 问题的后量子密码都遵循 LPR10 中的“类ElGamal密文”的形式。设计实用化密码算法的关键在于:寻找合适的参数、使用合适的加速算法、编写高效的代码实现

LAC 是中科院信工所路献辉老师主持设计的 PQC KEM 方案,基于 RLWE 问题。LAC 的结构与 Newhope 几乎完全一样,除了使用字节规模的小素数,并使用大块的纠错码来纠错。与 Newhope 一样,LAC 也进入了 NIST 的第二轮征集,但它们都没有进入第三轮。

Byte-Level Modulus

出于紧凑性考虑,LAC 选取了激进的字节水平模数。由于现代计算机处理数据的最小单位是字节,因此选取远小于 256 256 256 的模数将几乎不会带来更多的性能提升。

LAC 考虑了三种模数:

  1. 二的幂次模数(power-of-two modulus)。例如 q = 256 q=256 q=256,这种选择可以充分利用单个字节的性质,在运算时可以自然地进位和取模。但是它并不是素数,导致环 R q R_q Rq 在 LAC 选择的 RLWE 的维度 n = 512 / 1024 n=512/1024 n=512/1024 下不是域。虽然没有证据表明这种选择不安全,但本着避免潜在弱点的原则,我们不使用它。

  2. 最大分裂模数(max-split modulus)。例如 q = 257 q=257 q=257,它满足 256 ∣ q − 1 256 \mid q-1 256q1,因此在 G F ( q ) GF(q) GF(q) 中存在 256 256 256 次本原单位根,从而“反循环NTT”可以支持 log ⁡ 128 = 7 \log{128}=7 log128=7 层迭代。根据环同构以及中国剩余定理,容易看出,
    x n + 1 = ∏ i = 1 128 ( x n / 128 + ξ i ) x^n+1 = \prod_{i=1}^{128}(x^{n/128}+\xi_i) xn+1=i=1128(xn/128+ξi)
    其中 ξ i ∈ G F ( q ) \xi_i \in GF(q) ξiGF(q) 是所有不同的 128 128 128 次单位根。使用不完全NTT算法,迭代 7 7 7 层蝴蝶,将 a , b ∈ R q a,b \in R_q a,bRq 分解为 128 128 128 个低次的多项式。因为
    R q ≅ R q / ( x n / 128 + ξ 1 ) × ⋯ × R q / ( x n / 128 + ξ 128 ) R_q \cong R_q/(x^{n/128}+\xi_1) \times \cdots \times R_q/(x^{n/128}+\xi_{128}) RqRq/(xn/128+ξ1)××Rq/(xn/128+ξ128)
    所以两个多项式 a , b a,b a,b 的乘积就等价于分解后的 128 128 128 个低次多项式分别相乘。

  3. 最小分裂模数(min-split modulus)。例如 q = 251 q=251 q=251,它是小于 256 256 256 的最大素数,可以使得元素的字节表示最为紧凑。我们发现在这个模数下,多项式 x n + 1 ∈ Z q [ x ] x^n+1 \in Z_q[x] xn+1Zq[x] 只有两个因式,
    x n + 1 = ( x n / 2 + 91 x n / 4 + 250 ) ( x n / 2 + 160 x n / 4 + 250 ) x^n+1 = (x^{n/2}+91x^{n/4}+250)(x^{n/2}+160x^{n/4}+250) xn+1=(xn/2+91xn/4+250)(xn/2+160xn/4+250)
    因此这无法使用NTT算法来加速,只能使用 Schoolbook 多项式乘法。

LAC 认为结构越少越好,因此选择了 q = 251 q=251 q=251 作为环 R q = Z q [ X ] / ( X n + 1 ) R_q = \mathbb Z_q[X]/(X^n+1) Rq=Zq[X]/(Xn+1) 的模数,其中 n = 512 , 1024 n=512,1024 n=512,1024

扫描二维码关注公众号,回复: 14829478 查看本文章

CBD

与 Newhope 一样,由于中心二项分布(centered binomial distribution, CBD)比高精度离散高斯分布的采样效率高得多,且只有签名算法依赖于离散高斯分布来获得安全性。因此密钥封装方案 LAC 选取了 CBD 作为错误分布。

因为密码安全性依赖于噪声和模数的比率,并且模数 q = 251 q=251 q=251 足够小,此时噪声规模选取为 k = 1 , 1 / 2 k=1,1/2 k=1,1/2 就足够了。

R q R_q Rq 上的 CBD 分布 χ = Ψ k n \chi = \Psi_k^n χ=Ψkn 的采样方法就是:独立采样 n n n Ψ k \Psi_k Ψk

  • 对于 k = 1 k=1 k=1
    • 采样随机比特 b , b ′ ∈ { 0 , 1 } b,b' \in \{0,1\} b,b{ 0,1},输出 b − b ′ ∈ { − 1 , 0 , 1 } ⊂ Z q b-b' \in \{-1,0,1\} \subset \mathbb Z_q bb{ 1,0,1}Zq
    • 其中 ± 1 \pm 1 ±1 出现的概率都为 1 / 4 1/4 1/4 0 0 0 出现的概率为 1 / 2 1/2 1/2
  • 对于 k = 1 / 2 k=1/2 k=1/2
    • 采样随机比特 a , a ′ ← R Ψ 1 a,a' \leftarrow_R \Psi_1 a,aRΨ1,输出 a ⋅ a ′ ∈ { − 1 , 0 , 1 } ⊂ Z q a \cdot a' \in \{-1,0,1\} \subset \mathbb Z_q aa{ 1,0,1}Zq
    • 其中 ± 1 \pm 1 ±1 出现的概率都为 1 / 8 1/8 1/8 0 0 0 出现的概率为 3 / 4 3/4 3/4

为了抵御“高汉明重量攻击”,LAC 在第二轮 NIST PQC 文档中,设置了固定汉明重量的 CBD,记为 Ψ k n , h \Psi_k^{n,h} Ψkn,h,其中 0 < h < n / 2 0<h<n/2 0<h<n/2 是偶数。

在这里插入图片描述

Error & ECC

LAC 使用类 ElGamal 加密框架,明文按照 Regev 的MSB 编码方式,这里的明文是被 ECC 编码的消息码字 m ^ ∈ { 0 , 1 } l v \hat m \in \{0,1\}^{l_v} m^{ 0,1}lv

加密为:
c 1 ← a r + e 1 c 2 ← ( b r + e 2 ) l v + E n c o d e ( m ^ ) \begin{aligned} c_1 &\leftarrow ar+e_1\\ c_2 &\leftarrow (br+e_2)_{l_v}+Encode(\hat m) \end{aligned} c1c2ar+e1(br+e2)lv+Encode(m^)

解密为:
m ^ ′ = D e c o d e ( c 2 − ( c 1 s ) l v ) \hat m' = Decode\left(c_2 - (c_1 s)_{l_v}\right) m^=Decode(c2(c1s)lv)

代入 b = a s + e b=as+e b=as+e,经过计算得到:
c 2 − ( c 1 s ) l v = ( e r − e 1 s ) l v + e 2 + E n c o d e ( m ^ ) \begin{aligned} c_2 - (c_1 s)_{l_v} = (er-e_1s)_{l_v} + e_2 + Encode(\hat m) \end{aligned} c2(c1s)lv=(ere1s)lv+e2+Encode(m^)

如果第 i i i 比特解密正确,那么需要累积噪声 w : = ( e r − e 1 s ) l v + e 2 w:=(er-e_1s)_{l_v} + e_2 w:=(ere1s)lv+e2 的第 i i i 个系数满足 ∣ w i ∣ < ⌊ q / 4 ⌉ |w_i| < \lfloor q/4 \rceil wi<q/4。因为 s , e , r , e 1 , e 2 ← R Ψ k n s,e,r,e_1,e_2 \leftarrow_R \Psi_k^n s,e,r,e1,e2RΨkn,其中 Ψ k \Psi_k Ψk 的标准差 σ = k / 2 \sigma = \sqrt{k/2} σ=k/2 很小,均值为 μ = 0 \mu=0 μ=0。根据中心极限法则以及分布的加和、分布的乘积,噪声主要是 e r er er e 1 s e_1s e1s 两项,多项式乘积的每一系数包含 n n n 项加和,因此 w i w_i wi 是中心高斯分布,其标准差为:
n ⋅ σ 2 ⋅ σ 2 + n ⋅ σ 2 ⋅ σ 2 = σ 2 2 n \sqrt{n \cdot \sigma^2 \cdot \sigma^2 + n \cdot \sigma^2 \cdot \sigma^2} = \sigma^2\sqrt{2n} nσ2σ2+nσ2σ2 =σ22n

使用高斯误差函数 erf ( ⋅ ) \text{erf}(\cdot) erf() 来估计错误率(error rate)。因为累积分布为 Pr ( − B ≤ x ≤ B ) = erf ( B 2 σ ) \text{Pr}\left( -B \le x \le B \right) = \text{erf}(\dfrac{B}{\sqrt{2}\sigma}) Pr(BxB)=erf(2 σB),所以错误率为:
δ ≈ 1 − erf ( ⌊ q / 4 ⌉ 2 ( σ 2 2 n ) ) \delta \approx 1 - \text{erf}\left( \dfrac{\lfloor q/4 \rceil}{\sqrt{2}(\sigma^2\sqrt{2n})} \right) δ1erf(2 (σ22n )q/4)

实际上,LAC 还对公钥第二分量 b b b、密文第一分量 c 1 c_1 c1、密文第二分量 c 2 c_2 c2,进行了压缩(就是“模切换”, d d d 比特离散化),因此噪声更加复杂。

如果使用了可以纠正至多 l t l_t lt 位错的 ECC,那么解密失败率(decryption error rate)降低为:
Δ ≈ ∑ j = l t + 1 l v ( l v j ) ⋅ δ j ⋅ ( 1 − δ ) l v − j \Delta \approx \sum_{j=l_t+1}^{l_v} {l_v \choose j} \cdot \delta^j \cdot (1-\delta)^{l_v-j} Δj=lt+1lv(jlv)δj(1δ)lvj

上式假设各个系数是独立的,但是环乘法的各个系数并不独立;不过,它们之间的依赖关系很弱,因此影响不大。

LAC 使用了 ( l n = 511 , l m = 340 , l d = 41 ) (l_n=511,l_m=340,l_d=41) (ln=511,lm=340,ld=41) G F ( 2 ) GF(2) GF(2)BCH 纠错码,可以纠 l t = 20 l_t = 20 lt=20 位错:

  1. 对于 n = 512 n=512 n=512,BCH 可将 δ = 2 − 13 \delta=2^{-13} δ=213 降低为 Δ = 2 − 154 \Delta=2^{-154} Δ=2154

  2. 对于 n = 1024 n=1024 n=1024,如果使用设计距离 l d l_d ld 过大的 ECC,那么性能惩罚严重。因此 LAC 混合使用 BCH 以及 D2/D4 编码(Newhope 中的重复码):先将 m m m 编码为 m ^ = E C C E n c ( m ) \hat m = ECCEnc(m) m^=ECCEnc(m),然后重复两次 MSB 编码 ( E n c o d e ( m ^ ) , E n c o d e ( m ^ ) ) (Encode(\hat m),Encode(\hat m)) (Encode(m^),Encode(m^))

另外需要注意的是,需要把 BCH 实现为常数时间,以抵御“计时攻击”。

Cryptosystems

LAC 包括四个方案:IND-CPA 安全的 PKE、IND-CCA 安全的 KEM、被动安全的 KE,安全的 AKE。

在这里插入图片描述

  1. 基于 RLWE 问题,构造出 IND-CPA 安全的公钥加密方案( public key encryption scheme, PKE)
  2. 利用 FO 转换,得到 IND-CCA 安全的密钥封装协议(key encapsulation mechanism, KEM)
  3. 直接把 CPA PKE、CCA KEM 自然地转化为被动安全的密钥交换协议(key exchange protocol, KE)
  4. 利用 FSXY 转换,得到安全的身份认证密钥交换协议(authenticated key exchange protocol, AKE)

CPA PKE

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于不同的安全级别(分别相当于 AES128AES192AES256),LAC 的参数如下:

在这里插入图片描述

CCA KEM

在这里插入图片描述
在这里插入图片描述

KE

在这里插入图片描述

AKE

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44885334/article/details/129011202
LAC