Алгоритм для вычислений инверсии многочлена

Я ищу алгоритм (или код), чтобы помочь мне вычислить инверсию многочлен, мне нужен он для реализации NTRUEncrypt. Алгоритм, который легко понятен, - то, что я предпочитаю, существуют псевдокоды для того, чтобы сделать это, но они сбивают с толку и являются трудными реализовать, кроме того, я не могу действительно понять процедуру из одного только псевдокода.

Какие-либо алгоритмы для вычислений инверсии многочлена относительно кольца усеченных многочленов?

7
задан Jim Lewis 11 March 2010 в 00:09
поделиться

1 ответ

Я работаю в Security Innovation, которой принадлежит NTRU, поэтому я рад видеть такой интерес.

Стандарт IEEE 1363.1-2008 определяет, как реализовать NTRUEncrypt с самыми последними наборами параметров. Он дает следующие спецификации для инвертирования многочленов:

Деление:

Входными данными являются a и b, два многочлена, где b имеет степень N-1, а b_N - старший коэффициент b. Выходы - q и r такие, что a = q * b + r и deg (r)

a)  Set r := a and q := 0
b)  Set u := (b_N)^–1 mod p
c)  While deg r >= N do
  1)    Set d := deg r(X)
  2)    Set v := u × r_d × X^(d–N)
  3)    Set r := r – v × b
  4)    Set q := q + v
d)  Return q, r

Здесь r_d - коэффициент при r степени d.

Расширенный алгоритм Евклида:

a)  If b = 0 then return (1, 0, a)
b)  Set u := 1
c)  Set d := a 
d)  Set v1 := 0
e)  Set v3 := b
f)  While v3 ≠ 0 do
  1)    Use the division algorithm (6.3.3.1) to write d = v3 × q + t3 with deg t3 < deg v3
  2)    Set t1 := u – q × v1
  3)    Set u := v1
  4)    Set d := v3
  5)    Set v1 := t1
  6)    Set v3 := t3
g)  Set v := (d – a × u)/b  [This division is exact, i.e., the remainder is 0]
h)  Return (u, v, d)

Обратный по Z_p, pa простое:

a)  Run the Extended Euclidean Algorithm with input a and (X^N – 1).  Let (u, v, d) be the output, such that a × u + (X^N – 1) × v = d = GCD(a, (X^N – 1)).
b)  If deg d = 0, return b = d^–1 (mod p) × u
c)  Else return FALSE

Обратное по Z_p ^ e / (M (X), pa простое, M (X) подходящий многочлен, такой как X ^ N-1

a)  Use the Inversion Algorithmto compute a polynomial b(X) ε R[X] that gives an inverse of a(X) in (R/pR)[X]/(M(X)). Return FALSE if the inverse does not exist. [The Inversion Algorithm may be applied here because R/pR is a field, and so (R/pR)[X] is a Euclidean ring.]
b)  Set n = p
c)  While n <= e do
  1)    b(X) = p × b(X) – a(X) × b(X)^2   (mod M(X)), with coefficients computed modulo p^n
  2)    Set n = p × n
d)  Return b(X) mod M(X) with coefficients computed modulo p^e.

Если вы выполняете полную реализацию NTRU, вы должны посмотреть, сможете ли вы заставить свое учреждение купить 1363.1, так как необработанное шифрование NTRU небезопасно от активного злоумышленника, а 1363.1 описывает методы обработки сообщений, чтобы исправить это.

(Обновление 2013-04-18: Спасибо Sonel Sharam за обнаружение некоторых ошибок в предыдущей версии)

12
ответ дан 6 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: