2010-03-10 30 views
6

Je cherche un algorithme (ou code) pour m'aider à calculer l'inverse d'un polynôme, j'en ai besoin pour l'implémentation de NTRUEncrypt. Un algorithme qui est facilement compréhensible est ce que je préfère, il y a des pseudo-codes pour le faire, mais ils sont déroutants et difficiles à implémenter, en outre je ne peux pas vraiment comprendre la procédure du pseudo-code seul.Algorithme de calcul de l'inverse d'un polynôme

Des algorithmes pour calculer l'inverse d'un polynôme par rapport à un ring of truncated polynomials?

+2

qui inverse? Voulez-vous la fonction inverse, pour résoudre (c'est-à-dire factoriser) des polynômes, ou voulez-vous trouver leurs inverses multiplicatifs dans le champ formé comme le quotient des polynômes sur un champ de base, et un polynôme irréductible? NTRU est l'abréviation de "Number Theorists R Us", IIRC, donc il est difficile de deviner quelles mathématiques sont requises. http://en.wikipedia.org/wiki/NTRUEncrypt dit que «le chiffrement et le décryptage n'utilisent qu'une simple multiplication polynomiale», de sorte que cet article ne m'a pas dit ce que vous vouliez dire non plus. Tout ce qui est nécessaire, cela pourrait être une question de MathOverflow. –

+0

ici http://www.ntru.com/cryptolab/tutorial_algebra.htm#three –

+0

Gotcha. C'est plus comme la deuxième chose que j'ai dite, même si ce n'est pas vraiment le champ que j'ai décrit mais un anneau légèrement différent (tous les inverses n'existent pas). Si vous lisez la note technique NTRU 14, il y a une explication à la fin, après le pseudo-code, de «pourquoi ça marche». C'est un peu comme inverser une matrice par réduction de ligne, dans le sens où vous appliquez un tas de transformées jusqu'à obtenir 1, alors l'inverse est tous les inverses de ces transformées multipliées ensemble. C'est ce que fait le pseudo-code. Mais je ne prétends pas avoir complètement digéré la note 14, je l'ai simplement parcourue. –

Répondre

11

Je travaille pour Security Innovation, qui possède NTRU, donc je suis heureux de voir cet intérêt.

La norme IEEE 1363.1-2008 spécifie comment implémenter NTRUEncrypt avec les jeux de paramètres les plus courants. Il donne les spécifications suivantes pour inverser polynômes:

Division:

sont entrées a et b, deux polynômes, où b est de degré N-1 et b_n est le premier coefficient de b. Les résultats sont q et r tels que a = q * b + r et deg (r) < deg (b). r_d désigne le coefficient de r de degré d, c'est-à-dire le coefficient principal de 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 

Ici, r_d est le coefficient de r de degré d.

Euclide étendu Algorithme:

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) 

inverse dans Z_p, pa Premier:

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 

inverse dans Z_p^e/(M (X), pa premier, M (X) a adapté polynôme tel que 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. 

Si vous faites une mise en œuvre complète de NTRU vous devriez voir si vous pouvez obtenir votre institution b uy 1363.1, car le cryptage NTRU brut n'est pas sécurisé contre un attaquant actif et 1363.1 décrit les techniques de traitement des messages pour résoudre ce problème.

(Mise à jour 18/04/2013: Merci à SONEL Sharam pour repérer des erreurs dans la version précédente)

+0

Si je pouvais ressusciter cette question, y a-t-il un conseil que vous pouvez donner si ma mise en œuvre continue d'échouer parce que 'b_N^-1 mod p' n'existe pas? Plus précisément, quelque chose comme 2044^-1 mod 2048 apparaîtra, ce qui provoque l'échec de l'algorithme. Je redémarre juste avec un nouveau 'f' mais il échoue indéfiniment. – Logan

+0

Vous savez quoi, c'était la dernière section de code en psuedo qui calculait les choses 'mod p' au lieu de' mod p^e' et en le levant qui le corrigeait. Gunna prend le temps de gober ça, cependant. – Logan

+0

Dans l'algorithme pour calculer l'inverse dans Z_p^e/(M (X)) le point c) 2) semble être faux. Cela devrait être 'n = n + 1' au lieu de' n = p * n', puisque 'n' est l'exposant de' p'. Je viens de tester ceci avec [l'exemple donné sur Wikipedia] (https://en.wikipedia.org/wiki/NTRUEncrypt#Public_key_generation) et cela fonctionne avec 'n = n + 1' mais pas avec' n = p * n' . – AbcAeffchen