后量子 KEM 方案:Kyber

2023-10-09 07:59
文章标签 量子 方案 kem kyber

本文主要是介绍后量子 KEM 方案:Kyber,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文献:

  1. Bos J, Ducas L, Kiltz E, et al. CRYSTALS-Kyber: a CCA-secure module-lattice-based KEM[C]//2018 IEEE European Symposium on Security and Privacy (EuroS&P). IEEE, 2018: 353-367.
  2. Avanzi R, Bos J, Ducas L, et al. Crystals-kyber[J]. NIST, Tech. Rep, 2017.
  3. Brakerski Z, Gentry C, Vaikuntanathan V. (Leveled) fully homomorphic encryption without bootstrapping[J]. ACM Transactions on Computation Theory (TOCT), 2014, 6(3): 1-36.
  4. NIST PQC 标准化的第三轮结果

文章目录

  • Kyber
    • Module-LWE
    • IND-CPA PKE
    • IND-CCA KEM
    • KEY EXCHANGE
    • 正确性分析
    • 实例化

Kyber

Module-LWE

Kyber 基于 MLWE 问题,成为了唯一进入 NIST PQC 第 3 轮的 KEM 方案(一共 4 个方案,另外 3 个都是签名,其中 2 个也基于 MLWE,另外 1 个基于 Hash)。

MLWE 最早作为标准 LWE 与 Ring-LWE 的扩展 General LWE 出现在 BGV 方案中:分圆多项式环记做 R q = Z q [ X ] / ( X n + 1 ) R_q = Z_q[X]/(X^n+1) Rq=Zq[X]/(Xn+1),随机采样秘密向量 s ∈ R q k s \in R_q^k sRqk,均匀随机采样 a i ∈ U ( R q k ) a_i \in U(R_q^k) aiU(Rqk),计算 b i = a i T s + e i ∈ R q b_i=a_i^Ts+e_i \in R_q bi=aiTs+eiRq,输出 m m m 对样本 ( a i , b i ) ∈ R q k × R q (a_i,b_i) \in R_q^k \times R_q (ai,bi)Rqk×Rq

基于 MLWE 问题的密码方案,需要使得 m = k m=k m=k 以保证私钥的安全性。因此,按行排列, m m m 个 MLWE 样本可以写作 ( A , b ) ∈ R q k × k × R q k (A,b) \in R_q^{k \times k} \times R_q^k (A,b)Rqk×k×Rqk,其中 b = A s + e b=As+e b=As+e

使用 MLWE 的一个优势是:改变安全级别时,只需调整矩阵规模 k k k 以及噪声规模 η \eta η,而环 R q R_q Rq 不需要改变,因此可以代码复用,有利于软硬件优化。

IND-CPA PKE

Kyber 使用 Newhope-Simple 的思路,通过压缩密钥和密文来减小规模。对于 x ∈ Z q x \in \mathbb Z_q xZq,进行 d d d 比特离散化:
Compress ( x , d ) : = ⌊ 2 d q ⋅ x ⌉ ( m o d 2 d ) Decompress ( x , d ) : = ⌊ q 2 d ⋅ x ⌉ ( m o d q ) \begin{aligned} \text{Compress}(x,d) &:= \left\lfloor \dfrac{2^d}{q} \cdot x \right\rceil \pmod{2^d}\\ \text{Decompress}(x,d) &:= \left\lfloor \dfrac{q}{2^d} \cdot x \right\rceil \pmod{q}\\ \end{aligned} Compress(x,d)Decompress(x,d):=q2dx(mod2d):=2dqx(modq)

这可以被视为FHE中的“模切换”技术,引入了少量的(均匀)舍入噪声。

Kyber 的 PKE 方案与 Newhope 和 LAC 的几乎完全一样:

在这里插入图片描述

IND-CCA KEM

同样的,Kyber 也是用 Fujisaki–Okamoto transform 得到 CCA 安全的 KEM:

在这里插入图片描述

