Teoria de n´ umeros e criptografia RSA Elaine Pimentel 1 o Semestre - 2006 Bibliografia e referˆ encias Livro texto: S.C. Coutinho N´ umeros inteiros e criptografia RSA IMPA/SBM, 2000. Outras referˆ encias: • Rosen, K. H., Elementary number theory and its applications, Addison-Wesley,1984. • Koblitz, N. A course in number theory and criptography, Graduate Texts in Mathematics 97, Springer-Verlag, 1987. Introdu¸ c˜ ao • Objetivo: estudar o m´ etodo de criptografia de chaves p´ ublicas conhecido como RSA. • ´ E necess´ ario o estudo de alguns conceitos de uma ´ area da matem´ atica chamada Teoria de n´ umeros. • Espera-se desenvolver o racioc´ ıniol´ogicomatem´ atico introduzindo m´ etodos de prova de teoremas como indu¸c˜ ao matem´ atica e demonstra¸ c˜ ao por absurdo. • ´ E um curso de matem´ atica para cientistas da computa¸ c˜ ao. Criptografia • Criptografia: estuda os m´ etodos para codificar uma mensagem de modo que s´o seu destinat´ ario leg´ ıtimo consiga interpret´ a-la. • Prim´ordios:Cesar(transla¸c˜ ao do alfabeto). • Criptoan´ alise: arte de decifrar c´odigos secretos. • Decodificar x Decifrar (quebrar).
38
Embed
Teoria de nu´meros e criptografia RSA - mat.ufmg.brelaine/Clube/slides.pdfAlgoritmo da divis˜ao •Objetivo: encontrar o quociente q e o resto r (sa´ıda) da divis˜ao entre dois
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Teoria de numeros e criptografia RSA
Elaine Pimentel
1o Semestre - 2006
Bibliografia e referencias
Livro texto: S.C. Coutinho Numeros inteiros ecriptografia RSA IMPA/SBM, 2000.
Outras referencias:
• Rosen, K. H., Elementary number theory and itsapplications, Addison-Wesley,1984.
• Koblitz, N. A course in number theory andcriptography, Graduate Texts in Mathematics 97,Springer-Verlag, 1987.
Introducao
• Objetivo: estudar o metodo de criptografia de chavespublicas conhecido como RSA.
• E necessario o estudo de alguns conceitos de uma areada matematica chamada Teoria de numeros.
• Espera-se desenvolver o raciocınio logico matematicointroduzindo metodos de prova de teoremas comoinducao matematica e demonstracao por absurdo.
• E um curso de matematica para cientistas dacomputacao.
Criptografia
• Criptografia: estuda os metodos paracodificar uma mensagem de modo que so seudestinatario legıtimo consiga interpreta-la.
• Primordios: Cesar (translacao do alfabeto).
• Criptoanalise: arte de decifrar codigossecretos.
• Decodificar x Decifrar (quebrar).
Criptografia
• Substituir letras por sımbolos - contagem de frequencia:
– vogais sao mais frequentes;
– letra mais frequente: A;
– monossılabo de uma letra = vogal;
– consoantes mais frequentes: S e M
Metodo de contagem de frequencia de caracteres pode ser usado
para decifrar inscricoes antigas.
• Computadores: metodo de cifragem completamente inseguro
• Codificacao: basta conhecer o produto de dois primos(n = pq). n e chamado chave publica.
• Decodificacao: precisamos conhecer p e q (chave dedecodificacao).
• Decifrar RSA = fatoracao de n. Se n possui 150algarismos ou mais, fatora-lo levaria milhares de anos.
• Obs: E difıcil determinar os fatores primos de umnumero composto, mas e possıvel verificar se umnumero e primo ou composto sem tentar fatora-lo.
• Teoria de numeros: parte da matematica que estudanumeros inteiros.
Computacao algebrica
• Chave publica do RSA: multiplica-se dois primosmuito grandes.
• Pascal, C: nao permitem lidar com numeros dessamagnitude.
• Computacao algebrica: trata do calculo exato cominteiros, fracoes, etc. Exemplo: Mathematica, Maple.
• Inteiro de tamanho indeterminado: de tamanhoflexıvel, grandes o suficiente. Restricoes: tamanho damemoria, estruturas de dados (vetores de tamanhospre-fixados).
• Inteiros = listas! Algarismos = elemento da lista;operacoes de soma e multiplicacao: usuais, como comlapis e papel. Divisao e mais complicado...
Algoritmos
• Algoritmo = processo de calculo baseado emregras formais.
• Especificacao de um algoritmo: entrada +instrucoes + saıda.
• Perguntas:
– ao executarmos um conjunto deinstrucoes, sempre chegaremos a umresultado? (ponto fixo)
– o resultado obtido e sempre o desejado?(semantica)
Algoritmo da divisao
• Objetivo: encontrar o quociente q e o resto r(saıda) da divisao entre dois inteirospositivos a e b (entrada):
a = bq + r 0 ≤ r < b.
• Algoritmo da divisao:
Etapa 1: q = 0; r = a
Etapa 2: Se r < b, pare. Nesse caso, oquociente e q e o resto r.
Etapa 3: Se r ≥ b, faca r := r − b, q := q + 1 evolte a Etapa 2.
Algoritmo da divisao
• Observacoes:
1. O algoritmo sempre para: sequenciadecrescente de numeros inteirospositivos.
2. O resultado da aplicacao do algoritmocorresponde as especificacoes da saıda(trivialmente).
3. O algoritmo e extremamente ineficiente,em especial se a >> b.
Teorema da Divisao
Teorema de divisao: Sejam a e b inteiros positivos. Existem
numeros inteiros q e r tais que
a = bq + r 0 ≤ r < b
Alem disso, q e r sao unicos.
Prova: Unicidade - Sejam q, q′, r, r′ tais que
a = bq + r 0 ≤ r < b (1)
a = bq′ + r′ 0 ≤ r′ < b (2)
Subtraindo-se (1) de (2), obtemos:
r − r′ = b(q′ − q)
Ora, mas 0 ≤ r, r′ < b e portanto 0 ≤ r − r′ < b. Ou seja,
0 ≤ b(q′ − q) < b
Como b > 0, temos
0 ≤ q − q′ < 1
ou seja, q − q′ = 0 → q = q′ e r = r′.
Algoritmo Euclideano
• Objetivo: Calcular o mdc entre dois numerosinteiros.
• Definicao: o maximo divisor comum entre ae b e o numero d tal que:
– d|a (ou d e divisor de a)
– d|b– se d′ e divisor de a e b, entao d′|d.
• Escrevemos d = mdc(a, b). Se mdc(a, b) = 1,dizemos que a e b sao primos entre si.
Algoritmo Euclideano
• Dados dois numeros inteiros positivos a e btais que a ≥ b, divide-se a por b, encontrandoresto r1. Se r1 6= 0, dividimos b por r1,obtendo resto r2. Se r2 6= 0, dividimos r1 porr2 e assim por diante.
O ultimo resto diferente de zero dessasequencia de divisoes e o mdc(a, b).
• Exemplo:
1234 54 46 8 6 246 8 6 2 0
Ou seja, mdc(1234, 54) = 2.
Algoritmo euclideano
Perguntas:
1. Por que o ultimo resto nao nulo e o mdc?
2. Por que o algoritmo para?
a = bq1 + r1 e 0 ≤ r1 < bb = r1q2 + r2 e 0 ≤ r2 < r1
Algoritmo ingenuo: Dado n ≥ 2 inteiropositivo, tente dividir n por cada um dosinteiros de 2 a n− 1. Se algum desses inteiros(digamos k) dividir n, entao achamos umfator de n.
Perguntas:
1. k e primo ou composto?
2. Quando se deve parar a busca? Em n − 1?
Existencia da fatoracao
Respostas:
1. k e primo. Se k composto, k = a.b com 1 < a, b < k.Mas k|n, entao existe c inteiro tal que n = k.c. Logo,
n = a.b.c
ABSURDO! Logo, k e primo.
2. Podemos parar o algoritmo em√
n. De fato, n = k.cou c = n
k. Como k e o menor fator de n, k ≤ c. Logo,
k ≤ nk ou seja, k2 ≤ n → k ≤ √
n.
Algoritmo de fatoracao
Etapa 1. F = 2;
Etapa 2. Se n/F e inteiro, escreva ’F fatorde n e pare;
Etapa 3. Incremente F de uma unidade; SeF >
√n escreva ’n e primo e pare; se nao,
volte para a Etapa 2.
Existencia da fatoracao
• Algoritmo acima: acha todos os fatores primos de n.
• n → q1. Proximo passo: nq1→ q2 A seguir, n
q1.q2→ q3
• Paramos em nq1.q2.....qs−1
= qs, com qs primo.
• Observe que q1 ≤ q2 ≤ . . . ≤ qs−1 ≤ qs e
n >n
q1>
n
q1.q2> . . . >
n
q1.q2. . . . .qs> 0,
ou seja, o algoritmo sempre termina.
• Exemplo: n = 450 = 2.3.3.5.5
Eficiencia do algoritmo ingenuo de fatoracao
• Algoritmo simples mas muito ineficiente!
• Exemplo n primo com 100 ou mais algarismos. Logo, n ≥ 10100 e
portanto√
n ≥ 1050. Logo serao 1050 loops para determinar que n
e primo. Se o computador executa 1010 divisoes/s, levaremos1050
1010 = 1040 segundos, ou seja, 1031 anos... Tempo estimado de
existencia do universo: 1011 anos!
• Algoritmo bom para numeros pequenos.
• Nao existe (atualmente) algoritmo de fatoracao eficiente para
todos os inteiros.
• Nao se sabe se tal algoritmo nao existe ou se nao fomos espertos
o suficiente para inventa-lo...
Fatoracao por Fermat
• Eficiente quando n tem um fator primo nao muitomenor que
√n.
• Ideia: tentar achar numeros inteiros positivos x e ytais que n = x2 − y2.
• Caso mais facil: n = r2 (x = r e y = 0).
• Se y > 0, entaox =
√
n + y2 >√
n
Notacao: escrevemos [r] como a parte inteira do
numero real r.
Algoritmo de Fermat
• Etapa 1: Faca x = [√
n]; se n = x2, pare.
• Etapa 2: Incremente x de uma unidade ecalcule y =
√x2 − n.
• Etapa 3: Repita a etapa 2 ate encontrar umvalor inteiro para y, ou ate que x = n+1
2 . Noprimeiro caso, n tem fatores x + y e x − y; nosegundo, n e primo.
Exemplo
n = 1342127. Temos que x = 1158. Mas
x2 = 11582 = 1340964 < 1342127
Logo, passamos a incrementar x ate que√
x2 − n
seja inteiro ou x = n+12 , que nesse caso vale 671064:
x√
x2 − n
1159 33, 97
1160 58, 93
1161 76, 11
1162 90, 09
1163 102, 18
1164 113
Logo, x = 1164 e y = 113. Os fatores procurados sao x + y = 1277 e
x − y = 1051.
Algoritmo de Fermat
Demonstracao: se n e primo, entao o unico valorpossıvel para x e x = n+1
2 .
x e y sao inteiros positivos tais que n = x2 − y2. Ouseja,
n = (x − y)(x + y)
Como estamos supondo n primo, temos que x − y = 1e x + y = n. Logo,
x =1 + n
2e y =
n − 1
2
como querıamos.
Obs: RSA - Se p e q sao muito proximos, entao n = p.q
e facilmente fatoravel pelo algoritmo de Fermat.
Propriedade fundamental dos primos
Lema: Sejam a, b, c inteiros positivos esuponhamos que a e b sao primos entre si.Entao:
1. Se b divide o produto a.c entao b divide c.
2. Se a e b dividem c entao o produto a.bdivide c.
Propriedade fundamental dos primos
1. mdc(a, b) = 1. Pelo Algoritmo euclideano estendido, existem α e β
tais que
α.a + β.b = 1
Entao,
α.a.c + β.b.c = c
Como b divide a.c pela hipotese (1) e como b divide β.b.c, entao b
divide c.
2. Se a divide c, entao c = at. Mas b tambem divide c. Como
mdc(a, b) = 1, pela afirmacao (1), b divide t. Logo, t = b.k para
algum inteiro k e portanto,
c = a.t = a.b.k
Propriedade fundamental dos primos
Podemos usar o lema acima para provar seseguinte propriedade:
Propriedade fundamental dos primos: Sejap um primo e a e b inteiros positivos. Se pdivide o produto a.b, entao p divide a ou pdivide b.
A demonstracao fica como exercıcio(facam!).
Unicidade
Seja n o menor inteiro positivo que admite duas fatoracoes
distintas. Podemos escrever:
n = pe1
1 . . . . .pekk = qr1
1 . . . . .qrss
onde p1 < p2 < . . . < pk e q1 < q2 < . . . < qs sao primos e
Teorema da inversao A classe a tem inverso em Zn se e somente
se a e n sao primos entre si.
Prova (⇒) Se a tem inverso b:
a.b ≡ 1 (mod n)
Logo, a.b + k.n = 1 e portanto mdc(a, n) = 1.
(⇐) Suponha mdc(a, n) = 1. Logo existem α e β tais que:
α.a + β.n = 1
Ou seja, α.a ≡ 1 (mod n) e portanto a tem inverso em Zn.
U(n)
O conjunto dos elementos de Zn que teminverso e muito importante:
U(n) = {a ∈ Z(n)|mdc(a, n) = 1}No caso de n = p ser primo,
U(p) = Z(n) \ {0}
Propriedade importante de U(n): esseconjunto e fechado com relacao amultiplicacao.
Congruencia linear
Uma congruencia linear e uma equacao dotipo:
a.x ≡ b (mod n)
onde a, b ∈ Z. A solucao dessa equacao e:
x ≡ α.b (mod n)
onde α e o inverso de a modulo n.
Conclusao: Se mdc(a, n) = 1 entao acongruencia linear a.x ≡ b (mod n) tem umae so uma solucao em Zn.
Exercıcios propostos
4, 5, 6(b), 7, 10 e 11
Inducao finita
Seja P (n) uma proposicao que afirma queuma determinada propriedade vale paracada numero natural n. Por exemplo:
• Se p e um numero primo, entao np − n edivisıvel por p para todo natural n.
• A soma de 1 ate n e n(n+1)2
Inducao finita
Princıpio da inducao finita Para que umaproposicao P (n) seja verdadeira para todo nnatural, basta que:
1. P (1) seja verdadeira.
2. Se P (k) for verdadeira para algum numeronatural k, entao P (k + 1) tambem everdadeira.
Pequeno teorema de Fermat
Lema Seja p um numero primo e a, b inteiros.Entao,
(a + b)p ≡ ap + bp (mod p)
Teorema de Fermat Seja p um numero primoe a um numero inteiro. Entao
ap ≡ a (mod p).
Pequeno teorema de Fermat
Prova
• Se n = 1, entao 1p ≡ 1 (mod p) trivialmente.
• Suponhamos que np ≡ n (mod p) para algumn inteiro positivo. Usando o lema anterior,
(n + 1)p ≡ np + 1p ≡ np + 1 (mod p)
Como pela hipotese de inducao temos np ≡ n(mod p),
(n + 1)p ≡ np + 1 ≡ n + 1 (mod p)
Teorema de Fermat II
Teorema de Fermat II Seja p um numero primo e aum inteiro que nao e divisıvel por p. Entao,
ap−1 ≡ 1 (mod p).
Prova Como mdc(a, p) = 1, existe a′ tal que
aa′ ≡ 1 (mod p)
Multiplicando ambos os membros de ap ≡ a (mod p).por a′, obtemos:
a′.a.ap−1 ≡ a′.a (mod p).
Logo,ap−1 ≡ 1 (mod p).
Teorema de Fermat
Podemos simplificar algumas contas usandoo Teorema de Fermat. De fato, sejam pprimo, a inteiro tal que mdc(a, p) = 1 e k umnumero inteiro tal que k ≥ p − 1. Dividindo kpor p − 1,
k = (p − 1).q + r 0 ≤ r < (p − 1)
Logo,
ak ≡ a(p−1).q+r ≡ (ap−1)q.ar (mod p).
Mas (ap−1) ≡ 1 (mod p) e portanto
ak ≡ ar (mod p).
Exercıcios propostos
1, 3, 46, 7, 8, 12
Pseudoprimos
Teorema de Fermat: se p e primo entaoap ≡ a (mod p).
Entao n composto =⇒ existe 1 < b < n − 1 talque bn\ ≡ a (mod p).
Teste: Se n, b sao numeros inteiros, n > 0 e1 < b < n − 1, tais que bn−1\ ≡ 1 (mod n),entao n e composto.
Pergunta: o teste acima e um procedimentode decisao?
Pseudoprimos
Resposta: n e composto =⇒ existe p primo,1 < p < n − 1 tal que p|n. Logo, mdc(p, n) = p 6= 1 eportanto p nao e inversıvel modulo n. Desta forma,pn−1\ ≡ 1 (mod n).
E claro que esse nao e um metodo eficiente paratestar primalidade uma vez que e um metodo deexaustao.
Pseudoprimo n para a base b numero ımpare composto tal que
bn−1 ≡ 1 (mod n)
Exemplo: Existem 50.847.534 primos entre 1e 109; existem apenas 5597 pseudoprimos nabase 2 e 1272 pseudoprimos para as bases 2e 3.
Numeros de Carmichael
Pode ocorrer que um numero composto n sejapseudoprimo para todas as bases b tais quemdc(b, n) = 1.
Dizemos que um numero composto ımpar e umnumero de Carmichael se bn ≡ b (mod n) para todo1 < b < n − 1.
Teorema de Korselt: Um inteiro positivo ımpar n eum numero de Carmichael se, e somente se, cadafator primo p de n satisfaz as seguintes condicoes:
1. p2 nao divide n;
2. p − 1 divide n − 1.
Numeros de Carmichael
Prova: (=⇒) Seja p um fator primo de n. Entao,
bn ≡ b (mod p)
De fato, se b e divisıvel por p entao ambos os membros da
equivalencia sao congruentes a zero. Se nao, pelo teorema de
Fermat temos:
bp−1 ≡ 1 (mod p)
Pela condicao (2) do teorema, n− 1 = (p− 1).q para algum q. Logo,
bn ≡ (bp−1)q.b ≡ b (mod p).
Por (1), temos que n = p1 . . . pk com p1 < p2 < . . . < pk. Logo,
bn ≡ b (mod n)
Numeros de Carmichael
(⇐=) Seja n um numero de Carmichael esuponhamos que exista p primo tal que p2|n.Escolha b = p. Entao:
pn − p = p(pn−1 − 1)
Mas p nao divide pn−1 − 1, logo p2 nao podedividir pn − p. Portanto, n nao pode dividirpn − p. Em outras palavras, p ≡ p (mod n).Absurdo.
Restante da demonstracao: capıtulo 10...
Numeros de Carmichael
Observacoes:
• Para verificar que um numero e de Carmichaelusando o teorema acima necessitamos fatora-lo...
• Muitos numeros de Carmichael possuem fatoresprimos pequenos!
• Existem infinitos numeros de Carmichael.
• Entre 1 e 109 existem 50.847.534 primos e 646 numerosde Carmichael.
Teste de Miller
Teorema de Fermat: detecta numeroscompostos com uma certa eficiencia, masnao e um bom teste de primalidade.
Teste de Miller: Calcula-se a sequencia depotencias modulo n:
bq, b2q, . . . , b2kq
onde n − 1 = 2kq.
Se n e primo, entao:
b2kq ≡ bn−1 ≡ 1 (mod n)
Teste de Miller
Seja j e o menor expoente tal que b2jq ≡ 1 (mod n).Se j ≥ 1. Podemos escrever
b2jq − 1 = (b2j−1q − 1)(b2j−1q + 1)
Se n e primo e divide b2jq − 1, entao n deve dividir(b2j−1q + 1) pela minimalidade de j. Logo,
b2j−1q − 1 ≡ −1 (mod n)
Ou seja, uma das potencias
bq, b2q, . . . , b2kq
deve ser congruente a −1 modulo n. Se j = 0, entao
temos apenas que bq ≡ 1 (mod n). Se nada disso
acontecer, entao n deve ser composto.
Teste de Miller
1. Divida n − 1 por 2 ate encontrar q ımpar ek tais que n − 1 = 2kq.
2. Faca i = 0 e r = resto de bq por n.
3. Se i = 0 e r = 1 ou i ≥ 0 e r = n − 1: testeinconclusivo.
4. Faca i = i + 1 e r = r2 onde r2 e o resto dadivisao de r2 por n.
5. Se i < k volte a etapa 3; senao: n ecomposto.
Exemplo
Tome o numero de Carmichael 561. Temosque 560 = 24.35. Calculando as sequencias derestos modulo 561 das potencias de 2:
expoentes 35 2.35 22.35 23.35restos 263 166 67 1
Logo 561 tem que ser composto.
Pseudoprimo forte
Se um numero composto n tem resultadoinconclusivo para o teste de Miller comrespeito a uma base b, dizemos que n e umpseudoprimo forte para a base b. Observeque pseudoprimo forte −→ pseudoprimo.
Existem 1282 pseudoprimos fortes entre 1 e109.
Primalidade e computacao algebrica
E importante ressaltar que o teste de Millere muito usado na pratica. O que se faz parater maior garantia do resultado e fazer oteste para diversas bases. E assim com oMaple, ScratchPad - IBM, Axiom 1.1 -IBM.
Vale a observacao: dado um numero finitoqualquer de bases, existem infinitos numerosde Carmichael que sao pseudoprimos fortespara todas essas bases.
Exercıcios propostos
2, 5, 7, 8, 10
Funcao de Euler
Definicao. Seja n um inteiro positivo. Afuncao de Euler φ(n) e definida como onumero de inteiros positivos nao excedendon que sao relativamente primos com n.
A tabela abaixo apresenta os valores de φ(n)para 1 ≤ n ≤ 12.
Vai ser necessario, para decodificacao demensagens, saber calcular a funcao de Euler.Tambem vamos ter que aplicar o teorema deEuler. O teorema de Euler e umageneralizacao do teorema de Fermat para ocaso em que o modulo nao e primo:
Teorema de Euler. Se n e um inteiro positivoe a e um inteiro tal que mdc(a, n) = 1, entao
aφ(n) ≡ 1 (mod n)
Teorema de Euler
Exemplo. U(8) = {1, 3, 5, 7} e φ(8) = 4. Observe que, se a, b, c ∈ U(8),
entao a.b ∈ U(8) e, se c 6= b, entao
a.b\ ≡ a.c (por que?)
Para ver como isso funciona, tome a = 3. Entao,
3.1 ≡ 3 (mod 8)
3.3 ≡ 1 (mod 8)
3.5 ≡ 7 (mod 8)
3.7 ≡ 5 (mod 8)
Logo,
(3.1).(3.3).(3.5).(3.7) ≡ 1.3.5.7 (mod 8)
34.1.3.5.7 ≡ 1.3.5.7 (mod 8)
34 ≡ 1 (mod 8)
Teorema de Euler
Teorema de Euler Se n e um inteiro positivo e a uminteiro tal que mdc(n, a) = 1, entao
(n, d) = chave de decodificacao onde d e oinverso de e modulo φ(n). D(c) e dado por:
D(c) ≡ cd (mod n)
onde 0 ≤ D(c) < n.
Observe que e muito facil calcular d, desdeque φ(n) e e sejam conhecidos: basta aplicaro algoritmo euclideano estendido.Entretanto, se nao conhecemos p e q epraticamente impossıvel calcular d.
Exemplo
Voltando ao nosso exemplo, temos quen = 143 e e = 7. Para calcular d, usamos oalgoritmo euclideano estendido:
120 = 7.17 + 1 =⇒ 1 = 120 + (−17).7
Logo o inverso de 7 modulo 120 e −17. Comod deve ser usado como um expoente,precisamos que d seja positivo. Logotomamos d = 120 − 117 = 103.
Funciona?
Pergunta obvia que surge:
D(C(b)) = b?
Ou seja, decodificando um bloco de mensagemcodificada, encontramos um bloco da mensagemoriginal?
Consideremos entao n = p.q. Vamos provar que
DC(b) ≡ b (mod n)
E por que nao a igualdade? Observe que DC(b) e b
sao menores que n − 1. Por isso escolhemos b menor
que n e mantivemos os blocos separados depois da
codificacao!
Funciona!
Por definicao:
DC(b) ≡ (be)d ≡ be.d (mod n)
Mas d e o inverso de e modulo φ(n). Logoexiste inteiro k tal que ed = 1 + kφ(n). Logo,
bed ≡ b1+kφ(n) ≡ (bφ(n))k.b (mod n)
Se mdc(b, n) = 1, entao podemos usar oteorema de Euler:
bed ≡ (bφ(n))k.b ≡ b (mod n)
Funciona!
Se b e n nao sao primos entre si, obderve quen = p.q, p e q primos distintos. Logo,
bed ≡ b1+kφ(n) ≡ (b(p−1))k.(q−1).b (mod p)
Se mdc(b, p) = 1, entao podemos usar oteorema de Fermat (bp−1 ≡ 1 (mod p)). Senao, temos que p|b e portanto
bed ≡ b ≡ 0 (mod p)
Funciona!
Logo,bed ≡ b (mod p)
qualquer que seja b.
Fazemos o mesmo para o primo q, obtendo:
bed ≡ b (mod p)
Portanto,bed ≡ b (mod p.q)
como querıamos.
Porque o RSA e seguro
O RSA so e seguro se for difıcil calcular dquando apenas esse par e conhecido. Mas dsomente se φ(n): fatoracao de n.
Por que nao outro processo para calcular d eφ(n)? Resposta:
Outro jeito de quebrar o RSA seria acharum algoritmo que calcule d diretamente apartir de n e e. Como ed ≡ 1 (mod φ(n)), istoimplica que conhecemos um multiplo deφ(n). Isso tambem e suficiente para fatorar n(prova complicada).
A ultima alternativa seria achar b a partir daforma reduzida de be modulo n sem achar d.Bom, ninguem conseguiu fazer isso ateagora... Acredita-se que quebrar o RSA efatorar n sejam problemas equivalentes,apesar disso nao ter sido demonstrado.
Escolhendo primos
RSA de chave publica (n, e), n com aproximadamenter algarismos.
Escolha um primo p entre 4r10 e 45r
100 algarismos e q
proximo de 10r
p .
Tamanho da chave recomendado atualmente: 768 bits.n tera 231 algarismos. p e q: 104 e 127 algarismosrespectivamente.
Importante: p − 1, q − 1, p + 1, p − 1 nao tenham fatores
primos pequenos, pois senao seria facil fatorar n.
Escolhendo primos
Para encontrar p e q, seguiremos a seguinte estrategia:
1. Tome um numero s ımpar.
2. Verifique se s e divisıvel por um primo menor que5.000.
3. Aplique o teste de Miller a s usando como base os 10primeiros primos.
Se x e um numero da ordem de 10127, no intervalo
entre x e x + 104 existem aproximadamente 34 primos
dentre 560 numeros que passam a etapa (1) da
estrategia acima...
Assinaturas
• Apenas codificar mensagens nao basta: sistema e dechave publica.
• Um haker poderia facilmente mandar instrucoes aobanco para que o seu saldo bancario fosse transferidopara uma outra conta.
• Por isso, o banco precisa de uma garantia de que amensagem teve origem em um usuario autorizado.
• Ou seja, a mensagem tem que ser assinada .
Assinaturas
Cm e Dm: codificacao e decodificacao do Mario e de Ca
e Da as funcoes do Allan.b: de Mario para Allan.
Mensagem assinada:
Ca(Dm(b))
Para ler a mensagem: Allan aplica Da e depois Cm.
Observe que Cm e publico. Se a mensagem fizersentido, e certo que a origem foi mesmo o Mario!
Mas cuidado ! Esse sistema pode ser usado para
quebrar o RSA, como em 1995 por um consultor em
assuntos de seguranca de computadores...
Exercıcios propostos
1,2,3,4,6
1o trabalho pratico
O trabalho tem como objetivo a criacao de dois numeros primos
grandes (entre 20 e 30 bits). Para isso:
• Gere dois numeros ımpares m e k da magnetude acima, de modo
que nao sejam muito proximos um do outro.
• Verifique se m, k sao divisıveis por um primo menor que 5.000.
• Aplique o teste de Miller a m, k usando como base os 10
primeiros primos (se voce quiser ter uma certeza maior sobre o
resultado, facø teste para mais primos).
Depois calcule n = m.k e aplique os algoritmos da fatoracao e de
Fermat a n para ver se sua chave publica e facilmente quebrada.
Equacoes lineares
ax ≡ b (mod n)
Se a possui um inverso α em Zn, entao:
α(ax) ≡ αb (mod n)x ≡ αb (mod n)
Em particular, se n e primo e a\ ≡ 0(mod n), entao a equacao acima sempre tem(uma unica) solucao.
Equacoes lineares
Se mdc(a, n) = d 6= 1, a equacao:
ax − ny = b
so tem solucao quando b e divisıvel por d.
Suponhamos entao que d divide b. Escreveremos a = da′, b = db′ e
n = dn′. Cancelando os d’s:
a′x − n′y = b′
Ou seja,
a′x ≡ b′ (mod n′)
Observe que agora mdc(a′, n′) = 1, e essa equacao sempre tem
solucao.
Exemplo
Seja 6x ≡ 4 (mod 8). Dividindo pelo mdc(6, 8) = 2,obtemos
3x ≡ 2 (mod 4)
Logo,x ≡ 2 (mod 4) ou x = 2 + 4k
Duas possibilidades:
• k e par. Nesse caso, x ≡ 2 (mod 8) e 2 e uma solucao.
• k e ımpar (k = 2m + 1). Nesse caso, x ≡ 6 (mod 8) e 6 eoutra solucao.
Equacao linear possui mais de uma solucao!
Um exemplo astronomico
Tres satelites passarao sobre o Rio essanoite. O primeiro a uma hora , o segundoas 4 horas e o terceiro as 8 horas damanha. O primeiro leva 13 horas paracompletar uma volta em torno da terra, osegundo 15 horas e o terceiro 19 horas.Determine quantas horas decorrerao. apartir de meia noite, ate que os tre satelitespassem ao mesmo tempo sobre o Rio.
Um exemplo astronomico
x = numero de horas quando os tres satelitespassarao juntos sobre o Rio. Entao:
x ≡ 1 (mod 13)x ≡ 4 (mod 15)x ≡ 8 (mod 19)
Podemos re-escrever a primeira equacao cmox = 1 + 13t, Substituindo a primeira equacaona segunda, obtemos:
≡ 6 (mod 15)
Um exemplo astronomico
Logo x = 79 + 195u. Substituindo essa equacaona terceira:
u ≡ 1 (mod 19)
Logo,x = 79 + 195u
= 274 + 3705v
Logo os satelites passarao juntos pelaprimeira vez 274 horas depois da meia noitede hoje.
Algoritmo chines do resto
A solucao de um sistema de muitas equacoes e obtidaatraves da solucao de varios sistemas de duasequacoes.
Considere entao o sistema
x ≡ a (mod m)x ≡ b (mod n)
Podemos re-escrever a primeira equacao na forma:
x = a + my
Substituindo x na segunda equacao, obtemos:
my ≡ (b − a) (mod n)
Sabemos que essa equacao tem solucao se e somente
se o mdc(n,m) divide b − a.
Algoritmo chines do resto
Vamos assumir que mdc(n, m) = 1. Seja α o inverso de m modulo
n. Entao:
y ≡ α(b − a) (mod n)
y = α(b − a) + nz
x = a + mα(b − a) + mnz
x = a(1 − mα) + mαb + mnz
x = aβn + mαb + mnz
Teorema Chines do resto. Sejam n1, . . . , nk inteiros positivos, dois
a dois primos entre si. Entao o sistema
x ≡ a1 (mod n1)...
x ≡ ak (mod nk)
sempre tem uma solucao unica em Zn1...nk.
Modulos nao co-primos
Considere o sistema:
x ≡ 3 (mod 12)x ≡ 19 (mod 8)
Da primeira equacao, obtemos x = 3 + 12y.Substituindo isso na segunda equacao, temos12y ≡ 16 (mod 8). Dividindo essa equacaopor 4, obtemos 3y ≡ 4 (mod 2). Logo,
x ≡ 3 (mod 24)
Observe que 24 e o mmc entre 8 e 12...
Partilha de senhas
Senha s partilhada entre n pessoas: cadapessoa possui um elemento (uma parte) dasenha. Elemento: escolhido de um conjuntoS de n pares de inteiros positivos de modoque, para um inteiro positivo k ≤ npreviamente escolhido temos:
1. qualquer subconjunto de S com kelementos permite determinar s facilmente;
2. e muito difıcil determinar s conhecendomenos de k elementos de S.
Partilha de senhas
Conjunto L de n inteiros positivos, dois a dois primosentre si. Seja N o produto dos k menores numeros deL e M o produto dos k − 1 maiores numeros de L.Dizemos que esse conjunto tem limiar k se
N > s > M
Observe que essa condicao implica que o produto de k
ou mais elementos de L e sempre maior que N e o
produto de menos de k elementos e sempre menor
que M. O conjunto S sera formado pelos pares da
forma (m, sm) onde m ∈ L e sm e a forma reduzida de s
modulo m. Observe que limiar k ≥ 1 implica s > m
para qualquer m ∈ L. Logo sm < s para qualquer
m ∈ L.
Partilha de senhas
Suponhamos que sejan conhecidos telementos, ≥ k: (m1, s1), . . . , (mt, st). Vamosresolver o sistema de congruencias:
x ≡ s1 (mod m1)x ≡ s2 (mod m2)
. . .x ≡ st (mod mt)
obtendo x0 como solucao. Pelo teoremachines do resto,
x0 ≡ s (mod m1. . . . .mt)
Partilha de senhas
Observacoes:
1. E possıvel escolher os modulos de modoque fique praticamente impossıvelencontrar s atraves de uma busca.
2. E sempre possıvel escolher um conjunto Lque satisfaca todas as condicoes.
Partilha de senhas
Exemplo. Digamos que em um banco ha 5 funcionarios e pelo
menos 2 tem que estar presentes para que o cofre seja aberto.
Logo o conjunto L deve ter 5 elementos, e seu limiar deve ser 2.
Uma escolha possıvel escolhendo apenas primos pequenos e
L = {11, 13, 17, 19, 23}
O valor de s pode ser escolhido como sendo qualquer inteiro no
intervalo que vai de 23 a 143. Digamos s = 30. Entao:
Se os funcionarios que possuem as senhas (17, 13) e (23, 7) estao no
banco, para obter a senha e preciso resolver o sistema
x ≡ 13 (mod 17)
x ≡ 7 (mod 23)
A solucao e x = 30 + 391k...
Exercıcios propostos
1,2,4
Algebra e ciencia da computacao
• Principal aplicacao de matematica em cienciada computacao: definicao de semanticaformal em linguagens de programacao.
• “Semantica” = relacao entre palavras esentencas de uma linguagem (escrita oufalada) e os seus significados.
• Area que tem recebido muita atencao emlinguıstica e filosofia, que estudam osignificado de sentencas na linguagemnatural.
Algebra e ciencia da computacao
• Segunda area de estudo de semantica: significado desentencas em linguagens formais de logicamatematica, originalmente projetada para servircomo “fundacao” da matematica.
• Na aula de hoje: terceira area da semantica: objetivode desenvolver tecnicas para expressar a semantica delinguagens utilizadas para programacao decomputadores.
• Uso de estruturas matematicas tais como grupos,domınios e teoria de categorias na descricao desemantica de linguagens imperativas (como o Pascal)e funcionais (como ML, Haskell).
Semantica
Linguagens de computadores: sequencia decomandos, determinados por sentencas imperativas.Em linguagem natural, tais sentencas sao aquelas quepodem ser encontradas em um livro de receitas:
Bata a clara do ovo ate ficar dura.
Em contraste, sentencas de logica matematica visamestabelecer verdades absolutas:
Quando batida, a clara do ovo fica dura.
Semantica
Muitas pesquisas em metodos para analisar programas em uma
certa linguagem procuram formalizar a relacao entre os dois
exemplos citados acima. Afinal de contas, a sentenca logica (2)
garante que uma pessoa que execute o que manda a sentenca
imperativa (1) vai ter sucesso em terminar a tarefa de mudar a
consistencia da clara do ovo.
Desta forma, uma maneira de descrever comandos (que sao
sentencas imperativas) de uma linguagem de programacao e
estabelecendo uma relacao entre o estado do computador antes e
depois da execucao do comando (como descrito por sentencas
logicas). Essa interpretacao relacional de fragmentos de
programa pode ser formalizada atraves da semantica
denotacional.
Semantica
Semantica do comando if:
[if E then C1 else C2] = E [E]λv.isBool v → (v → C[C1], C[C2])
Semantica do comando while:
[while E do C] = E [E]λv.isBool v → (v → C[C], C[while E do C])
ou, mais simplesmente, podemos escrever:
C[while E do C] = C[C]; C[while E do C])
Por que?
Qual e o objetivo de se estudar semantica delinguagens de programacao?
1. Prover uma descricao precisa para tornar possıvelaos implementadores construir um compilador.
2. fornecer uma descricao precisa para osprogramadores, tornando possıvel que estes facamafirmativas rigorosas sobre o comportamento deprogramas por eles escritos;
3. fornecer ferramentas para os designers de linguagensde programacao, para que possam sugerir linguagensmelhores, confiaveis e com descricoes formaissimples.
Semantica Denotacional
• Semantica que mapeia construtores sintaticos deprogramas em valores abstratos (numeros, funcoes,etc) que eles denotam.
• Esses “mapeamentos” sao usualmente definidosrecursivamente (como no cado do while acima).
• Cuidados devem ser tomados quando trabalhamoscom funcoes recursivas. Para “modelar” o espaco detodas as funcoes recursivas precisarıamos de umconjunto X que contivesse todo o espaco de funcoesX −→ X. Por questoes de cardinalidade, sabemos queisso e impossıvel.
Semantica denotacional
• Modelo para funcoes recursivas X −→ Xrestritas a funcoes contınuas em X (deacordo com uma certa topologia).
• Esse modelo, chamado de teoria de domınio,e utilizado para descrever a semanticadenotacional do λ-calculus, base delinguagens de programacao funcionais.
• Utilizando o λ-calculus, podemos facilmentedescrever a semantica denotacional delinguagens como o Algol60, base do Pascal.
Semantica Categorica
Outro tipo de semantica que tem sido muitoestudada e a semantica categorica. As ideiasbasicas desse topico (muito em modaatualmente) sao elegantes e de facilentendimento para um aluno da graduacaocom alguma maturidade na area de Algebra.
λ-Calculus
• Funcoes como regras, e nao como graficos.
• Interesse: estudar os aspectoscomputacionais das funcoes.
• Uma funcao pode ser aplicada a ela mesma:impossıvel na teoria de conjuntos de ZF(axioma da fundacao).
λ-Calculus
Exemplos:
• A funcao identidade f (x) = x : R−→R eescrita como:
λx.x
• Se quisermos aplicar essa funcao a 1:
(λx.x)1 = 1
Observe que, em λ-calculus, podemos aplicara funcao identidade a qualquer tipo devariavel...
Raızes primitivas
Para determinar se n e primo, podemos verificar seφ(n) = n − 1. Ou seja, se mdc(a, n) = 1 para todo amenor que n. Isso so e possıvel se n e primo. Logoprecisamos encontrar um jeito de calcular φ(n) semfatorar n. Mas ja vimos que isso e impossıvel...
Teorema da raiz primitiva. Se p e um primo, existeb ∈ Zn tal que
bp−1 ≡ 1 (mod p)
masbr\ ≡ 1 (mod p)
se r < p − 1.
Teorema de Lagrange
Ordem de b ∈ Un = k tal que bk ≡ 1 (mod n)e br\ ≡ 1 (mod n) se r < k.
Teorema de Lagrange. A ordem de b tem quedividir a ordem de U(n), que e igual a φ(n).
Logo, dado n ımpar, se existe b tal que aordem de b em Un e n − 1, entao n e primopois terıamos n − 1 ≤ φ(n) ≤ n − 1.
Teorema da raiz primitiva: n primo ⇒ tal bsempre existe. Encontra-lo e uma questao desorte...
Teste de Lucas
Para aplicar isso a primalidade, precisamosencontrar uma maneira eficiente de mostrarque a ordem de um elemento de U(n) eexatamente n − 1.
Teste de Lucas. Sejam n ımpar e1 ≤ b ≤ n − 1. Se
bn−1 ≡ 1 (mod n)
e
bn−1p \ ≡ 1 (mod n)
para cada fator primo de n − 1, entao n eprimo.
Teste de Lucas - Prova
• Seja k a ordem de b em U(n). Queremosmostrar que k = n − 1.