【格密码基础理论与CRYSTALS-Dilithium数字签名算法学习分享】

目录

前言

一、格理论基础

1.1-格的基本定义

         2.1-格基的定义

2.2-格基的优劣

二、格的计算困难问题

1.1-svp与cvp

2.1-格基对困难问题计算的影响

3.1-LWE问题基本定义

3.2-LWE问题与CVP问题

3.3-RLWE,MLWE问题数学基础

1-多项式环

2-模多项式环

3.4-RLWE问题

3.5-MLWE问题

3.6-LWE,RLWE与MLWE联系与区别

三、CRYSTALS-Dilithium数字签名算法

1.1-数字签名流程

1.2-算法背景

1.3-算法流程

结语


前言

       众所周知量子计算机拥有强大的计算能力,能够以指数级的速度破解传统加密算法,比如 RSA 和 ECDSA,这些算法依赖的大整数分解和椭圆曲线离散对数问题在量子计算下变得易如反掌。一旦量子计算机成熟敏感信息(如金融交易、医疗记录、机密通信)将不再安全。现有的通信和存储系统可能面临全面失效的风险。近日美国国家标准与技术研究院(NIST)也发布了一份迁移草案,提出了在 2035 年前逐步淘汰现有加密算法的计划,为全球的信息安全升级指明了方向。

​         格密码(Lattice-based Cryptography)作为后量子密码学的重要分支,是基于格理论的一类密码技术。其安全性基于格理论中的难解数学问题,例如学习带噪声问题(LWE)和短整数解问题(SIS),目前已被证实在量子攻击的环境中仍具有出色的安全性,格密码凭借其坚实的数学基础被视为最佳替代方案之一。而且目前宣布批准三项后量子密码学联邦信息处理标准 (FIPS)中,有FIPS 203 FIPS 204两项有关格的算法,这也从侧面印证了格密码在后量子密码学中的重要地位。

​        本篇文章旨在通过格理论的概念、格的困难问题、基于格的密码算法的设计思路、和基于格的Dilithium数字签名算法的解析的学习路径,帮助大家初步理解格的概念,理清学习脉络。


一、格理论基础

本节思路:通过两个方面格的定义介绍格的基本概念,并引出格基的定义,最后落脚与格基的优劣性讨论。


1.1-格的基本定义

定理:格是\mathbb{R}^{n}上的一个离散子群

\mathbb{R}^{n}:n维的欧几里得空间。欧几里得空间是一个带有内积结构的特殊线性空间,具有几何特性,如长度、角度和距离。


离散子群:空间中不连续的点组成的集合,所构成的群,它满足向量加法运算。

eg:二维整数格

\mathbb{Z}^{2}=\left \{ \left (x,y \right )|X\in \mathbb{Z},Y \in \mathbb{Z}\right \}


2.1-格基的定义

定理\mathbb{R}^{n}是一个n维的欧几里得空间,我们定义在上的格的集合如下:

\pounds \left ( b_{1} ,\cdots ,b_{2}\right )= \left \{ \sum_{i=1}^{k} x_{i}b_{i}:x_{i}\in \mathbb{Z}\right \}


格基:其中k个向量b_{1},\cdots ,b_{2}是线性无关的,并且要求k≤n,其中k我们称之为格的秩,然后n称之为格的维度。这个向量序列我们称之为格的一组格基

eg:二维整数网格的基变换。

\mathbb{Z}^{2}=\left \{ \left (x,y \right )|X\in \mathbb{Z},Y \in \mathbb{Z}\right \}

注:det(B)=±1


矩阵乘法与基变换:矩阵的列向量决定了基向量如何被映射到新坐标系


2.2-格基的优劣

定理:设L是一个n维的格,L的一个基础区域。 n维的体积称为L的行列式(有时也称为协体积),记为detL


基础区域:基础区域为如下向量的集合

f\left (b _{1},\cdots ,b_{k} \right )=\left \{ t_{1}b _{1}+t_{2}b _{2}+\cdots +t_{n}b _{n},0\ll t _{i}< 1\right \}


