基于格密码体系的多项式模乘协处理器
技术领域
本发明涉及一种多项式模乘协处理器。特别是涉及一种基于格密码体系的多项式模乘协处理器。
背景技术
公钥密码体制是保障电子商务、电子政务中信息安全的主要手段。基于大整数因子分解和离散对数困难问题构造公钥密码体制是目前主流的公钥密码体制,如:RSA密码体制。但这些密码体制中都包含复杂的数学运算,仍制约着这些公钥密码体制的发展,如:椭圆曲线密码体制、双线性对密码体制。另外大整数因子分解和离散对数问题已经被证明不能抵御量子攻击和亚指数攻击。因此必须寻求更加高效、安全的公钥密码体制,1996年Ajtai开创性地提出了基于最差情况下格问题的困难假设构造密码方案的可能性,为构造新型的公钥密码体制提供了一条崭新的思路。
一个n维格是Rn上的离散加法子群。基于格构造的密码方案是建立在某个格问题的困难假设基础上的,其中最基本的困难问题是最短向量问题SVP,从目前的研究和实验结果,可推测不存在求解近似因子为多项式的多项式时间算法和多项式时间量子算法。
发明内容
本发明所要解决的技术问题是,提供一种能够大大提升多项式乘法的效率,解决基于格运算的加密方案可行性问题的基于格密码体系的多项式模乘协处理器。
本发明所采用的技术方案是:一种基于格密码体系的多项式模乘协处理器,包括有分别与第一至第四输入接口对应相连的用于存储单位根向量的第一寄存器堆,用于存储地址映射向量的第二寄存器堆,用于分别存储多项式系数向量的第三寄存器堆和第四寄存器堆,还设置有:
多路选择器,所述多路选择器的输入端分别连接用于存储多项式系数向量的第三寄存器堆和第四寄存器堆的输出端,以及连接模乘逆元运算单元的输出端;
输入寄存器堆,分别连接多路选择器和地址映射表,根据地址映射表重新对从所述多路选择器输入进来的向量进行排序,并存储;
取模运算下的快速傅里叶变换模块,分别连接所述的输入寄存器堆的输出端,以及用于存储单位根向量的第一寄存器堆的输出端,进行快速傅里叶变换;
输出寄存器堆,所述输出寄存器堆的输入端连接所述取模运算下的快速傅里叶变换模块的输出端,输出寄存器堆的输出端连接多路分配器;
多路分配器,所述多路分配器将取模运算下的快速傅里叶变换模块变换之后的结果送到输出端,或者送入模乘单元;
模乘单元,所述的取模运算下的快速傅里叶变换模块变换之后的结果在模乘单元内首先通过乘法器进行乘法运算,再将乘法运算的结果经约减器进行约减运算;
模乘逆元运算单元,所述模乘逆元运算单元将经模乘单元模乘运算得到的结果进行模乘逆元运算后送入所述的多路选择器;
地址映射表,所述的地址映射表的输入端连接所述用于存储地址映射向量的第二寄存器堆,并还与所述的输入寄存器堆双向连接。
所述的取模运算下的快速傅里叶变换模块中为了达到有限域下的运算要求,w值为素数q的d次单位根,蝶形单元中的所有加法和乘法全部都是模加和模乘运算,w与q值之间的关系有:wd=-1mod q。
所述的取模运算下的快速傅里叶变换模块中是采用基于格密码体系的快速傅里叶变换算法,具体如下:
输入:X=(x2d,...,x1,x0),W=(wd,...,w1,w0),
输出:Y=(y2d,...,y1,y0);
1:d=维数;
2:n=log2(2*d);
3:for(k=0;k<n;k++)
4:for(j=0;j<d;j=j+2k+1)
5:for(i=j;i<j+2k;i++)
6:y[i]=x[i]+x[i+2k]w[i*2n-k-1%2n-1];
7:y[i+2k]=x[i]-x[i+2k]w[i*2n-k-1%2n-1];
8:for(j=0;j<d;j++)
9:x[j]=y[j];
所述的输入和输出的每一个元素所代表的都是多项式系数,d代表多项式的维数,而n所代表的是基于格密码体系的快速傅里叶变换的级数。
由于FPGA平台上的硬件资源是有限的,所以不能做到每一级蝶形运算同时并行执行,因此调整其中k的取值,分为k≥5和k<5两种情况,就能够实现8路或16路蝶形运算的并行计算。
所述的地址映射表是采用如下算法生成:
输出:address=(a2d,...,a1,a0);
1:d=维数;
2:n=log2(2*d);
3:array[0]=0;array[1]=2;array[2]=1;array[3]=3;
4:for(i=0;i<n;i++)
5:for(j=0;j<2i;j++)
6:address[j*2]=array[j];
7:for(j=0;j<2i;j++)
8:address[j*2+1]=address[j*2]+2i。
所述的模乘逆元运算单元中的模乘逆元运算,是对经模乘单元模乘运算得到的结果模乘逆元3316的结果进行取模运算,其中,逆元的取值为256-1mod3329。
所述的模乘单元的乘法器是直接调用FPGA中的IP核生成。
所述的模乘单元的约减器是基于梅森数的快速模约减算法,将模数转化为梅森数,p=f(2k),其中模数的位宽为x,需要模约减的整数W的位宽为2x,W的表示形式转化为W=∑jwj2jk,使用线性反馈移位寄存器的方式,推导生成数值wj与各位数之间的参数对照表。
本发明的基于格密码体系的多项式模乘协处理器,使用FPGA平台做硬件设计,实现了基于格密码体系的多项式模乘协处理器。本发明在安全级别上实现了128维的多项式乘法,实现了256点整数域下的快速傅里叶变换,从算法上和硬件架构上,融合了并行计算和流水线技术,在算法上改善了传统FFT算法,将并行计算的技术融合到算法中,在硬件结构上充分利用流水线技术复用了硬件资源,利用各功能单元之间的级联,将运算时间控制到了微秒级别,大大提升了多项式乘法的效率,极大的提升了整个基于格的加密体系计算效率,解决了基于格运算的加密方案的可行性问题。
附图说明
图1是本发明的整体构成框图;
图2是本发明的蝶形运算单元。
图中
F1:第一输入接口 F2:第二输入接口
F3:第三输入接口 F4:第四输入接口
1:取模运算下的快速傅里叶变换模块
2:多路选择器 3:地址映射表
4:多路分配器 5:模乘单元
6:模乘逆元运算单元 A:第三寄存器堆
B:第四寄存器堆 C:输出端
D:第二寄存器堆 W:第一寄存器堆
X:输入寄存器堆 Y:输出寄存器堆
具体实施方式
下面结合实施例和附图对本发明的基于格密码体系的多项式模乘协处理器做出详细说明。
本发明的基于格密码体系的多项式模乘协处理器,主要针对基于格上的容错学习LWE加密方案,其中的核心运算单元多项式模乘协处理器。本发明是一种基于格密码体系的128维多项式模乘协处理器,设计使用了基于模运算下的快速傅里叶变换FFT和用于椭圆曲线加密中的快速模约减技术,实现了一种新型的整数域快速傅里叶变换单元和模乘单元,在算法上改善了传统FFT算法,将并行计算的技术融合到算法中,在硬件结构上充分利用流水线技术复用了硬件资源,利用各功能单元之间的级联,大大提升了多项式乘法的效率,解决了基于格运算的加密方案的可行性问题。
如图1所示,本发明的基于格密码体系的多项式模乘协处理器,包括有分别与第一至第四输入接口F1、F2、F3、F4对应相连的用于存储单位根向量的第一寄存器堆W,用于存储地址映射向量的第二寄存器堆D,用于分别存储多项式系数向量的第三寄存器堆A和第四寄存器堆B,还设置有:
多路选择器2,所述多路选择器2的输入端分别连接用于存储多项式系数向量的第三寄存器堆A和第四寄存器堆B的输出端,以及连接模乘逆元运算单元6的输出端;
输入寄存器堆X,分别连接多路选择器2和地址映射表3,根据地址映射表3重新对从所述多路选择器2输入进来的向量进行排序,并存储;
取模运算下的快速傅里叶变换模块1,分别连接所述的输入寄存器堆X的输出端,以及用于存储单位根向量的第一寄存器堆W的输出端,进行快速傅里叶变换;
本发明中所述的取模运算下的快速傅里叶变换模块1中的蝶形运算与传统的蝶形运算有所区别,传统蝶形单元中的w值为1的单位根,而本发明为了达到有限域下的运算要求,w值为素数q的d次单位根,蝶形单元中的所有加法和乘法全部都是模加和模乘运算,w与q值之间的关系有:wd=-1mod q。蝶形运算单元的结构图如图2所示,其中:
yi=xi+wi·xi+n
yi+n=xi-wi·xi+n。
上述公式中:wi与蝶形单元中的w值的关系式为wi=wimod q,而xi与xi+n是蝶形运算的输入,yi与yi+n是蝶形运算的输出,其中i是小于多项式维数的整数。
本发明利用传统快速傅里叶变换算法,结合格密码体系的基本理念,提出一种适用于整数域下的快速傅里叶变换算法,即所述的取模运算下的快速傅里叶变换模块1中是采用基于格密码体系的快速傅里叶变换算法,算法中输入和输出的每一个元素所代表的都是多项式系数,d代表多项式的维数,而n所代表的是基于格密码体系的快速傅里叶变换的级数。由于FPGA平台上的硬件资源是有限的,所以不可能做到每一级蝶形运算同时并行执行,因此可以调整算法1中的k的取值,分为k≥5和k<5两种情况,就可以实现8路或16路蝶形运算的并行计算。算法具体如下:
输入:X=(x2d,...,x1,x0),W=(wd,...,w1,w0),
输出:Y=(y2d,...,y1,y0);
1:d=维数;
2:n=log2(2*d);
3:for(k=0;k<n;k++)
4:for(j=0;j<d;j=j+2k+1)
5:for(i=j;i<j+2k;i++)
6:y[i]=x[i]+x[i+2k]w[i*2n-k-1%2n-1];
7:y[i+2k]=x[i]-x[i+2k]w[i*2n-k-1%2n-1];
8:for(j=0;j<d;j++)
9:x[j]=y[j]。
输出寄存器堆Y,所述输出寄存器堆Y的输入端连接所述取模运算下的快速傅里叶变换模块1的输出端,输出寄存器堆Y的输出端连接多路分配器4;
多路分配器4,所述多路分配器4将取模运算下的快速傅里叶变换模块1变换之后的结果,即多项式相乘之后的结果系数向量送到输出端C,或者送入模乘单元5;
模乘单元5,所述的取模运算下的快速傅里叶变换模块1变换之后的结果在模乘单元5内首先通过乘法器51进行乘法运算,再将乘法运算的结果经约减器52进行约减运算;
本发明重要核心问题是解决模乘的计算效率问题,由于模乘器的设计可以分为一般乘法器和模约减器。由于素数q的制约,乘法器的计算位宽一定不超过素数q的位宽,所以乘法器部分可以直接调用FPGA中的IP核生成,就可以达到比较好的效果。这样以来,模乘部分的计算效率将直接取决于模约减的复杂性。所述的模乘单元5的约减器52是基于梅森数的快速模约减算法,将模数转化为梅森数,p=f(2k),其中,模数的位宽为x,需要模约减的整数W的位宽为2x,W的表示形式转化为W=∑jwj2jk,使用线性反馈移位寄存器的方式,推导生成数值wj与各位数之间的参数对照表。
做为实施例,如表1所示,针对128维多项式的模数,使用快速模约减算法,该算法的核心思想是将模数q变型为梅森数,例如:q=3329,则q=212-210+28+1,这样乘数每两比特为一个字,可以将乘数划分为12个字,每个字分别对应210,28,26,24,22,20的权重,如表1,这样就可以将模约减转化为加法链来计算,消除了乘法、除法和求逆,将一个模约减的复杂度降低为一个乘法的复杂度。
表1、模约减算法推导表
|
210 |
28 |
26 |
24 |
22 |
20 |
∑ |
ω5 |
ω4 |
ω3 |
ω2 |
ω1 |
ω0 |
ω6 |
ω6 |
-ω6 |
|
|
|
-ω6 |
ω7 |
|
-ω7 |
|
|
-ω7 |
-ω7 |
ω8 |
-ω8 |
|
|
-ω8 |
-ω8 |
|
ω9 |
-ω9 |
ω9 |
-ω9 |
-ω9 |
|
ω9 |
ω10 |
|
|
-ω10 |
|
ω10 |
ω10 |
ω11 |
|
-ω11 |
|
ω11 |
ω11 |
|
对于256维或者512维多项式的模约减部分,同样可以按照本设计的模约减方法推导得到,会由于不同维数导致加法链的结构各不相同,但是都可以实现降低模约减复杂度的目的。
模乘逆元运算单元6,所述模乘逆元运算单元6将经模乘单元5模乘运算得到的结果进行模乘逆元运算后送入所述的多路选择器2;所述的模乘逆元运算单元6中的模乘逆元运算,是对经模乘单元5模乘运算得到的结果c模乘逆元3316的结果进行取模运算,其中,逆元的取值为256-1mod3329。
地址映射表3,所述的地址映射表3的输入端连接所述用于存储地址映射向量的第二寄存器堆D,并还与所述的输入寄存器堆X双向连接。
在进行取模运算下的快速傅里叶变换或者快速傅里叶逆变换之前,都要对输入的多项式系数列表进行插值重排列,使得参与快速傅里叶变换或者快速傅里叶逆变换的操作数为正确的值。为了实现高效的插值重排列,本发明采用地址映射机制,对于存放多项式系数的寄存器堆按照地址映射表的顺序,依次调整位置存入对应的寄存器中,所述的地址映射表3是采用如下算法生成:
输出:address=(a2d,...,a1,a0);
1:d=维数;
2:n=log2(2*d);
3:array[0]=0;array[1]=2;array[2]=1;array[3]=3;
4:for(i=0;i<n;i++)
5:for(j=0;j<2i;j++)
6:address[j*2]=array[j];
7:for(j=0;j<2i;j++)
8:address[j*2+1]=address[j*2]+2i。
对于多项式系数首先要转化为点值,对于128维的多项式,系数转化规则为系数倒序后面置128个0,这样两个多项式得到的两个点值向量分别对应A、B,经过插值重排列后,可以进行取模运算下的快速傅里叶变换,变换之后的结果分别为a、b,再对a、b做模乘运算得到结果c,然后对c模乘逆元3316(逆元的取值为256-1mod3329)的结果进行取模运算下的傅里叶逆变换就可以得到结果系数向量C。