Falcon Chapter 2(上)

Chapter 2 The Design Rationale of Falcon

2.1 对紧凑的追求

        Falcon 的设计原理源于一个简单的观察:当从 RSA 或基于离散对数的签名切换到后量子签名时,通信复杂度可能会比速度更大的问题。事实上,许多后量子方案都有一个简单的代数描述,这使得它们速度很快,但所有方案都需要比前量子方案更大的密钥,或者更大的签名,或者两者兼而有之。

        我们预计这些性能问题将阻碍从前量子方案到后量子方案的过渡。因此,我们的主要设计原则是尽量减少以下数量:

                |pk| + |sig| = (公钥位数) + (签名位数).

        这导致我们在考虑基于格密码签名时,都会使得pk和sig尽可能的小。涉及格签名时,通常有两种范式:Fiat-Shamir 或 hash-and-sign(关于hash-and-sign在后面总结)

        这两种范式的紧凑型都很好,但是后者的特性更加有趣,GPV 框架 [GPV08] 描述了如何获得基于散列和符号格的签名方案,在经典和量子预言机模型中是安全的 [GPV08, BDF+11]。

        接下来,我们选择了一类加密格来实例化这个框架。关于我们的主要设计原则——紧凑性——接近最佳选择是 NTRU 格:它们允许获得 GPV 框架的紧凑实例化 [DLP14]。

        最后一步是活门取样器。设计了一种新的活门采样器,其速度几乎与最快的通用活门采样器[PEI10]一样快,并提供了与最安全的采样器[Kle00]相同的安全级。

2.2 GPV框架

        该框架可以这样描述:

        1. 公钥包含一个满秩矩阵A∈Zn×mq(其中m>n),生成a q-ary lattice Λ。

        2. 私钥包括一个矩阵B∈Zm×mq,生成一个其中这个表示Λ 模 q 正交的格,我们有 〈x, y〉 = 0 mod q。等效地,A 和 B 的行是成对正交的:B × At = 0

         3.给定消息 m,m 的签名是一个短值 s ∈Z_{q}^{m},使得s*A^{T}=H(m),在给定A的情况下,验证s是否为有效签名很简单:它只需要检查s是否确实短,并且使得s*A^{T}=H(m)

         4.计算有效签名更为微妙,首先计算一个前项C0∈Z_{q}^{m},验证使得C0*A^{T}=H(m),由于不要求C0是短的,并且m>=n,通过标准线性代数完成。使用B来计算接近C0的向量V,差异S=C0-V是一个有效签名。实际上,S*A^{T}=C0*A^{T}-V*A^{T}=H(m),如果C0和V足够接近那么S很短。

        签名方案的这种高级描述并不是GPV框架所独有的:它首先在GGH[GGH97]和NTRUSign[HHP+03]签名方案中被实例化。然而,这些方案遭受了完全破解攻击,而GPV框架在(量子)随机预言模型中被证明是安全的,假设SIS对于某些参数是困难的。这是因为GGH/NTRUSign和GPV框架在签名过程中具有完全不同的计算v的方法。

        GGH(Goldreich, Goldwasser和Halevi (GGH)公钥密码系统)

         NTRU是一种非对称密码系统,它基于格上的最短向量问题。1996年由Hoffstein, piphher和Silverman发现。2009年,NTRU密码系统已经通过了电气和电子工程师协会(IEEE)的标准化认证。与RSA和ECC相比,这是一种更有效的加密和解密方法:更快的密钥生成(使用一次性密钥)和低内存使用(因此它可以用于移动设备和智能卡)。

        NTRU的消息为多项式形式,其系数为整数mod p 。

        Alice 作为发送者以及 Bob 接受者想使用NTRU,那么他们该如何使用呢?

 

 在GGH和NTRUSign中计算v:在GGH和NTRUSign中,v是使用称为舍入算法的算法计算的,该算法首先由Babai[Bab85,Bab86]形式化。在这个确定性算法中,c0首先被表示为B行的实线性组合,然后这些实坐标的向量按系数舍入,并再次乘以B:简而言之,v ← ⌊c_{0}B^{-1}⌉ B 这里括号是按系数舍入,在过程结束时,s = v−c0保证位于平行六面体[-1,1]^{m} × B中,这允许严格限制范数∥s∥。这种方法的问题是每个签名 s 位于[-1,1]^{m} × B 中,因此泄漏有关基础 B 的信息。这一事实被几个关键恢复攻击利用 [NR06, DN12]。

 GPV框架中计算v:这也是 GPV 框架和 GGH/NTRUSign 之间的主要区别,是计算 v 的方式。GPV 框架不是舍入算法,而是依赖于最近平面算法的 [Kle00] 的随机变体,也由 Babai 形式化。就像舍入算法一样,使用最近的平面算法会泄漏密基B,并导致方案完全崩溃。然而,克莱因的算法阻止了这一点:它以一种方式被随机化,使得对于给定的m,s根据移位晶格c_{0}+Λ⊥q上的球面高斯分布进行采样。该方法已被证明不会泄漏。

其实不用特别在意v是怎么生成的。只需要知道二者不同。