Hadamard比率:定义格的基B={𝑏1𝑏2bn},比率值如下:

H\left ( B \right )=\left ( \frac{detL}{\left \| b_{1} \right \|\cdot \left \| b_{2} \right \|\cdots \left \| b_{n} \right \|}\right )^{\frac{1}{n}}

当比率大于0.6时,就可认定为优基


二、格的计算困难问题

本节思路:格的计算困难问题以最短向量问题(SVP),最近向量问题(CVP)为基础。其他困难问题都可规约为这两类。本节将从这两类困难问题出发,让大家理解格基对格困难问题的影响,最后讲解RYSTALS-Dilithium数字签名算法的计算困难问题LWE问题。

1.1-svp与cvp


最短向量问题(SVP:在格L中寻找一个最短的非零向量,即寻找一个非零向量v∈L,使得它的欧几里得范数‖v‖最小


最近向量问题(CVP:给定一个不在格L中的向量w\in \mathbb{R}^{n},寻找一个向量v∈L。使它最接近,即寻找一个向量,使得欧几里得范数‖w-v‖最小。


2.1-格基对困难问题计算的影响

考虑这样一种情况:一个格L\in \mathbb{R}^{n}的基v_{1},v_{2},\cdots ,v_{n}中的各个向量是两两正交的(Hadamard比率为1),即存在v_{i}\cdot v_{j}=0,i\neq j那么就可非常容易的求解出SVPCVP问题。

例如在CVP中,假设希望在上述格L中找到一个最接近于给定向量w\in \mathbb{R}^{n}的格向量。构造表达式:w=t_{1}v_{1}+t_{2}v_{2}+\cdots +t_{n}v_{n}; t_{1},t_{2},\cdots ,t_{n}\in \mathbb{R} ;那么对于格向量v=a_{1}v_{1}+a_{2}v_{2}+\cdots +a_{n}v_{n}; v_{n}\in L,有\left \| v-w^{} \right \|^{2}=\left ( a_{1}-t_{1} \right )^{2}\left \| v_{1} \right \|^{2}+\left ( a_{2}-t_{2} \right )^{2}\left \| v_{2} \right \|^{2}+\cdots +\left ( a_{n}-t_{n} \right )^{2}\left \| v_{m} \right \|^{2}                        因为a_{i}必须是整数,所以只要使每个的取值都最接近于其对应的t_{i},那么\left \| v-w \right \|的值就可以达到最小,于是CVP得解

Ps:由于劣质基的非正交性,系数t对于w的位置非常敏感,甚至一个微小的误差(例如舍入误差)都会导致较大的偏移。所以此方法只能在优质基上使用。

从以上内容中不难发现,在只知道劣质基和目标向量w时,为了求解CVP,首要的任务是寻找一个相对优质的基。一般的,这一过程是很困难的,但相反由优质基生成劣质基却是简单的,这种特性就可用来构造陷门构造相应的密码系统。


3.1-LWE问题基本定义

给定一个密钥向量s\in \mathbb{Z}_{q}^{n}和一组公开的样本对(A,b),其中:

1.A\in \mathbb{Z}_{q}^{m\times n}:一个已知的随机矩阵(通常是公开的)。

2.b=𝐴𝑠+𝑒 𝑚𝑜𝑑 𝑞:带噪声的线性组合;                                                                                                1)q为大模数,通常是素数。2)e是一个小的误差向量(一般由高斯分布或均匀分布得到)

目标是通过观察(Ab)在已知A的情况下恢复密钥s


Search LWE问题:给出LWE的样本,要求求出秘密向量s


decision LWE问题:给定m个独立的样本,如下:

\left ( A_{i},b_{i}\right )\in \mathbb{Z}_{q}^{n}\times \mathbb{Z}_{q}

这些样本b的来源有两种情况:

1.b是按照LWE分布生成的,其中s是未知密钥,e是从某个已知分布生成的噪音。

