GGH97

来源:互联网 发布:神秘的程序员 头像 编辑:程序博客网 时间:2024/06/14 03:33
    GGH97介绍了一种新型的陷门单向函数,其中单项函数是建立在CVP问题上的,陷门则是CVP问题所在的格的约化基。    使用该陷门单向函数可以构造加密方案和签名方案。
  • 加密方案

构造加密方案的方法有很多种,一种通用的方法是使用陷门函数的hard-core比特,将消息的比特嵌入进去[参考文献12]。这种方法的优势是可以确保方案的安全性能达到底层陷门单向函数的水平,缺点是随着消息的扩张,效率较低。
另外一种较为合理的方法可以达到较高的效率,具体方法是将消息映射到格点上。格点是由基向量的整数线性组合确定的,而整数的组合是由消息的比特得到的。再将一个随机选择的“小错误向量”加到格点上,便得到密文。解密时,寻找一个和密文距离较小的格点,如果使用约化基进行解密,那么有很大概率可以得到正确的明文。

  • 签名方案

    将消息看做n维空间的一个向量,通过约化基可以找到一个与该向量较近的格点,所谓的“近”是一个公共的阈值。由于我们是用的是约化基,所以该过程的实现是可能的。(但具体方法呢?同加密方法吗?Babai的求解CVP问题的方法?)
    签名之后的验证过程分为两步:先验证签名确实是一个格点;再验证该格点与向量确实较近。
    但是该签名有一个问题,会造成安全性问题。如果两个消息的向量表示较近,则会得到同一个签名。通过此过程,可能会被使用签名进行攻击的敌手获得格的一个短基。所以推荐先hash再签名。

  • 方案分析

本文对该方案进行了广泛的攻击测试,随着格的维度的增加,攻击所需要的时间是指数增长的。当格的维数达到300左右时,这些攻击在实践中就很难实现。
本文提出了两个概念,一个是对偶格的概念,另一个是矩阵的orthogonality defect的概念。另外定义对偶矩阵的orthogonality defect概念也是很有用的。

orthogonalitydefect(B)={1>1

且格L的对偶格基的orthogonality defect与攻击格L所需要的工作量是成比例的。所以,一个格的dual-orthogonality defect代表着它被攻击的困难性,值越高,越难攻击。
- 陷门函数

陷门函数的构造及使用共有四个过程。Generate,Sample,Evalute and Invert。Generate算法生成一个私有格基R,并用R生成公共格基B。另外,随机选取\delta,作为错误向量的取值范围。
另外根据已经确定的矩阵R及格的维数等参数,可以估计\delta的边界。根据引理引理
得到了误差向量的限制条件。另外根据定理(一范数)
定理
得到了误差向量的边界。该定理的无穷范数的版本:
这里写图片描述

Generate算法从两个可能的分布中选择private base R。一个是random lattice,即从{l,l}nn中随机选择一个基。l是矩阵中元素的边界。本文的实验发现,l的大小几乎不会影响生成的基的质量,所以只要选择一个小的整数就可以。(l取的较大的话会不会增加使基的质量变大的概率?)
另一种方法就是从kI开始,加上一个误差矩阵获得一个新的基。即R=R+kI,其中R是从{l,,l}nn中随机选择一个矩阵,不一定是一个基。k越大,对偶格的非正交指数越小。实验表明k=ln时可以获得最好的参数。
Generate算法获得公共格基B的算法也有两种。第一种就是将R中的每一列替换掉,替换的方法是用该列加上R中其他列的线性组合。需要替换2n次即可抵抗LLL约化方法。(替换过程中,一直使用R的列向量进行混合?2n次是每一个向量需要混合2n次还是总的是2n次?)
第二种方法是将R乘一个幺模矩阵进行转换。这个幺模转换矩阵是一个上三角矩阵和一个下三角矩阵的乘积。LU中的元素都是从{0,1,-1}中随机选取的。为了抵抗LLL约化方法,需要将这个乘转换矩阵的过程进行4次。得到的公共格基的元素比第一种方法得到的要大。故本文采用了第二种方法。
当确定了R以及δ的参数之后,就可以顺理成章的执行Sample、Evalute以及Invert过程。
当然也可以在Invert过程中,用B1代替R1来对该陷门单向函数进行攻击,攻击的难度随着格的维数n的增加而指数增长。每增加一个维度,攻击难度会增加大约8000倍。

  • 具体的加密方案
    对明文进行加密,需要将明文嵌入到单向函数中,即将明文映射到一个格向量上,再将一个错误向量加到格向量上进行加密。所得到的一个新的Rn中的向量便是一个密文。这个映射过程称为encoding过程,encoding方案影响着整个加密方案的安全性。本文描述了两种encoding方案。
    第一种encoding方案:Generic Encoding。这种通用的方法是使用陷门单项函数的hard-core比特位作为消息的比特。Goldreich-Levin【12】中的构造表明了如何隐藏单向函数原象中的hard-core比特。这种方法的优点在于它能够证明在以陷门函数开始的假设下,要在多项式时间内区分两个消息是不可能的。缺点是很难应对消息的扩张。
    第二种方案是直接将消息的比特嵌入到向量v中,这种不做特殊处理、直接嵌入的方法有一个缺点,即当在公共格基B的逆B1中存在某一行biˆ特别小时,不能抵抗上文提到的Round-Attack,容易泄露对应的vi。所以在该方案中有两个嵌入的原则:1.应将消息的比特位嵌入到向量v的分量vi的最低有效位中;2.不应把消息比特放入B1中欧几里得范数较小的行所对应的分量中。具体地,需要看B1中行向量的欧几里得范数。如果有一行的欧几里得范数较大,便可以在相对应的分量vi中放置l个比特位的消息;如果B1中所有的行向量的欧几里得范数都特别小,就用几个向量来表示消息的比特,即把这几个向量的最低有效位的值进行异或得到。
原创粉丝点击