我正在实现 NTRUEncrypt 算法,根据 NTRU 教程,多项式 f 具有逆 g,使得 f*g=1 mod x,基本上多项式乘以其逆约减模 x 得到 1。我明白了这个概念,但在他们提供了一个例子,一个多项式f = -1 + X + X^2 - X4 + X6 + X9 - X10
,我们将其表示为数组[-1,1,1,0,-1,0,1,0,0,1,-1]
的倒数g
,[1,2,0,2,2,1,0,2,1,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 是reduction modulo,在上面3的例子中。
为什么我得到 -2 而不是 1?