2.b是从均匀分布中随即生成的。

如果能以不可忽略的优势区分这两种情况,才可以称之为解决了decision LWE问题。


3.2-LWE问题与CVP问题

LWE问题可以被转化为一种“带噪声”的格问题,其本质可以视为一个变形的CVP问题:

LWE CVP 的转化:

1)在 LWE 问题中,LWE 样本(A,b)定义了一个格,其中A是生成矩阵,密钥s对应于一个隐藏的目标点。

2)噪声e将真实的格点偏移到目标点b附近。

3)求解 LWE 等价于在高维空间中找到离目标点b最近的格点,这本质上就是 CVP 的一个变种。

噪声影响:

1CVP 通常在无噪声的情况下定义,而 LWE 加入了噪声 e,使得问题更加复杂。

2)噪声的引入意味着我们不需要找到完全精确的格点,而是找到一个近似解。

LWE Gap-CVP 的归约:

1LWE 可以归约到一个特殊的 CVP 问题,即 Gap-CVP

2Gap-CVP 问题是:给定一个目标点,判断它是否接近于最近格点(在某个阈值内)或远离所有格点(超过另一个阈值)。

这种归约进一步支持了 LWE 的理论困难性。


3.3-RLWE,MLWE问题数学基础

1-多项式环

多项式环是由系数取自一个环(通常是整数环或有限域)的多项式构成的集合,配合多项式的加法和乘法运算,形成一个环。

形式:

给定一个环R(如\mathbb{Z}\mathbb{Z}_{q}),多项式环Rx[x]是所有系数属于R的多项式集合,形式为:

f\left ( x \right )=a_{0}+a_{1}x+a_{2}x^{2}+\cdots +a_{n}x^{n}

其中a_{i}\in R,n是有限的非负整数。

运算:

1.加法:按多项式的各次幂系数相加。

2. 乘法:按照多项式的分配律和结合律进行展开。

2-模多项式环

在密码学中,常用的多项式环并不是 R[x] 本身,而是模多项式环。模多项式环通过对多项式取模运算引入一个固定的多项式 f(x) ,其形式为:R\left [ x \right ]/\left ( f\left ( x \right ) \right )
表示所有多项式对f\left ( x \right ) 取模后的等价类。

形式

1.任意多项式g(x)都可以用一个低次多项式表示,其次数小于f(x)的次数。

2.如果f(x)是一个次数为d的多项式,那么模多项式环中多项式的次数范围是0d−1

运算规则

1. 加法:直接对多项式逐项相加,结果仍然对 f(x) 取模。
2. 乘法:对多项式逐项相乘,结果对 f(x) 取模。

在密码学(如 RLWE MLWE)中,使用的多项式环通常基于以下形式:

\mathbb{Z}_{q}\left [ x \right ]/\left ( x^{d}+1 \right )

系数属于有限域 \mathbb{Z}_{q}(q的整数集合)。

模多项式为 f\left ( x \right )=x^{d}+1

特性

1. 循环对称性:在\left ( x^{d} +1\right ) 模环中,任何次幂x^{i} 都可以通过替换x^{d}=-1 (模 q )归约到更低次的形式。这种循环对称性有助于优化计算。
2. 效率优化:基于模x^{d}+1 的多项式运算可以利用快速傅里叶变换( FFT )和 NTT 算法进行高效计算。

3.4-RLWE问题

RLWELWE 的改进版本,它将问题从一般格缩小到带有代数结构的环格上。

形式

给定一个多项式环\mathbb{Z}_{q}\left [ x \right ]/\left ( f\left ( x \right ) \right ),矩阵A被替换为环元素(即多项式),问题变为:

b\left ( x \right )=a\left ( x \right )\cdot s\left ( x \right )+e\left ( x \right ) mod q

其中b(x),a(x),s(x),e(x)是属于多项式环的元素。

a(x)可以看作一个循环矩阵,或者看作as的系数向量进行循环卷积。

特性:

