Prévia Matemática |
Notação Polinomial GF(28)
b7 x7+ b6 x6 + b5 x5 + b4 x4 + b3 x3 + b2 x2 + b1 x + b0
onde ={b7b6b5b4b3b2b1b0} são os bits do byte B
E feita usando XOR´s, e o VAI 1 é descartado.
O símbolo ( + ) denotará no decorrer do documento, a soma em módulo 2, isto é um XOR
C=A+B onde A= {a7a6a5a4a3a2a1a0} e B={b7b6b5b4b3b2b1b0}
ci = ai + bi
Exemplo:
{01010111} + {10000011} = {11010100}
57h + 83h = D4h
Multiplicação:
Multiplica-se os 2 bytes na notação polinomial e o resultado modulo polinômio irredutível de grau 8, o AES usa o m(x)= x8 + x4 + x3 + x + 1 ou (11Bh)
Exemplo: 53h * 83h = C1h
( x6 + x4 + x2 + x + 1) ( x7 + x + 1) = x13 + x11 + x9 + x8 + x7 +
x
7 + x5 + x3 + x2 + x +x
6 + x4 + x2 + x + 1= x
13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1x
13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1 módulo x8 + x4 + x3 + x + 1 = x7 + x6 + 1Observar que a soma das parcelas e feita da forma descrita anteriormente.
Faz-se um deslocamento a esquerda com um XOR condicional da seguinte forma
Se b7 = 0 faz apenas o deslocamento
Se b7 = 1 faz o deslocamento seguido de um XOR com 1Bh
Onde b7 é o bit mais significativo do byte B. Essa operação e conhecida como xtime. Fazendo-se repetidas aplicações de xtime e somando seus resultados intermediários consegue-se fazer uma multiplicação por qualquer constante.
Exemplo: 57h * 13h = FEh
57h * 02h = xtime(57h) = AEh
57h * 04h = xtime(AEh) = 47h
57h * 08h = xtime(47h) = 8Eh
57h * 10h = xtime(8Eh) = 07h
então
57h * 13h = 57h * (01h + 02h + 10h) = 57h + AEh + 07h = FEh.
Polinômios com coeficientes em GF(28)
Soma:
A(x) = a3 x3 + a2 x2 + a1 x + a0
B(x) = b3 x3 + b2 x2 + b1 x + b0
A(x) + B(x) = (a3 + b3) x3 + (a2 + b2) x2 + (a1 + b1) x + (a0 + b0)
Multiplicação: C(x) = A(x) * B(x)
Passo 1)
c0 = a0 * b0
c1 = a1 * b0 + a0 * b1
c2 = a2 * b0 + a1 * b1 + a0 * b2
c3 = a3 * b0 + a2 * b1 + a1 * b2 + a0 * b3
c4 = a3 * b1 + a2 * b2 + a1 * b3
c5 = a3 * b2 + a2 * b3
c6 = a3 * b3
Passo 2)
Reduzir o resultado num polinômio de grau menor que 4. No AES é usado (x4 + 1).
xi mod (x4 + 1) = x i mod 4
Produto Modular:
D(x) = A(x) x B(x) onde D(x) = d3 x3 + d2 x2 + d1 x + d0
com:
d0 = a0 * b0 + a3 * b1 + a2 * b2 + a1 * b3
d1 = a1 * b0 + a0 * b1 + a3 * b2 + a2 * b3
d2 = a2 * b0 + a1 * b1 + a0 * b2 + a3 * b3
d3 = a3 * b0 + a2 * b1 + a1 * b2 + a0 * b3
O símbolo ( x ) denotará no decorrer do documento, o produto modular.