当解密错误时,并不输出 ⊥ ∉ { 0 , 1 } 256 \perp \not \in \{0,1\}^{256} {0,1}256,而是输出伪随机的 H ( z , c ) H(z,c) H(z,c),“隐式拒绝”。

KEY EXCHANGE

无身份认证的 KE 协议:

在这里插入图片描述

单方面身份认证的 KE 协议:

在这里插入图片描述

双向身份认证的 KE 协议:

在这里插入图片描述

正确性分析

在 CPA PKE 中,公钥的第二分量包含中心二项分布噪声和舍入噪声,
b = Decompress ( Compress ( A ⋅ s + e , d 0 ) , d 0 ) = A s + e + r 0 \begin{aligned} b &= \text{Decompress}(\text{Compress}(A \cdot s+e,d_0),d_0)\\ &= As+e+r_0\\ \end{aligned} b=Decompress(Compress(As+e,d0),d0)=As+e+r0

其中 s ← R Ψ η 1 k n s \leftarrow_R \Psi_{\eta_1}^{kn} sRΨη1kn e ← R Ψ η 2 k n e \leftarrow_R \Psi_{\eta_2}^{kn} eRΨη2kn。在压缩时简单丢弃了低位比特,因此可以近似地认为舍入噪声是均匀的。令 l = ⌈ log ⁡ q ⌉ l = \lceil \log q \rceil l=logq,那么 r 0 ← R U ( R 2 l − d 0 k ) r_0 \leftarrow_R U(R_{2^{l-d_0}}^k) r0RU(R2ld0k)

类似地,密文的第一分量中的噪声为:
c 1 = Decompress ( Compress ( A T ⋅ s ′ + e ′ , d 1 ) , d 1 ) = A T ⋅ s ′ + e ′ + r 1 \begin{aligned} c_1 &= \text{Decompress}(\text{Compress}(A^T \cdot s'+e',d_1),d_1)\\ &= A^T \cdot s'+e'+r_1\\ \end{aligned} c1=Decompress(Compress(ATs+e,d1),d1)=ATs+e+r1

其中 s ′ ← R Ψ η 1 k n s' \leftarrow_R \Psi_{\eta_1}^{kn} sRΨη1kn e ′ ← R Ψ η 2 k n e' \leftarrow_R \Psi_{\eta_2}^{kn} eRΨη2kn r 1 ← R U ( R 2 l − d 1 k ) r_1 \leftarrow_R U(R_{2^{l-d_1}}^k) r1RU(R2ld1k)