1.RLWE 利用环结构将 LWE 的高维矩阵操作简化为多项式乘法和模运算,大大减少了存储和计算开销。

2.环格具有更强的代数结构,使得基于 RLWE 的算法更加高效(例如加密、签名)。

优点:

1.存储优化:矩阵A被替换为多项式,存储复杂度从 O(mn)降低到 O(n)

2.计算效率:快速傅里叶变换(FFT) 可以高效地计算循环卷积,从而加速多项式乘法。

缺点

1.子环攻击:通过利用环的代数结构,将原始问题简化到更小的子环,从而降低问题的复杂度。


3.5-MLWE问题

MLWE 是介于 LWE RLWE 之间的一种改进,定义在模块格上。模块结构是向量空间的推广,系数来自一个环,而不是域。模块格是环格和一般格之间的一种扩展。MLWE 的矩阵A可以看作是多个小型 Ring-LWE 问题的组合,适用于更高维度的格结构。

形式:

b=As+e\left ( modq \right )

其中:

1.A是一个矩阵其元素是环\mathbb{Z}_{q}\left [ x \right ]/\left ( f\left ( x \right ) \right )中的多项式。

2.s,e是向量,其元素也来自该多项式环。

特性:

1.MLWE 的维度比 RLWE 高,但比 LWE 低,提供了一种灵活的权衡。

2.安全性基于模块格上的困难问题。

3.既具有 RLWE 的效率优势,又在一定程度上克服了 RLWE 的安全性问题(因为它不完全依赖环格)。

优点:

1.灵活性:可以通过调整模块的大小在安全性和效率之间找到平衡。

2.安全性增强:由于模块格的更大自由度,MLWE在安全性上优于RLWE(部分避免了环格攻击的弱点)。


3.6-LWE,RLWE与MLWE联系与区别

总结

1. LWE 是基础问题,定义简单但效率低。
2. RLWE 是优化版本,利用环结构提高效率,但可能存在安全性问题。
3. MLWE 是进一步优化的折中方案,兼具 RLWE 的效率和较好的安全性,广泛用于现代抗量子密码方案。

三、CRYSTALS-Dilithium数字签名算法

本节思路:在介绍数字签名算法大体流程后,对整个Dilithium算法流程进行分析。


1.1-数字签名流程

数字签名算法通常使用公钥密码学,是一种用来验证消息的真实性(来源可靠)、完整性(未被篡改)和不可否认性(发送者无法否认消息)的密码学技术。它主要包括以下三个阶段:签名生成、签名验证、密钥管理。


1.2-算法背景

CRYSTALS-Dilithium 是一种基于格密码学的后量子数字签名算法,其核心构建和安全性依赖于模块化学习错误问题(Module Learning with Errors, MLWE)。它通过扩展 LWE 问题到模块化结构,实现了高效性和安全性的平衡,同时能够抵抗经典和量子计算攻击。

安全性分析:

1. 困难性归约MLWE 问题的安全性可以归约到以下困难问题:

1)最短向量问题(SVP):在高维格中找到最短向量是 NP 难的。

2)最近向量问题(CVP):找到与目标向量最接近的格点在高维情况下也是困难的。

2. 误差模糊化:通过引入误差多项式 eMLWE b=A⋅s+e 的信息模糊化,使得攻击者即使拥有 A b,也难以解码 s

3. 抗量子攻击:已有研究表明,解决 MLWE 问题的复杂性在量子计算机下不会显著降低,因此 CRYSTALS-Dilithium 能有效抵抗量子计算攻击。


1.3-算法流程

种子生成

1.\zeta \leftarrow \left \{ 0,1 \right \}^{256}首先生成一个256bit的随机值,这个随机值,不参与后面的交换过程的,只是为了生成后面的随机种子𝜌𝜌K

2.采用基于哈希的伪随机数生成算法SHAKE-256(理论可换),利用H函数分别生成

