motivazione
coefficienti binari qui significa che i coefficienti sono modulo 2, nel campo Z_2, o semplicemente assumere i valori 0 e 1 e operare come bit. Non significa che i coefficienti sono interi arbitrari rappresentati nella seconda base. Essi sono binari (assumono esattamente due valori), anziché essere semplicemente espressi in un sistema di numeri binari.
Con questa idea ben precisa, questa domanda è abbastanza facile da rispondere, e sì, le operazioni bit a bit di XOR e di spostamenti a sinistra saranno sufficienti. Sebbene non sia richiesto di rispondere a questa domanda, questa domanda è motivata dalla crittografia. Dimostra il collegamento tra alcune operazioni bit a bit comunemente utilizzate nell'hash e alcuni schemi di crittografia e algebra astratta, in modo che i risultati sui polinomi su campi finiti possano essere sfruttati nella crittanalisi. Prendendo il modulo del modulo un altro polinomio serve a impedire che il livello del risultato cresca oltre un certo limite. Le operazioni sui registri macchina lo fanno naturalmente come trabocco.
aggiunta
Prima parliamo di aggiunta. Poiché i coefficienti sono modulo 2, aggiungere x + x = 2x = 0x = 0
dal 2 mod 2 = 0
. Quindi, ogni volta che c'è lo stesso termine, si annulla e, quando ce n'è uno solo, persiste. Questo è lo stesso comportamento di XOR
. Ad esempio, l'aggiunta (x^4 + x^2 + 1) + (x^3 + x^2):
(1x^4+0x^3+1x^2+0x^1+1x^0)+(0x^4+1x^3+1x^2+0x^1+0x^0) = (1x^4+1x^3+0x^2+0x^1+1x^0)
o, utilizzando il coefficiente compatto unico notazione,
10101 XOR 01100 = 11001
Moltiplicazione
Moltiplicazione per x
aumenta la potenza di ogni termine per uno. Nella notazione compatta, ciò equivale allo spostamento bit a sinistra sinistro.
(1x^4+0x^3+1x^2+0x^1+1x^0) * x = (1x^5+0x^4+1x^3+0x^2+1x^1+0x^0)
10101 << 1 = 101010
Così, per moltiplicare polinomi f(x) * g(x)
possiamo moltiplicare f(x)
da ogni termine di g(x)
separatamente, ciascuno equivalente a un cambiamento, e quindi aggiungere, l'aggiunta equivalente a XOR. Moltiplichiamo (x^4 + x^2 + 1) * (x^3 + x^2)
(x^4 + x^2 + 1) * (x^3 + x^2) = (x^4 + x^2 + 1)*x^3 + (x^4 + x^2 + 1) *x^2
(10101 << 3) XOR (10101 << 2) = 10101000 XOR 01010100 = 11111100
Quindi, la risposta è x^7 + x^6 + x^5 + x^4 + x^3 + x^2
.
Modulo Riduzione
Riduzione modulo h(x)
è anche abbastanza facile. Certamente lo non richiede di ricordare come eseguire una divisione lunga. Come la moltiplicazione, lo faremo per termini. Continuiamo con lo stesso esempio, e portarlo MODULO h(x) = x^5 + x
(x^7 + ... + x^2) mod (x^5+x) = [x^7 mod (x^5+x)] + ... + [x^2 mod (x^5+x)]
Ora, se il grado, n
, di x^n
è più piccolo di quello di h(x)
, qui 5, allora non c'è niente da fare perché h(x)
vinto' t dividere x^n
.
[x^2 mod (x^5+x)] = x^2 or 00000100
[x^3 mod (x^5+x)] = x^3 or 00001000
[x^4 mod (x^5+x)] = x^4 or 00010000
Quando poi gradi sono uguali, possiamo dire h(x)
divide x^n
una volta, e abbiamo oltrepassato dai restanti termini di h(x)
. Che abbiamo superato invece di underhot difficilmente importa, né fa il segno sul resto dal -1 mod 2 = 1
. Qui,
x^5 = (x^5 + x) – x, so
[x^5 mod (x^5+x)] = x, or 00000010
In generale, [x^n mod h (x)] = [h (x) -x^n] quando n = degree(h)
.In forma compatta, questo equivale a spegnere il n
esimo bit, che può essere fatto da XOR-zione la rappresentazione della h(x)
con la rappresentazione di x^n
:
00100010 XOR 00100000 = 00000010.
Quando x^n
ha un grado maggiore di h(x)
possiamo moltiplicare h(x)
per x^k
per far coincidere i gradi e procedere come nel caso precedente.
x^6 = (x^5 + x) * x - (x) * x = -x^2, quindi [x^6 mod (x^5 + x)] = x^2, o 00000100, o in forma compatta (00100010 < < 1) XOR (00100000 < < 1) = 00000100
Ma, in modo più efficiente, basta spostare la risposta precedente, che faremo per x^7
:
[x^7 mod (x^5+x)] = x^3, or 00001000
Quindi per raccogliere, abbiamo bisogno di aggiungere questi risultati, che è XOR-ing nella rappresentazione compatta.
x^2 + x^3 + x^4 + x + x^2 + x^3 = x^4 + 2x^3 + 2x^2 + x = x^4 + x, or
00000100 XOR 00001000 XOR 00010000 XOR 00000010 XOR 00000100 XOR 00001000 = 00010010
Osservazioni conclusive
Possiamo chiedere Wolfram Alpha per verificare questo risultato per noi da una lunga divisione. Il resto indicato è x^4 - x
, che equivale a x^4 + x
quando i coefficienti sono modulo 2.
Le fasi di moltiplicazione e di modulo a termine possono essere combinate, ad es. moltiplicare per x
e modulo il prodotto, per un algoritmo più efficiente, che sarà uno spostamento e XOR se il grado del prodotto è almeno quello di h(x)
. Quindi ripetere sul risultato, moltiplicare per x
e modulo il prodotto, e registrare quella risposta per la moltiplicazione per x^2
. E così via ...
* Attenzione: le seguenti domande principali sono intese per il poster originale. * Puoi aggiungere due polinomi? In che modo questa operazione sui polinomi binari è diversa da quella sui polinomi normali? Puoi moltiplicare un polinomio arbitrario per 'x^17'? Sai come si fa a fare polinomio a lungo raggio? –
Sì, le operazioni binarie di XOR e gli spostamenti dovrebbero fare il trucco. Quello che manca è che i coefficienti sono _binary_, vale a dire nel campo Z_2. Ciò significa '(x^3 + x^2 + 1) + (x^2) = (x^3 + 2x^2 + 1) = (x^3 + 1)' o '1101 XOR 0100 = 1001'! –