Criptografia e
Segurança de Rede
Capítulo 4
Quarta Edição
por William Stallings
Capítulo 4 – Corpos Finitos
Na manhã seguinte, ao nascer o dia, Star entrou em
casa, aparentemente ávida por uma lição. Eu disse,
"Mostre oito". Ela fez uma exibição brilhante, primeiro
batendo 4-4, depois batendo rapidamente 2-2-2-2,
antes de entrar. É incrível como Star aprendeu a contar
até oito sem dificuldade. E do seu próprio jeito descobriu
que cada número pode ser dado com diferentes
divisões, isso não deixa dúvida de que estava
conscientemente pensando em cada número. De fato,
ela fez a aritmética mental, embora não possa, como os
humanos, dar nome aos números. Mas ela aprendeu a
reconhecer seus nomes falados quase imediatamente e
lembrar dos sons dos nomes. Star é um pássaro
silvestre único que, por vontade própria, buscou a
ciência dos números com ávido interesse e incrível
inteligência.
Living with birds, Len Howard
Introdução
Tópico de importância crescente na criptografia
AES, Curvas Elípticas, IDEA, Chave pública
Diz respeito à operações com números
Onde o conceito de “número” e os tipos de
operação podem variar consideravelmente.
Começaremos com conceitos de grupos, anéis
e corpos da álgebra abstrata.
Grupo
Um conjunto de elementos ou números
Com algumas operações cujo resultado
também está no conjunto (fechado)
Obedece:
Associatividade: (a.b).c = a.(b.c)
Possui identidade e: e.a = a.e = a
Possui elemento inverso a-1:a.a-1 = e
Se for comutativa
a.b = b.a
Então constitui um grupo abeliano.
Grupo Cíclico
Define-se exponenciação como a
aplicação repetida de um operador
exemplo:
a3 = a.a.a
A identidade é:
e=a0
Um grupo é cíclico se cada elemento for
uma potência de um elemento fixo.
Ex.: b = ak para algum a e todo b no grupo
a é dito gerador do grupo
Anél
Um conjunto de números
Com duas operações (adição e multiplicação)
que formam:
Um grupo comutativo em relação à operação de
adição:
Fechado
Associativo
Distributivo em relação à adição:
• a(b+c) = ab + ac
Se a operação de multiplicação for comutativa,
constitui um anel comutativo
Se a operação de multiplicação tem um
elemento identidade e nenhum divisor que
resulte em zero, consitui um domínio integral
Corpos
Um conjunto de números
Com duas operações que formam:
Um grupo comutativo para adição
Um grupo comutativo para multiplicação
(ignorando o 0)
Um anél
Segue uma hierarquia de axiomas/leis
grupo -> anél -> corpo
Aritmética Modular
Define-se módulo “a
divisão de a por n
Congruência: para a
mod n” como o resto da
= b mod n
Quando divididos por n, a & b tem o mesmo resto
Ex.: 100 mod 11 = 34 mod 11
b é chamado o resíduo de a mod n
Uma vez que com inteiros pode-se sempre escrever:
a = qn + b
Normalmente escolhe-se o menor inteiro positivo
para deixar como resíduo
• 0 <= b <= n-1
o processo é conhecido como Redução de Módulo
Divisores
Dizemos que b
divide a se a=mb para
algum m, onde a,b e m são inteiros
b divide a se não houver resto na divisão
A notação é b|a
Dizemos que b é um divisor de a
Ex.: todos 1,2,3,4,6,8,12,24 dividem 24
Operações de Aritmética
Modular
Usa um número finito de valores e
considera contíguos ambos os extremos
Aritmética modular considera adição &
multiplicação, com a redução de
módulo do resultado
Pode-se fazer a redução a qualquer
momento, Ex.:
a+b mod n = [a mod n + b mod n] mod n
Aritmética Modular
Pode-se realizar aritmética modular com
qualquer grupo de inteiros:
– Zn = {0, 1, … , n-1}
Formando um anel comutativo para adição
Com um elemento identidade para multiplicação
Algumas peculiaridades
se (a+b)=(a+c) mod n
então b=c mod n
mas se (a.b)=(a.c) mod n
then b=c mod n somente se a e n forem
primos entre si
Modulo 8 Addition Example
+ 0 1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7 0
2 2 3 4 5 6 7 0 1
3 3 4 5 6 7 0 1 2
4 4 5 6 7 0 1 2 3
5 5 6 7 0 1 2 3 4
6 6 7 0 1 2 3 4 5
7 7 0 1 2 3 4 5 6
Máximo Divisor Comum (MDC)
Um problema comum na teoria dos
números
MDC (a,b) de a e b é o maior número que
divide a e b
Ex.: MDC(60,24) = 12
Dizemos que dois inteiros a e b são
primos entre si quando o MDC = 1
Ex.: MDC(8,15) = 1
8 & 15 são primos entre si
Algoritmo Euclidiano
Um método eficiente para encontrar o MDC(a,b)
Baseado no teorema:
MDC(a,b) = MDC(b, a mod b)
O algoritmo euclidiano para encontrar MDC(a,b)
é:
EUCLID(a,b)
1.
2.
3.
4.
5.
6.
A = a; B = b
if B = 0 return
R = A mod B
A = B
B = R
goto 2
A = mdc(a, b)
Exemplo MDC(1970,1066)
1970 = 1 x 1066 + 904
1066 = 1 x 904 + 162
904 = 5 x 162 + 94
162 = 1 x 94 + 68
94 = 1 x 68 + 26
68 = 2 x 26 + 16
26 = 1 x 16 + 10
16 = 1 x 10 + 6
10 = 1 x 6 + 4
6 = 1 x 4 + 2
4 = 2 x 2 + 0
gcd(1066, 904)
gcd(904, 162)
gcd(162, 94)
gcd(94, 68)
gcd(68, 26)
gcd(26, 16)
gcd(16, 10)
gcd(10, 6)
gcd(6, 4)
gcd(4, 2)
gcd(2, 0)
Corpo de Galois GF(p)
Pode-se mostrar que o número de
elementos em um corpo finito deve ser a
potência de um número primo p (pn)
Conhecidos por corpo de Galois
Denotados por GF(pn)
De interesse em particular os corpos:
– GF(p)
– GF(2n)
Corpo de Galois GF(p)
É o conjunto de inteiros {0,1,2...p-1}
juntamente com as operações aritméticas
de módulo p (primo)
Forma um anel comutativo
GF(7) Exemplo para
Multiplicação
0 1 2 3 4 5 6
0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6
2 0 2 4 6 1 3 5
3 0 3 6 2 5 1 4
4 0 4 1 5 2 6 3
5 0 5 3 1 6 4 2
6 0 6 5 4 3 2 1
Algoritmo Euclidiano
Extendido
Encontra não somente o MDC(a,b) = d,
mas também os inteiros x e y que
satisfazem a sequinte relação:
– ax+by = d = MCD(a,b)
Algoritmo Euclidiano
Extendido
EXTENDED EUCLID(m, b)
1. (A1, A2, A3)=(1, 0, m);
(B1, B2, B3)=(0, 1, b)
2. if B3 = 0
return A3 = gcd(m, b); no inverse
3. if B3 = 1
return B3 = gcd(m, b); B2 = b–1 mod m
4. Q = A3 div B3
5. (T1, T2, T3)=(A1 – Q B1, A2 – Q B2, A3 – Q B3)
6. (A1, A2, A3)=(B1, B2, B3)
7. (B1, B2, B3)=(T1, T2, T3)
8. goto 2
Aritmética Polinomial
Um polinômio de grau n é uma expressão na
forma
f(x) = anxn + an-1xn-1 + … + a1x + a0 = ∑ aixi
Podemos distinguir três classes de aritmética de
polinômios:
Aritmética de polinômios ordinária;
Aritmética de polinômios em que a aritmética
sobre os coeficientes é realizada mod p
Aritmética de polinômios em que os coeficientes
estão em GF(p)
Aritmérica Polinomial Comum
Adição ou subtração dos coeficientes
correspondentes
Multiplicação de cada termo pelos outros
Ex.:
let f(x) = x3 + x2 + 2 and g(x) = x2 – x + 1
f(x) + g(x) = x3 + 2x2 – x + 3
f(x) – g(x) = x3 + x + 1
f(x) x g(x) = x5 + 3x2 – 2x + 2
Aritmética de Polinomial com
Coeficientes em Módulo
No cálculo de do valor de cada
coeficiente, utiliza aritmética de módulo
Forma um anel polinomial
Pode ser modulo com qualquer número
primo, mas existe interesse especial no
módulo 2.
Isto é, os coeficientes são 0 ou 1
Ex.: f(x) = x3 + x2 e g(x) = x2 + x + 1
f(x) + g(x) = x3 + x + 1
f(x) x g(x) = x5 + x2
Divisão Polinomial
Pode-se escrever qualquer polinômio da
seguinte forma:
f(x) = q(x) g(x) + r(x)
r(x) é o resto.
r(x) = f(x) mod g(x)
Se r(x) = 0, diz-se que
g(x) divide f(x)
se g(x) não tem outro divisor além dele
mesmo & 1 dizemos ser um polinômio
irredutível (ou primo)
Arimética de módulo com um polinômio
primo constitui um corpo
Encontrando o Máximo
Divisor Comum
Pode-se encontrar o maior divisor comum para
um polinômio
c(x) = MDC(a(x), b(x)) se c(x) for o polinômio de
maior grau que divide os dois a(x), b(x)
Pode-se usar o algoritmo euclidiano pra tal:
EUCLID[a(x), b(x)]
1. A(x) = a(x); B(x) = b(x)
2. if B(x) = 0 return A(x) = mdc[a(x), b(x)]
3. R(x) = A(x) mod B(x)
4. A(x) ¨ B(x)
5. B(x) ¨ R(x)
6. goto 2
Aritmética Polinomial Modular
Interesse principal em GF(2n)
Polinômios com coeficientes de módulo 2
Cujo grau é inferior a n
Por isso deve-se reduzir o modulo a um
polinômio irredutível de grau n (para
multiplicação somente)
Isso forma um corpo finito
Pode-se sempre encontrar o inverso
Usando o algoritmo do Inverso Euclidiano.
Examplo: GF(23)
Considerações
Computacionais
Como os coeficientes são 0 ou 1, pode-se
representar qualquer polinômio como uma
string de bits
Adições se tornam um XOR bit a bit
Multiplicação é deslocamento a esquerda
seguido de um XOR
Exemplo Computacional
para GF(23) temos (x2+1) é 1012 & (x2+x+1) é 1112
Então a adição é:
E a multiplicação é:
(x2+1) + (x2+x+1) = x
101 XOR 111 = 0102
(x+1).(x2+1) = x.(x2+1) + 1.(x2+1)
= x3+x+x2+1 = x3+x2+x+1
011.101 = (101)<<1 XOR (101)<<0 =
1010 XOR 101 = 11112
Redução do modulo polinomial (get q(x) & r(x)) é
(x3+x2+x+1 ) mod (x3+x+1) = 1.(x3+x+1) + (x2) = x2
1111 mod 1011 = 1111 XOR 1011 = 01002
Usando um Gerador
Técnica equivalente para definir um corpo
finito
um gerador g é um elemento cujas
potências geram todos os elementos
diferentes de zero
– 0, g0, g1, …, gq-2
Implementa-se a multiplicação
adicionando expoentes do gerador
Resumo
Considerações
Conceito de grupos, anéis, corpos
Aritmética modular com inteiros
Algoritmo Euclidiano para MDC
Corpos Finitos GF(p)
Aritmética Polinomial em geral e para GF(2n)