2.2.1 GPV框架的特点和实例

         GPV框架已被证明在随机预言模型下是安全的。在我们的例子中,我们使用NTRU格子,所以我们需要将证明改编为“NTRU-SIS”假设,但这种改编很简单。

        Falcon 可以转化为基于身份的加密方案,如 [DLP14] 中所述。但是,这需要对签名过程进行去随机化(参见第 2.2.2 节)。

 2.2.2 状态、去随机化或散列随机化(不太懂) 

        在 GPV 框架中,同一哈希 H(m) 的两个不同签名 s, s' 永远无法同时公开,因为这样做会破坏安全.

        状态:第一个解决方案是通过维护签名消息及其签名的列表来使方案成为有状态的。然而,保持这样的状态会带来一些操作问题,因此我们不认为这是一个可信的解决方案。

        去随机化:第二种可能性是将签署程序去随机化。然而,伪随机性需要在所有实现中以一致的方式生成(在不同的设备中使用相同的签名密钥并不少见)。虽然这个解决方案可以应用在一些特定的用例中,但我们不考虑将其应用于猎鹰。

        散列随机化:第三种方案是在对消息进行散列之前在消息m前面加上盐r∈[0,1]^{k},如果k足够大,这可以防止碰撞的发生。从操作的角度来看,这个解决方案是最容易应用的,而且它仍然受到GPV框架的安全证明的保护(见[GPV08,第6.2节])。

        在三种解决方案中,Falcon选择了散列随机化:随机生成盐r∈[0,1]^{k},k=320,并在对消息进行散列之前将其添加到消息前面。比特大小320等于λ+log2(qs),其中λ=256是NIST所需的最高安全级别,qs=264是可以从单个签名者查询的最大签名数量。对于安全级别λ<256时,这个大小实际上有点过分,但是从api的角度来看,在所有安全级别上固定一个大小会使事情变得更容易:例如,可以在不知道私有签名密钥的安全级别的情况下对消息进行散列。(大概讲了一些关于安全级别和为什么选择散列随机化的方法来处理Falcon)。

 2.3 NTRU 晶格

        实例化GPV框架时的第一选择是要使用的晶格类。设计理念显然在这方面起到了很大作用。事实上,如果强调安全性而不妥协,那么合乎逻辑的选择是使用没有任何额外结构的标准格子,例如在密钥交换方案Frodo[BCD+16]中所做的那样。

        我们的主要设计原则是紧凑。为此,Falcon依赖于由Hoffstein,Pipher和Silverman[HPS98]引入的NTRU格类;它们带有附加的环结构,不仅允许将公钥的大小减少O(N)倍,而且还将许多计算速度提高至少O(n/logn)倍。即使在环上更广泛的格中,NTRU格也是最紧凑的:公钥可以简化为n-1次的单个多项式 h∈Zq[x]。

        在此过程中,我们遵循 Stehlé 和 Steinfeld [SS11] 的思想,他们表明 GPV 框架可以以可证明安全的方式与 NTRU 晶格一起使用。然而,如果没有安全,紧凑性将毫无用处。从这种观点来看,NTRU 格也有理由激发信心,因为它们已经抵制了大约二十年的广泛密码分析,我们以一种我们认为使它们更具抵抗力的方式对它们进行参数化。

2.3.1 NTRU晶格简介

        令φ = x^{n} + 1,n = 2^{k} 一个 q∈ N* 一组NTRU秘密由四个多项式f,g,F,G∈Z[x]/(φ)组成,他们的NTRU验证方程:

                                                f G − gF = q mod φ (2.1)

        假设 f 是 模q的可逆,我们可以定义多项式h<---g*f^{-1}mod q 特别的,h是公钥,f,g,F,G是密钥,事实上,两个矩阵生成了相同的格:,但第一个矩阵包含两个大的多项式(h和q),而第二个矩阵只包含小的多项式,这允许解决如第2.2节所示的问题。如果f,g的生成具有足够的熵,那么h将看起来是伪随机的[SS11]。但在实际应用中,即使f,g很小,也很难找到满足h=g‘ ·f'^{-1}mod q。这个问题的难度构成了NTRU的假设(安全性)。

2.3.2 GPV框架实例化 

         我们现在实例化第 2.2 节中描述的 NTRU 格上的 GPV 框架:

        1.一个公共基础A=[1 | h *],相当于知道h

        2.秘密基础:(2.2)可以检查矩阵A和B是否确实是正交的:B×A*=0 mod q。

        3.消息m的签名由盐r加上一对多项式(s1,s2)组成,使得s1+s2h=H(r∥m)。我们注意到,由于s1完全由m、r和s2确定,因此不需要发送它:签名可以简单地为(r,s2)。

2.3.3选择最佳参数 

        我们的陷门采样器对范数的特征进行采样本质上与||B||_{GS}成正比,其中||B||_{GS}表示B的Gram-Schmidt范数。

         在实践中,||B||_{GS}对于∥(f,g)∥≈1.17√q最小化。因此,我们在以0为中心的Z[x]/(φ)中生成f, g作为离散高斯函数,使∥(f, g)∥的期望值约为1.17√q。一旦完成此操作,就知道计算||B||_{GS}的非常有效的方法,如果该值超过1.17√q,则重新生成新的多项式f, g,过程开始。

       我们在实际中到达的边界  ||B||_{GS}≤1.17√q在||B||_{GS}的理论下限的1.17倍以内。事实上,,对于2.2中给出的形式的B,用f,g,F,G检验2.1,有一个理论下界√q。

        

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值