370 likes | 549 Views
Criptografia e Segurança de Rede Capítulo 4. Quarta Edição por William Stallings Tradução por Carlos Daniel Abreu. Capítulo 4 – Corpos Finitos.
E N D
Criptografia e Segurança de Rede Capítulo 4 Quarta Edição por William Stallings Tradução por Carlos Daniel Abreu
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 • Vamos agora apresentar Corpos Finitos • Do seu importante aumento na criptografia • AES, Curvas Elípticas, IDEA, Chave pública • Dizem a respeito de operações com números • Quando o que constitui um “número” e os tipos de operações varia consideravelmente. • Começaremos com conceitos de grupos, anéis e corpos de álgebra abstrata.
Grupo • Um conjunto de elementos ou números • Com algumas operações cujo resultado é também no conjunto (encerramento) • Devemos cumprir: • Lei da associatividade: (a.b).c = a.(b.c) • Possui identidade: e.a = a.e = a • Possui inversa a-1: a.a-1 = e • Se for comutativo a.b = b.a • Então forma um grupo algébrico.
Grupo Cíclico • definir exponenciação como aplicação repetida do operador • exemplo: a-3 = a.a.a • A identidade deve ser: 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 ser um gerador do grupo
Anél • Um conjunto de números • Com duas operações (adição e multiplicação) que formam: • Um grupo comutativo com a operação de adição • E multiplicação: • fechamento • Associatividade • Leis distributivas: a(b+c) = ab + ac • Se a operação de multiplicação é comutativa, isso forma um anel comutativo • Se a operação de multiplicação tem uma identidade e nenhum divisor por zero, isso forma 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) • Anel • Tem hierarquia com mais axiomas/leis • grupo -> anel -> corpo
Aritmética Modular • Definimos módulo “a mod n” como o resto quando a é dividido por n • Usa-se o termo congruência para: a = b mod n • Quando divididos por n, a & b tem o mesmo resto • Ex.: 100 = 34 mod 11 • b é chamado o resíduo de a mod n • Desde que com inteiros possamos sempre escrever: a = qn + b • Normalmente escolha o menor positivo para deixar como reíduo • Ex.: 0 <= b <= n-1 • o processo é conhecido como Redução de Módulo • Ex.: -12 mod 7 = -5 mod 7 = 2 mod 7 = 9 mod 7
Divisores • Dizemos que b diferente de zero 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 • Aritmética modular é quando fazemos adição & multiplicação e redução de módulo. • 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 fazer com qualquer grupo de inteiros: Zn = {0, 1, … , n-1} • Formando um anel comutativo para adição • Com identidade multiplicativa • Repare em algumas peculiaridades • if (a+b)=(a+c) mod n then b=c mod n • but if (a.b)=(a.c) mod n then b=c mod n somente se a for relativamente primo de n
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 igualmente em ambos a e b • Ex.: MDC(60,24) = 12 • Dizemos que dois inteiros a e b são relativamente primos se seu único fator inteiro positivo comum for 1 • Ex.: MDC(8,15) = 1 • 8 & 15 são relativamente primos
Algoritmo Euclidiano • Um método eficiente para encontrar 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. A = a; B = b 2. if B = 0 return A = mdc(a, b) 3. R = A mod B 4. A = B 5. B = R 6. goto 2
Exemplo MDC(1970,1066) 1970 = 1 x 1066 + 904 gcd(1066, 904) 1066 = 1 x 904 + 162 gcd(904, 162) 904 = 5 x 162 + 94 gcd(162, 94) 162 = 1 x 94 + 68 gcd(94, 68) 94 = 1 x 68 + 26 gcd(68, 26) 68 = 2 x 26 + 16 gcd(26, 16) 26 = 1 x 16 + 10 gcd(16, 10) 16 = 1 x 10 + 6 gcd(10, 6) 10 = 1 x 6 + 4 gcd(6, 4) 6 = 1 x 4 + 2 gcd(4, 2) 4 = 2 x 2 + 0 gcd(2, 0)
Corpo de Galois • Copos finitos desempenham um papel fundamental na criptografia • Pode-se mostrar que a ordem de um corpo finito (número de elementos no corpo) precisa ser a potência de um primo pn • Conhecidos como Corpos Finitos • O corpo finito de ordem pn geralmente é escrito como GF(pn) [Galois Fields] • Dois casos especiais são de interesse para nosso propósito: • GF(p) • GF(2n)
Corpo de Galois GF(p) • É definido como o conjunto de inteiros juntamente com as operações aritméticas de módulo p • Forma um anel comutativo • Desde que tenha inverso multiplicativo • hence arithmetic is “well-behaved” and can do addition, subtraction, multiplication, and division without leaving the field GF(p)
Finding Inverses 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 • Normalmente não nos interessamos por avaliar um polinômio para determinado valor de x. • Que é conhecida como indeterminada • Podemos distinguir três classes de aritmética de polinômios: • Aritmética de polinômios ordinários; • 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-se todos os termos por cada outro • 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 Polinômios com Coeficientes em Zp • Se considerarmos que cada polinômio distinto é um elemento do conjunto. • Conhecido como anel polinomial • A divisão resultará em um quociente e um resto. • Porém estamos mais interessados no mod 2 • Ex.: 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) • Aceitamos r(x) como sendo o resto. • r(x) = f(x) mod g(x) • Se não tem resto dizemos que g(x) divide f(x) • se g(x) não tem outro divisor além dele mesmo & 1 dizemos ser um polinômioirredutível (ou primo) • Módulo e primo formam 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 • Nos concentramos 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 irredutível polinômio de grau n (para multiplicação somente) • Isso forma um corpo finito • Pode-se sempre encontrar o inverso • Pode-se usar o algoritmo do Inverso Euclidiano para encontrar.
Considerações Computacionais • Sejam os coeficientes 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 • cf long-hand multiplication • Pode ser obtida pela aplicação repetida da Equação acrescentando resultados intermediários.
Exemplo Computacional • para GF(23) temos (x2+1) é 1012 & (x2+x+1) é 1112 • Então a adição é: • (x2+1) + (x2+x+1) = x • 101 XOR 111 = 0102 • E a multiplicação é: • (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 • Para F temos 0, g0, g1, …, gq-2 • Um elemento b contido em F é chamado de raíz do polinômio • Então 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)