后量子 KEM 方案:Kyber

news2024/9/23 17:21:18

参考文献:

  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.

文章目录

  • 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):

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AlphaFold 2 处理蛋白质折叠问题

蛋白质是一个较长的氨基酸序列&#xff0c;比如100个氨基酸的规模&#xff0c;如此长的氨基酸序列连在一起是不稳定的&#xff0c;它们会卷在一起&#xff0c;形成一个独特的3D结构&#xff0c;这个3D结构的形状决定了蛋白质的功能。 蛋白质结构预测&#xff08;蛋白质折叠问题…

Android 一体机研发之修改系统设置————屏幕亮度

Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 前言 最近工作略微有点儿空闲&#xff0c;抽空给大家总结一下&#xff1a;近期一直搞得一体机app研发&#xff0c;适用…

recv和明文收包分析

我们CTRLg 跳到recv 分析收包函数 发现函数会断并且收包函数返回值(收包包长)也会不断变化 那么证明recv是真正的收包函数&#xff0c;游戏没有重新实现该函数 我们只要分析该函数即可 在recv函数执行完毕以后下断 eax是包长,esi28是包指针 我们上2个号&#xff0c;让另外…

项目(今日指数之环境搭建)

一 项目架构1.1 今日指数技术选型【1】前端技术【2】后端技术栈【3】整体概览1.2 核心业务介绍【1】业务结构预览【2】业务结构预览1.定时任务调度服务XXL-JOB通过RestTemplate多线程动态拉去股票接口数据&#xff0c;刷入数据库&#xff1b; 2.国内指数服务 3.板块指数服务 4.…

清晰理解并解决二分问题

文章目录二分问题常规解法&#xff1a;使用CSTL自带算法解决二分问题&#xff1a;小数二分二分问题常规解法&#xff1a; 二分问题注意事项&#xff1a; 题目可能无解&#xff0c;但二分一定有解&#xff08;也就是二分问题会得到一个结果&#xff0c;但是该结果可能不符合题目…

RabbitMQ-集群

一、搭建1、创建三个虚拟机2、修改三台主机的hostname,分别为node1,node2,node3,分别重启vi /etc/hostname reboot3、配置各个主机的hosts文件&#xff0c;让各个节点都能互相识别对方vi /etc/hosts #添加下面配置 192.168.xxx.165 node1 192.168.xxx.167 node2 192.168.xxx.16…

Django by Example·第三章|Extending Your Blog Application@笔记

Django by Example第三章|Extending Your Blog Application笔记 之前已经写过两章内容了&#xff0c;继续第三章。第三章继续对博客系统的功能进行拓展&#xff0c;其中将会穿插一些重要的技术要点。 部分内容引用自原书&#xff0c;如果大家对这本书感兴趣 请支持原版Django …

基于模块联邦的微前端实现方案

一、 微前端应用案例概述 当前案例中包含三个微应用&#xff0c;分别为 Marketing、Authentication 和 Dashboard Marketing&#xff1a;营销微应用&#xff0c;包含首页组件和价格组件 Authentication&#xff1a;身份验证微应用&#xff0c;包含登录组件 Dashboard&#x…

B站发帖软件哪个好用?好用的哔哩哔哩发帖工具

B站发帖软件哪个好用?好用的哔哩哔哩发帖工具#发帖软件#哔哩哔哩发帖#视频发布软件 登录成功之后&#xff0c;进入到这样一个界面&#xff0c;默认情况下是这个样子的&#xff0c;我们在这里输入一下我们的一个文件夹的路径&#xff0c;输入到这里&#xff0c;点击添加账号&a…

kettle开发-Day36-循环驱动作业

前言&#xff1a;在日常数据处理时&#xff0c;我们通过变量传参来完成某个日期的数据转换。但可能因程序或者网络原因导致某个时间段的数据抽取失败。常见导致kettle作业失败的原因大概分为三大类&#xff0c;数据源异常、数据库异常、程序异常。因此面对这些异常时&#xff0…

Not available OpenAI s services are not available in your country.

一、准备阶段 1、邮箱账号(qq、网易、谷歌等等) 2、你能够科学上网(下边详细介绍) 3、拥有一个GW手机号&#xff0c;用于接收注册验证码。&#xff08;下边详细介绍&#xff09; 二、开始注册 1、官方注册网址https://beta.openai.com/signup&#xff08;按照步骤注册&am…

RDSDRDSPolarDBPolarDB-X的区别

RDS 阿里云关系型数据库&#xff08;Relational Database Service&#xff0c;简称RDS&#xff09;&#xff0c;是一种稳定可靠、可弹性伸缩的在线数据库服务。 基于阿里云分布式文件系统和高性能存储&#xff0c;RDS支持MySQL、SQL Server、PostgreSQL和PPAS&#xff08;Post…

在VScode终端上创建nuxtjs项目遇到的问题以及使用GitHub遇到的问题和一些个人笔记

文章目录&#x1f4cb;前言&#x1f4bb;关于GitHub打开慢或无法打开的问题&#x1f4bb;克隆GitHub的项目到本地&#x1f4bb;创建nuxtjs项目&#x1f9e9;无法加载文件的报错问题&#x1f9e9;使用vue init nuxt/starter demo出现的问题&#x1f9e9;另一种命令创建nuxtjs项目…

字符编码及转换

什么是字符编码字符编码&#xff08;Character encoding&#xff09;也称字集码&#xff0c;是把字符集中的字符&#xff0c;编码为指定集合中的某一对象&#xff08;例如&#xff1a;比特模式、自然数序列、8位组或者电脉冲&#xff09;&#xff0c;以便文本在计算机中存储或者…

前端控制台出现 红色 的报错信息TypeError: fn.apply is not a function

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 使用vue在原来的系统中 开发新的模块&#xff0c;开发时无意间发现 前端控制台出现 红色 的报错信息&#xff0c;但是页面依然还是正常 加载出来了 控制台一直报错 TypeError: fn.apply is not a fun…

09- 逻辑回归算法 (LogisticRegression) (机器学习)

基本概念: 逻辑回归主要逻辑是通过sigmoid函数进行分类, 当函数结果大于0时赋值1, 小于0时赋值0, 然后根据结果进行分类, 化简后求最小值的过程和线性方程类似, 该函数的特点是:分类算法 模型训练 : lr LogisticRegression() from sklearn.linear_model import LogisticRegr…

力扣39.组合总数

文章目录力扣39.组合总数题目描述方法1&#xff1a;深搜回溯力扣39.组合总数 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可…

【数据库】MySQL 单表查询,多表查询

目录 单表查询 一&#xff0c;创建表worker 1&#xff0c;创建表worker的sql代码如下&#xff1a; 2&#xff0c;向worker表中插入信息 二&#xff0c; 按要求进行单表查询 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 …

【自学Python】Python字符大小写判断

大纲 Python字符串是否是小写 Python字符串是否是小写教程 在开发过程中&#xff0c;有时候我们需要判断一个 字符串 是否是小写形式&#xff08;即&#xff0c;所有的字符都是小写字母&#xff0c;不是英文字符的忽略不做判断&#xff09;&#xff0c;在 Python 中&#xff…

SAP ERP系统SD模块常用增强之一:VA01/VA02创建或修改SO的输入检查

在SAP/ERP项目的实施中销售管理模块&#xff08;SD&#xff09;的创建和修改销售订单必定会有输入字段校验检查的需求&#xff0c;来防止业务人员录入错误或少录入数据&#xff0c;SAP公司也考虑到这一点&#xff0c;所以这方面的配置功能也非常强大&#xff0c;通常情况下不需…