NTRU Pseudo-Code zur Berechnung Polynomial Inverses

stimmen
2

Ich frage mich, ob mir jemand sagen könnte, wie Linie 45 des folgenden Pseudo-Code zu implementieren.

Require: the polynomial to invert a(x), N, and q.
1: k = 0
2: b = 1
3: c = 0
4: f = a
5: g = 0 {Steps 5-7 set g(x) = x^N - 1.}
6: g[0] = -1
7: g[N] = 1
8: loop
9:  while f[0] = 0 do
10:         for i = 1 to N do
11:             f[i - 1] = f[i] {f(x) = f(x)/x}
12:             c[N + 1 - i] = c[N - i] {c(x) = c(x) * x}
13:         end for
14:         f[N] = 0
15:         c[0] = 0
16:         k = k + 1
17:     end while
18:     if deg(f) = 0 then
19:         goto Step 32
20:     end if
21:     if deg(f) < deg(g) then
22:         temp = f {Exchange f and g}
23:         f = g
24:         g = temp
25:         temp = b {Exchange b and c}
26:         b = c
27:         c = temp
28:     end if
29:     f = f XOR g
30:     b = b XOR c
31: end loop
32: j = 0
33: k = k mod N
34: for i = N - 1 downto 0 do
35:     j = i - k
36:     if j < 0 then
37:         j = j + N
38:     end if
39:     Fq[j] = b[i]
40: end for
41: v = 2
42: while v < q do
43:     v = v * 2
44:     StarMultiply(a; Fq; temp;N; v)
45:     temp = 2 - temp mod v
46:     StarMultiply(Fq; temp; Fq;N; v)
47: end while
48: for i = N - 1 downto 0 do
49:     if Fq[i] < 0 then
50:         Fq[i] = Fq[i] + q
51:     end if
52: end for
53: {Inverse Poly Fq returns the inverse polynomial, Fq, through the argument list.}

Die Funktion StarMultiplygibt ein Polynom (Array) in den Variablen gespeichert temp. Grundsätzlich Temp ein Polynom (I es als Array bin darstellt) , und v eine ganze Zahl (z.B. 4 oder 8), was genau so ist temp = 2-temp mod vgleichzusetzen in normaler Sprache? Wie soll ich diese Zeile in meinem Code implementieren. Kann mir jemand ein Beispiel geben.

Der obige Algorithmus zum Berechnen Inverse Polynome für Ntruencrypt Schlüsselerzeugung. Der Pseudo-Code kann auf Seite 28 von zu finden diesem Dokument . Danke im Voraus.

Veröffentlicht am 17/03/2010 um 10:23
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Für jeden Eintrag in temp, Temp [i], set temp [i] = 2-Temp [i] mod v.

Dies sollte auf die „Inverse in Z_p ^ n“ Abschnitt meiner Antwort entspricht für die Berechnung der Inversen einer Polynom Algorithm .

Wie ich es sehe jetzt, glaube ich, meine Antwort tun nicht, was sie sagt - es heißt „Inverse in Z_p ^ n“ aber es sieht eher wie eine inverse in Z_2 ^ n. So sollte es für p = 2 arbeiten, aber vielleicht nicht für irgendetwas anderes.

Beantwortet am 17/03/2010 um 22:05
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more