【问题标题】:Modular Reduction of Polynomials in NTRUEncryptNTRUEncrypt 中多项式的模约简
【发布时间】:2010-04-24 12:57:50
【问题描述】:

我正在实现 NTRUEncrypt 算法,根据 NTRU 教程,多项式 f 具有逆 g 使得 f*g=1 mod x,基本上多项式乘以其逆约减模 x 得到 1。我得到概念,但在他们提供的示例中,我们将表示为数组[-1,1,1,0,-1,0,1,0,0,1,-1] 的多项式[-1,1,1,0,-1,0,1,0,0,1,-1] 具有[1,2,0,2,2,1,0,2,1,2,0] 的逆g,因此当我们将它们相乘并减少结果模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?

【问题讨论】:

  • 我的邮箱是 andreycdmd@gmail.com

标签: math polynomial-math ntruencrypt


【解决方案1】:

-2 == 1 mod 3,所以计算很好,但似乎 Java 的模数(余数)运算符对于 mod n+1 的输出范围为 [-n .. n],而不是标准的数学 [0..n]

只需在 c[k]=...%M 行后面加上 if (c[k] < 0) c[k] += M;,就可以了。

编辑:实际上,最好将它放在最外层 (k) for 循环的末尾。

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多