Math NTRUEncrypt中多项式的模约化
我正在实现NTRUN加密算法,根据NTRU教程,多项式f有一个逆g,使得f*g=1模x,基本上多项式乘以它的逆约化模x得到1。我得到了这个概念,但在他们提供的一个例子中,多项式Math NTRUEncrypt中多项式的模约化,math,polynomial-math,ntruencrypt,Math,Polynomial Math,Ntruencrypt,我正在实现NTRUN加密算法,根据NTRU教程,多项式f有一个逆g,使得f*g=1模x,基本上多项式乘以它的逆约化模x得到1。我得到了这个概念,但在他们提供的一个例子中,多项式f=-1+X+X^2-X4+X6+X9-X10,我们将其表示为数组[-1,1,1,0,-1,0,1,0,0,0,1,-1]的逆g[1,2,2,1,0,2,0],因此当我们将它们相乘并将结果模3减为1时,然而,当我使用NTRU算法乘以和减少它们时,我得到-2 下面是我用Java编写的乘法算法: public static i
f=-1+X+X^2-X4+X6+X9-X10
,我们将其表示为数组[-1,1,1,0,-1,0,1,0,0,0,1,-1]
的逆g
[1,2,2,1,0,2,0],因此当我们将它们相乘并将结果模3减为1时,然而,当我使用NTRU算法乘以和减少它们时,我得到-2
下面是我用Java编写的乘法算法:
public static int[] PolMulFun(int a[],int b[],int c[],int N,int M)
{
for(int k=N-1;k>=0;k--)
{
c[k]=0;
int j=k+1;
for(int i=N-1;i>=0;i--)
{
if(j==N)
{
j=0;
}
if(a[i]!=0 && b[j]!=0)
{
c[k]=(c[k]+(a[i]*b[j]))%M;
}
j=j+1;
}
}
return c;
}
取多项式a乘以b,再返回结果c,N指定多项式的阶数+1,在上述示例中N=11;M是重作用模,以3为例
为什么我得到的是-2而不是1?-2==1 mod 3,所以计算很好,但Java的模(余数)操作符的输出范围似乎是
[-n..n]
的mod n+1
,而不是标准的数学[0..n]
如果(c[k]<0)c[k]+=M,只需粘贴一个代码>在你的c[k]=…%M
行之后,你应该没事了
编辑:实际上,最好把它放在循环最外层(k
)的末尾。我的电子邮件是andreycdmd@gmail.com