对于密文的第二分量,可以计算出它携带的噪声项:
c 2 = Decompress ( Compress ( b T ⋅ s ′ + e ′ ′ + Encode ( m ) , d 2 ) , d 2 ) = b T ⋅ s ′ + e ′ ′ + Encode ( m ) + r 2 = ( A s ) T s ′ + e T s ′ + r 0 T s ′ + e ′ ′ + r 2 + Encode ( m ) \begin{aligned} c_2 &= \text{Decompress}(\text{Compress}(b^T \cdot s'+e''+ \text{Encode}(m),d_2),d_2)\\ &= b^T \cdot s'+e''+ \text{Encode}(m)+r_2\\ &= (As)^T s' + e^Ts' + r_0^Ts' + e'' + r_2 + \text{Encode}(m)\\ \end{aligned} c2=Decompress(Compress(bTs+e′′+Encode(m),d2),d2)=bTs+e′′+Encode(m)+r2=(As)Ts+eTs+r0Ts+e′′+r2+Encode(m)

其中 e ′ ′ ← R Ψ η 2 k n e'' \leftarrow_R \Psi_{\eta_2}^{kn} e′′RΨη2kn r 2 ← R U ( R 2 l − d 2 k ) r_2 \leftarrow_R U(R_{2^{l-d_2}}^k) r2RU(R2ld2k)

解密步骤是 m ← Decode ( c 2 − c 1 T ⋅ s ) m \leftarrow \text{Decode}(c_2 - c_1^T \cdot s) mDecode(c2c1Ts),我们可以计算出
c 2 − c 1 T ⋅ s = Encode ( m ) + ( A s ) T s ′ + e T s ′ + r 0 T s ′ + e ′ ′ + r 2 − s T A T s ′ − s T e ′ − s T r 1 = Encode ( m ) + ( e + r 0 ) T s ′ − s T ( e ′ + r 1 ) + ( e ′ ′ + r 2 ) \begin{aligned} c_2 - c_1^T \cdot s =\,\,& \text{Encode}(m) + (As)^T s' + e^Ts' + r_0^Ts' \\ &+ e'' + r_2 - s^TA^Ts' - s^Te' - s^Tr_1\\ =\,\,& \text{Encode}(m) + (e+r_0)^Ts' - s^T(e'+r_1)+(e''+r_2) \end{aligned} c2c1Ts==Encode(m)+(As)Ts+eTs+r0Ts+e′′+r2sTATssTesTr1Encode(m)+(e+r0)TssT(e+r1)+(e′′+r2)

简记 E = ∥ ( e + r 0 ) T s ′ − s T ( e ′ + r 1 ) + ( e ′ ′ + r 2 ) ∥ ∞ E = \|(e+r_0)^Ts' - s^T(e'+r_1)+(e''+r_2)\|_\infty E=(e+r0)TssT(e+r1)+(e′′+r2) 为解密时的累积噪声规模。由于对消息采用了MSB编码方式,所以等式 m = Decode ( Encode ( m ) + e ) m=\text{Decode}(\text{Encode}(m)+e) m=Decode(Encode(m)+e) 成立的充要条件是 ∥ e ∥ ∞ < ⌊ q / 4 ⌉ \|e\|_\infty < \lfloor q/4 \rceil e<q/4

因此,我们需要选取合适的参数集,使得解密错误率足够小:
Δ : = Pr ⁡ [ E ≥ ⌊ q 4 ⌉ : ( n , k , η 1 , η 2 , d 0 , d 1 , d 2 ) ] \Delta := \Pr\left[ E \ge \left\lfloor \dfrac{q}{4} \right\rceil:\,\, (n,k,\eta_1,\eta_2,d_0,d_1,d_2) \right] Δ:=Pr[E4q:(n,k,η1,η2,d0,d1,d2)]

实例化

在第三轮 NIST PQC 文档中,Kyber 的参数选取如下:
在这里插入图片描述

由于 q = 3329 = 13 × 256 + 1 q = 3329 = 13 \times 256+1 q=3329=13×256+1,因此在 G F ( q ) GF(q) GF(q) 中存在 256 256 256 次本原单位根,从而可以支持 log ⁡ 128 = 7 \log{128}=7 log128=7 轮的“不完全的反循环NTT变换”,将环元素 f ∈ R q f \in R_q fRq 同构于 128 128 128 个长度为 2 2 2 的小多项式。注意 NTT 实现时采用 Montgomery 算法、 Barrett 算法,进行加速。

用到的对称原语(PRF, XOF, KDF, Hash)采用 FIPS-202 标准(SHA3):

在这里插入图片描述

这篇关于后量子 KEM 方案:Kyber的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/171457

相关文章

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL容灾备份的实现方案

《MySQL容灾备份的实现方案》进行MySQL的容灾备份是确保数据安全和业务连续性的关键步骤,容灾备份可以分为本地备份和远程备份,主要包括逻辑备份和物理备份两种方式,下面就来具体介绍一下... 目录一、逻辑备份1. 使用mysqldump进行逻辑备份1.1 全库备份1.2 单库备份1.3 单表备份2. 恢复

redis中session会话共享的三种方案

《redis中session会话共享的三种方案》本文探讨了分布式系统中Session共享的三种解决方案,包括粘性会话、Session复制以及基于Redis的集中存储,具有一定的参考价值,感兴趣的可以了... 目录三种解决方案粘性会话(Sticky Sessions)Session复制Redis统一存储Spr

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs