后量子 KEM 方案:LAC

news2024/9/20 16:37:05

参考文献:

  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
    • Byte-Level Modulus
    • CBD
    • Error & ECC
    • Cryptosystems
      • CPA PKE
      • CCA KEM
      • KE
      • AKE

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

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

在这里插入图片描述

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

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

相关文章

java -数据结构,List相关基础知识,ArrayList的基本使用,泛型的简单、包装类介绍

一、 预备知识-泛型(Generic) 1.1、泛型的引入 比如&#xff1a;我们实现一个简单的顺序表 class MyArrayList{public int[] elem;public int usedSize;public MyArrayList(){this.elem new int[10];}public void add(int key){this.elem[usedSize] key;usedSize;}public …

Ethercat系列(4)Twcat3激活配置过程的协议分析

广播设置ESC的4个端口环路设置从-》主广播读从站状态机实际状态主-》从从-》主广播清除接收错误计数器0x300且读应用层状态从-》主顺序读从站基本信息&#xff0c;链路层配置与状态从-》主广播读从站状态机状态主-》从从-》主顺序写ESC控制模式&#xff0c;广播读从站状态主-》…

一、图机器学习导论【CS224W】(Datawhale组队学习)

开源内容&#xff1a;https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频&#xff1a;https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页&#xff1a;https://web.stanford.edu/class/cs224w 文章目录前…

C++中的标准输入和输出

一、 C 输入输出的含义 在C语言中我们的输入和输出都是以printf和scanf进行操作的。他们都是函数。在C中的我们的输入输出都是以终端为对象的&#xff0c;即从键盘输入数据&#xff0c;运行结果输出到显示器屏幕上。从操作系统(Linux)的角度看&#xff0c;每一个与主机相连的输…

RKE2部署高可用Rancher v2.7.1

先决条件 注意修改主机名&#xff0c;不要有冲突 第一个server节点安装 官方文档的描述感觉对于新手来说太不友好了&#xff0c;建议以下链接都看一下。Rancher新老文档都建议看一下&#xff0c;不然刚刚入门很蒙。 RKE2快速开始&#xff1a;https://docs.rke2.io/zh/install…

html+css综合练习一

文章目录一、小米注册页面1、要求2、案例图3、实现效果3.1、index.html3.2、style.css二、下午茶页面1、要求2、案例图3、index.html4、style.css三、法国巴黎页面1、要求2、案例图3、index.html4、style.css一、小米注册页面 1、要求 阅读下列说明、效果图&#xff0c;进行静…

由浅入深,聊聊OkHttp的那些事(很长,很细节)

引言 在 Android 开发的世界中&#xff0c;有一些组件&#xff0c;无论应用层技术再怎么迭代&#xff0c;作为基础支持&#xff0c;它们依然在那里。 比如当我们提到网络库时&#xff0c;总会下意识想到一个名字&#xff0c;即 OkHttp 。 尽管对于大多数开发者而言&#xff0…

spark02-内存数据分区分配原理

代码&#xff1a;val conf: SparkConf new SparkConf().setMaster("local[*]").setAppName("wordcount") val scnew SparkContext(conf) //[1] [2,3] [4,5] val rdd: RDD[Int] sc.makeRDD(List(1,2,3,4,5),3) //将处理的数据保存分区文件 rdd.saveAsText…

【Apifox Helper】自动生成接口文档,IDEA+Apifox懒人必备

文章目录前言&#x1f34a;缘由接口文档对接爽&#xff0c;整理起来真费脑⏲️本文阅读时长约10分钟&#x1f96e;前置条件1. IDEA开发工具2. Apifox(不必要)&#x1f3af;主要目标一秒生成接口文档&#x1f369;水图IDEA中项目接结构图生成到Apifox接口文档图&#x1f468;‍&…

Django框架之模板系列

模板 思考 : 网站如何向客户端返回一个漂亮的页面呢&#xff1f; 提示 : 漂亮的页面需要html、css、js.可以把这一堆字段串全都写到视图中, 作为HttpResponse()的参数,响应给客户端. 问题 : 视图部分代码臃肿, 耦合度高.这样定义的字符串是不会出任何效果和错误的.效果无法及时…

论文投稿指南——中文核心期刊推荐(矿业工程)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

springMVC概念(第一个入门案例)

目录 一、概念 1.什么是mvc&#xff1f; 2.mvc的工作流程&#xff1f; 3.什么是springMVC&#xff1f; 4.springMVC的特点 二、入门案例 准备工作&#xff1a; 正式代码例子 &#xff1a; 一、概念 1.什么是mvc&#xff1f; 答&#xff1a;MVC是一种软件架构的思想&a…

leaflet 上传包含shp的zip文件,在map上解析显示图形(059)

第059个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包含shp的zip文件,利用shapefile读取shp数据,并在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果加载shapefile.js方式安装引用jszip(…

大数据框架之Hadoop:HDFS(四)HDFS的数据流(面试重点)

4.1HDFS写数据流程 4.1.1 剖析文件写入 HDFS写数据流程&#xff0c;如下图所示。 1&#xff09;客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件&#xff0c;NameNode检查目标文件是否已存在&#xff0c;父目录是否存在。 2&#xff09;NameNode 返回是否可…

c++函数指针进阶

c中有两种函数指针 普通函数指针成员函数指针 而对于成员函数指针&#xff0c;又分为两种 静态成员函数指针非静态成员函数指针 定义普通函数指针与静态函数指针的语法类似 void (*pa)(); 定义非静态成员函数指针 void (A::* pa)(); 在调用非静态成员函数时&#xff0c;实…

Spring循环依赖问题,Spring是如何解决循环依赖的?

文章目录一、什么是循环依赖1、代码实例2、重要信息二、源码分析1、初始化Student对Student中的ClassRoom进行Autowire操作2、Student的自动注入ClassRoom时&#xff0c;又对ClassRoom的初始化3、ClassRoom的初始化&#xff0c;又执行自动注入Student的逻辑4、Student注入Class…

8. QT_OpenGL--1. 在QtWidget中搭建OpenGL加载框架

1. 说明&#xff1a; 在 Qt 中使用 OpenGL&#xff0c;实际上时严格遵循一种代码开发框架的&#xff0c;在 QtWidget 中&#xff0c;需要使用 openGlWidget 控件&#xff0c;并自定义类&#xff0c;类中还需继承 QOpenGLWidget,QOpenGLFunctions_3_3_Core 两个类&#xff0c;并…

Word控件Spire.Doc 【Table】教程(14): 如何在C#中为word表格设置AutoFit选项

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

【沁恒WCH CH32V307V-R1的单线半双工模式串口通讯】

【沁恒WCH CH32V307V-R1的单线半双工模式串口通讯】1. 前言2. 软件配置2.1 安装MounRiver Studio3. UASRT项目测试3.1 打开UASRT工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 该模块包含 3 个通用同步异步收发器&#xff08;USART1/2/3&#xff09;和 5 个通…

vivo 自研Jenkins资源调度系统设计与实践

作者&#xff1a;vivo 互联网服务器团队- Wu Qinghua 本文从目前业界实现Jenkins的高可用的实现方案&#xff0c;分析各方案的优缺点&#xff0c;引入vivo目前使用的Jenkins高可用方案&#xff0c;以及目前Jenkins资源的调度方案的设计实践和目前的落地运行效果。 一、前言 现…