\left ( \rho ,\rho ^{'},K \right )\in \left \{ 0,1 \right \}^{256}\times \left \{ 0,1 \right \}^{512}\times \left \{ 0,1 \right \}^{256}:=H\left ( \zeta \right )

3.根据以上三个初始值,可生成具体密钥,首先生成一个随机的基于模多项式环的矩阵A

A\in \mathbb{R}_{q}^{k\times l}:=ExpandA\left ( \rho \right )


密钥生成

1.计算参数

\left ( s_{1} ,s_{2}\right )\in S_{\eta }^{t}\times S_{\eta }^{k}:=ExpandS\left ( \rho^{'} \right )

1)这里,S_{\eta }表示,系数范围在\eta之内,这里私钥是一个系数比较小的值

2s_{1} ,s_{2}分别是秘密向量和误差向量,元素来自小整数分布

2.计算公钥

t:=As_{1}+s_{2}

3.为方便计算采用,将t分成高低两个部分

\left ( t_{1},t_{0} \right ):=Power2Round_{q}\left ( t,d \right )

参数解释

1)t:输入的整数,通常是某个向量或多项式的系数。

2)q:模数,用于限制t的范围,通常是 CRYSTALS-Dilithium 中定义的模 q

3)d:一个小整数,表示压缩的精度。d控制t_{1}t_{0}的位宽分布。

4)t_{1}:压缩后的高精度部分(商),保留t的高位信息。

5)t_{0}:压缩后的低精度部分(余数),用于保留被截断的信息,确保操作的可逆性。

4.计算消息哈希作为签名验证中的辅助参数:

tr\in \left \{ 0,1 \right \}^{256}:=H\left ( \rho ||t_{1} \right )

作用

1)验证者可以通过公钥中的\rhot_{1}重新计算,以验证签名的完整性。

2)在验证阶段,签名者与验证者都需要重新计算tr,以确保签名过程中没有篡改。

3tr的引入提高了公钥和签名之间的绑定性,防止公钥被替换攻击。

5.得到公钥

pk=\left ( \rho ,t_{1} \right )

对应私钥

sk=\left ( \rho ,K,tr,s_{1} ,s_{2},t_{0}\right )


签名生成

已知私钥sk=\left ( \rho ,K,tr,s_{1} ,s_{2},t_{0}\right ),假设需要签名的消息为M。

1.根据ρ来恢复出矩阵A

A\in \mathbb{R}_{q}^{k\times l}:=ExpandA\left ( \rho \right )

2.计算哈希值

\mu \in \left \{ 0,1 \right \}^{512}:=H\left ( tr||M \right )

tr是由公钥生成的哈希值,可以视为公钥的拼接。

3.H派生生成一个随机值

a\in \left \{ 0,1 \right \}^{512}:=H\left ( K||\mu \right )

4.在签名过程中,生成的候选签名需要满足特定的数学约束,所以还需进行一定的循环过程

1)假设计数器𝜅=0生成随机向量yy与公钥和消息紧密关联

y\in \tilde{S}_{\gamma _{1}}^{l}:=ExpandMask(a,\kappa )

\tilde{S}_{\gamma _{1}}^{l}是一个特定的集合,与签名算法中的模数和随机性限制有关。它定义了满足某些特定约束的向量空间,参数\gamma_{1}是用来限制y的参数范围

2)通过签名向量z和其它参数计算得到的一个中间值计算

w:=Ay

3)读取w的高位

W_{1}:=Highbits_{q}\left ( w,2\gamma _{2} \right )

2\gamma _{2}用于确认截取范围

4)将输入消息与签名并联,同时不可预测,增强了签名的唯一性和安全性

\tilde{c}\in \left \{ 0,1 \right \}^{512}:=H\left ( \mu |W_{1}\right )

通过H\left ( \mu |W_{1}\right )生成一个不可预测的、与消息强关联的中间值\tilde{c}

5)生成挑战值c

c\in B_{r}:=SamplelnBall\left ( \tilde{c} \right )

B_{r}表示一个特定的结构集合(通常为一个模q的多维球形集合),其约束条件确保采样后的c符合签名算法的数学性质和约束。

