NTRUEncrypt中多项式的模块化约简

时间:2010-04-24 12:57:50

标签: math polynomial-math ntruencrypt

我正在实施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}},因此当我们将它们相乘并减少时结果模3我们得到1,但是当我使用NTRU算法进行乘法和减少它时我得到-2。

这是我用Java编写的乘法算法:

[1,2,0,2,2,1,0,2,1,2,0]

它取自多项式a并将其乘以b,将结果重新生成c,N指定多项式的次数+ 1,在上面的例子中N = 11; M是反射模数,例如3以上。

为什么我得-2而不是1?

1 个答案:

答案 0 :(得分:4)

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

只需在[0..n]行后加if (c[k] < 0) c[k] += M;即可,你应该没问题。

编辑:实际上,最好把它放在最外层(c[k]=...%M)for循环的末尾。