将中间值\tilde{c}通过采样映射到特定集合B_{r}中,得到最终用于签名计算的c

挑战值与待签名消息相关联,验证时可以检测消息是否被篡改。

6)计算z通过y的随机性,以及cs_{1}的挑战值,保证z签名过程z中的不可预测性和抗攻击性。

z:=y+cs_{1}             

 

参数解释:

1.y 是之前生成的随机向量,通常用于保证签名的随机性。
2.c 是由消息和签名参数生成的挑战值,确保签名与消息的强绑定性。
3.s_{1} 是签名密钥的一部分,用于与随机性 y 和挑战 c 相结合生成签名。

4.z是签名的一部分,用于验证过程中重建数学关系。它通过结合随机性 𝑦y和私钥 𝑠1s_1保证签名的安全性和唯一性。

7)提取w-cs_{2}的低位部分,将签名的验证集中在特定的范围内,减少计算开销。

r_{0}:=LowBits_{q}\left ( w-cs_{2},2\gamma _{2} \right )

8)为保障安全性判断zr_{0}是否在范围之内。

\left \| z \right \|_{\infty }\geq \gamma _{1}-\beta \left \| r_{0} \right \|_{\infty }\geq \gamma _{2}-\beta

无穷范数\left \| z \right \|_{\infty }求出向量z中绝对值最大的元素。

如满足其中一个,需重新回到1)重复进行

9)计算MakeHint 是一个生成提示信息的函数,用于在验证过程中帮助重建高位部分w_{1}​,生成h提示向量。

h:=MakeHint_{q}\left ( -ct_{0} ,w-cs_{2}+ct_{0},2\gamma _{2}\right )

参数解释w-cs_{2}+ct_{0}

1.w是通过w≔Ay计算得到的中间值。

2.cs_{2}是与密钥s_{2}和挑战c相关的项,用于调整w

3.ct_{0}再次对结果进行细调,确保高低位的分解满足验证需求。

10)生成的h满足

\left \| ct_{0} \right \|_{\infty }\geq \gamma _{2}sum\left ( h \right )> \omega

满足其中一个,需重新回到1)重复进行

11)计数器\kappa :=\kappa +l

5.最终输出签名最终内容

\delta =\left ( \tilde{c} ,z,h\right )


签名认证

已知公钥pk=\left ( \rho ,t_{1} \right )和签名\delta =\left ( \tilde{c} ,z,h\right )

1.判断h,z范围,是否合理,若不合理,直接返回验签失败。

\left \| z \right \|_{\infty }\leq \gamma _{1}-\beta ;sum\left ( h \right )\leq \omega

2.根据ρ恢复出矩阵A

A\in \mathbb{R}_{q}^{k\times l}:=ExpandA\left ( \rho \right )

2.依据消息哈希tr,计算μ。

tr\in \left \{ 0,1 \right \}^{256}:=H\left ( \rho ||t_{1} \right );\mu \in \left \{ 0,1 \right \}^{256}:=H\left ( tr ||M\right )

3.恢复c的值,得到一个多项式

c:=SamplelnBall\left ( \tilde{c} \right )

4.计算

W_{1}^{'}:=UseHint_{q}\left ( h,Az-ct_{1},2^{d},2\gamma _{2} \right )

通过提示向量h辅助恢复高位部分W_{1}^{'},并与生成阶段的W_{1}进行比较,确保签名的合法性和一致性。

5.验签

\tilde{c}\in \left \{ 0,1 \right \}^{256}:=H\left ( \mu ||W_{1}^{'} \right )

计算\tilde{c}和传输过来的是否一致,如果一致,验签成功,否则,验签失败。


结语

         本人是一名普通的本科学生,此内容为一学期的课余时间所学,写这篇文章意在总结学习经验并与大家分享学习感悟,帮助和我一样的初学者入门格密码,理清基本的学习思路。感谢大家看到这里,若有错误也请大家多多指正,也欢迎大家在评论区进行讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值