Você está na página 1de 49

Teoria de n

umeros e criptografia RSA


Elaine Gouv
ea Pimentel
1o Semestre - 2006

(Ultima Modificacao: 4 de Maio de 2006)

Bibliografia e refer
encias

Livro texto: S.C. Coutinho N


umeros inteiros e criptografia RSA IMPA/SBM,
2000.
Outras referencias:
Rosen, K. H., Elementary number theory and its applications, AddisonWesley,1984.
Koblitz, N. A course in number theory and criptography, Graduate Texts
in Mathematics 97, Springer-Verlag, 1987.
Ao longo do curso, serao indicadas leituras complementares.
Qualquer d
uvida ou coment
ario, escrever para:
elaine@mat.ufmg.br

Introdu
c
ao

O objetivo desse curso e estudar o metodo de criptografia de chaves p


ublicas
conhecido como RSA. Para entender como este metodo funciona, e necessario
o estudo de alguns conceitos de uma area da matematica chamada Teoria de
n
umeros. E, e claro, espera-se desenvolver, ao longo do curso, o raciocnio
logico matematico dos alunos, introduzindo metodos de prova de teoremas como
inducao matematica e demonstracao por absurdo.
Deve ficar bem claro que este e um curso de matem
atica para cientistas da
computaca
o. Isto e, o rigor nunca sera deixado de lado mas a atencao estar
a
sempre voltada para a aplicacao principal proposta: criptografia RSA.

2.1

Criptografia

Criptografia: estuda os metodos para codificar uma mensagem de modo


que so seu destinatario legtimo consiga interpret
a-la.
Prim
ordios: Cesar (translacao do alfabeto).
Criptoan
alise: arte de decifrar c
odigos secretos.
Decodificar x Decifrar (quebrar).
Substituir letras por smbolos - contagem de frequencia:
vogais sao mais frequentes;
letra mais frequente: A;
monosslabo de uma letra = vogal;
consoantes mais frequentes: S e M
Metodo de contagem de frequencia de caracteres pode ser usado para
decifrar inscricoes antigas.
O surgimento dos computadores torna esse metodo de cifragem completamente inseguro (decifragem polinomial).
Internet e criptografia: seguranca, assinatura.
Chave p
ublica: saber codificar nao implica saber decodificar!

2.2

Criptografia RSA

RSA: Rivest, Shamir, Adleman (M.I.T.) 1978.


Codificacao: basta conhecer o produto de dois primos (n = pq). n e
chamado chave p
ublica.
Decodificacao: precisamos conhecer p e q (chave de decodificaca
o).
Decifrar RSA = fatoracao de n. Se n possui 150 algarismos ou mais,
fatora-lo levaria milhares de anos.
difcil determinar os fatores primos de um n
Obs: E
umero composto, mas e
possvel verificar se um n
umero e primo ou composto sem tentar fatora-lo.
Teoria de n
umeros: parte da matematica que estuda n
umeros inteiros.

2.3

Computac
ao alg
ebrica

Chave p
ublica do RSA: multiplica-se dois primos muito grandes.
Pascal, C: nao permitem lidar com n
umeros dessa magnitude.
Computacao algebrica: trata do c
alculo exato com inteiros, fracoes, etc.
Exemplo: Mathematica, Maple.
Inteiro de tamanho indeterminado: de tamanho flexvel, grandes o suficiente. Restricoes: tamanho da mem
oria, estruturas de dados (vetores de
tamanhos pre-fixados).
Inteiros = listas! Algarismos = elemento da lista; operacoes de soma e
multiplicacao: usuais, como com lapis e papel. Divis
ao e mais complicado...

Algoritmo da divis
ao de Euclides

3.1

Algoritmos

Algoritmo = processo de c
alculo baseado em regras formais.
Especificacao de um algoritmo: entrada + instrucoes + sada.
Perguntas:
ao executarmos um conjunto de instrucoes, sempre chegaremos a um
resultado? (ponto fixo)
o resultado obtido e sempre o desejado? (sem
antica)

3.2

Algoritmo da divis
ao

Objetivo: encontrar o quociente q e o resto r (sada) da divisao entre dois


inteiros positivos a e b (entrada):
a = bq + r

0 r < b.

Algoritmo da divis
ao:
Etapa 1: q = 0; r = a

Etapa 2: Se r < b, pare. Nesse caso, o quociente e q e o resto r.


Etapa 3: Se r b, faca r := r b, q := q + 1 e volte `a Etapa 2.
Observacoes:

1. O algoritmo sempre para: sequencia decrescente de n


umeros inteiros
positivos.
2. O resultado da aplicacao do algoritmo corresponde `as especificacoes
da sada (trivialmente).
3. O algoritmo e extremamente ineficiente, em especial se a >> b.

3.3

Teorema da Divis
ao

Teorema 1 (Teorema de divis


ao) Sejam a e b inteiros positivos. Existem
n
umeros inteiros q e r tais que
0r<b

a = bq + r
Alem disso, q e r s
ao u
nicos.
Prova

Unicidade - Sejam q, q , r, r tais que


a = bq + r

0r<b

a = bq + r

0 r < b

(1)
(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 .

3.4

Algoritmo Euclideano

Objetivo: Calcular o mdc entre dois n


umeros inteiros.
aximo divisor comum
Definicao: o m
que:

entre a e b e o n
umero d tal

d|a (ou d e divisor de a)


d|b
se d e divisor de a e b, entao d |d (em outras palavras, d e o m
aximo
divisor de a e b.
4

Escrevemos d = mdc(a, b). Se mdc(a, b) = 1, dizemos que a e b sao


primos entre si .
Dados dois n
umeros inteiros positivos a e
Algoritmo Euclideano:
b tais que a b, divide-se a por b, encontrando resto r1 . Se r1 6= 0,
dividimos b por r1 , obtendo resto r2 . Se r2 6= 0, dividimos r1 por r2 e
assim por diante.
O u
ltimo resto diferente de zero
mdc(a, b).
Exemplo:
1234
46

54
8

46
6

8
2

6
0

dessa sequencia de divisoes e o

Ou seja, mdc(1234, 54) = 2.


Perguntas:
1. Por que o u
ltimo resto nao nulo e o mdc?
2. Por que o algoritmo para?
Respostas:

a
b
r1
r2

=
=
=
=

bq1 + r1
r1 q2 + r2
r2 q3 + r3
r3 q4 + r4
..
.

e
e
e
e

0 r1 < b
0 r2 < r1
0 r3 < r2
0 r4 < r3
..
.

Segunda pergunta: observe que


b > r1 > r2 > . . . 0
Como essa sequencia e finita, o algoritmo sempre para. Mais ainda,
o n
umero de divisoes efetuadas e no m
aximo b (por que?).
Primeira pergunta: demonstra
c
ao do algoritmo euclideano

3.5

Demonstrac
ao do algoritmo euclideano

Lema 2 Sejam a e b n
umeros inteiros positivos. Se existem inteiros g e s tais
que a = bg + s, ent
ao mdc(a, b) = mdc(b, s).
Prova

Sejam
d1 = mdc(a, b)

d2 = mdc(b, s).

Afirmamos que d1 d2 . De fato, d1 e o m


aximo divisor de a e b. Logo d1 divide
a e b e portanto existem inteiros positivos u e v tais que:
a = d1 u

eb = d1 v

Substituindo a e b na equacao a = bg + s obtemos


s = d1 u d1 v = d1 (u vg).
Ou seja, d1 divide s. Como d1 tambem divide b, d1 e um divisor comum de b e
s. Mas d2 e o maior divisor de b e s e portanto (por definicao) d1 d2 como
queramos.
Seguindo um argumento semelhante, podemos provar o inverso, ou seja, d2 d1 .
Em outras palavras, d1 = d2
Teorema 3 Dados a e b inteiros positivos, o u
ltimo resto diferente de zero da
sequencia de divis
oes dada pelo algoritmo euclideano para a e b e o m
aximo
divisor comum entre a e b.
Prova

Aplicando o algoritmo a a e b, temos:


a
b
r1
r2
rn2

=
=
=
=

bq1 + r1
r1 q2 + r2
r2 q3 + r3
r3 q4 + r4
..
.

= rn1 qn

e
e
e
e

0 r1 < b
0 r2 < r1
0 r3 < r2
0 r4 < r3
..
.

rn = 0

Da u
ltima linha, temos que rn1 divide rn2 e portanto mdc(rn1 , rn2 ) = rn1 .
Aplicando sucessivamente o lema 2, temos que mdc(a, b) = rn1 .

3.6

Algoritmo euclideano estendido

O resultado que mais vamos usar durante o curso sobre mdc e o seguinte:
Teorema 4 Sejam a e b inteiros positivos e seja d o m
aximo divisor comum
entre a e b. Esxistem inteiros e tais que
.a + .b = d.
Para demonstracao desse teorema, veja o livro texto, pag 29-31.
Vamos ilustrar a demonstracao atraves de um exemplo numerico:
6

Exemplo 1 Sejam a = 1234 e b = 54. Temos que:


1234 = 54.22 + 46

ou seja,

46 = 1234 54.22

Seguindo pelo algoritmo de euclides,


54 = 46.1 + 8

ou seja,

8 = 54 46.1

Agora, observe que sabemos calcular 46 em funca


o de 1234 e 54. Ent
ao, substituindo:
8 = 5446.1 = 54(123454.22).1 = 54(1+22.1)+1234.(1) = 54.(23)+1234.(1)
Continuando,
46

= 8.5 + 6

= 46 8.5
= (1234 54.22) (54.(23) + 1234.(1)).5
= 1234.(6) + 54.(22 (23).5)
= 1234.(6) + 54.(137)

= 6.1 + 2

= 86
= (54.(23) + 1234.(1)) (1234.(6) + 54.(137))
= 1234(1 6) + 54(23 + 137)
= 1234(7) + 54(160)

Logo, = 7 e = 160 uma vez que mdc(1234, 54) = 2.


Observe que o teorema nao diz que os valores de e sao u
nicos. Na verdade,
existe uma infinidade de n
umeros que satisfazem a equacao a + b = d.
Pergunta: para que serve calcular e ?
Resposta:
unicidade de fatoracao de um inteiro;
RSA depende de um metodo eficiente de c
alculo de e .

3.7

Exerccios propostos

Nao deixem de fazer os seguintes exerccios do captulo 1:


1(1), 4, 5, 7, 8, 9.

Fatorac
ao u
nica

4.1

Teorema da fatorac
ao u
nica

Dizemos que um n
umero inteiro positivo p e primo
divisores de p sao p e 1.

se p 6= 1 e os u
nicos

Se um n
umero inteiro positivo (diferente de 1) nao e primo, entao ele e chamado
de composto .
Teorema 5 (Teorema da fatora
c
ao u
nica) Dado um inteiro positivo n 2
podemos sempre escreve-lo, de maneira u
nica, na forma:
n = pe11 . . . . .pekk
onde 1 < p1 < p2 < . . . < pk s
ao n
umeros primos e e1 , . . . , ek s
ao inteiros
positivos (multiplicidades).

4.2

Exist
encia da fatorac
ao

Algoritmo ing
enuo: Dado n 2 inteiro positivo, tente dividir n por cada um
dos inteiros de 2 a n 1. Se algum desses inteiros (digamos k) dividir n, entao
achamos um fator de n.
Perguntas:
1. k e primo ou composto?
2. Quando se deve parar a busca? Em n 1?
Respostas:
1. k e primo. De fato, suponhamos k composto. Logo, k = a.b com 1 <
a, b < k. Como k divide n, existe (por definicao) c inteiro tal que n = k.c.
Logo,
n = a.b.c
ou seja, a e b sao fatores de n menores que k, o que contraria a hipotese
da minimalidade de k. Logo, k e primo.

2. Na verdade, podemos parar o algoritmo em n. De fato, n = k.c ou


c = nk . Comok e o menor fator de n, k c. Logo, k nk ou seja,
k 2 n k n.
Podemos utilizar o algoritmo acima para achar todos os fatores primos de n.
Aplicando o algoritmo uma vez, encontramos o fator q1 . Entao, aplicamos o
8

algoritmo ao n
umero qn1 , determinando q2 , o segundo fator primo de n. Para
determinar o terceiro fator primo q3 , aplicamos o algoritmo ao n
umero q1n.q2 e
n
assim por diante, ate chegarmos em q1 .q2 .....qs1 = qs , com qs primo. Observe
que q1 q2 . . . qs1 qs e
n>

n
n
n
>
> ... >
> 0,
q1
q1 .q2
q1 .q2 . . . . .qs

ou seja, o algoritmo sempre termina.


Exemplo 2 n = 450 = 2.3.3.5.5

4.3

Efici
encia do algoritmo ing
enuo de fatorac
ao

O algoritmo e simples mas muito

ineficiente!

Exemplo 3 Seja n um
umero primo com 100 ou mais algarismos. Logo,
n
n 10100 e portanto n 1050 . Logo temos que executar pelo menos 1050
loops para determinar que n e primo. Suponhamos que o nosso computador
50
40
segundos, ou
execute 1010 divis
oes por segundo. Logo levaremos 10
1010 = 10
seja, 1031 anos na frente da tela do computador aguardando... Observe que o
tempo estimado de existencia do universo e 1011 anos!
importante ressaltar que n
O algoritmo e bom para n
umeros pequenos. E
ao
existe (atualmente) algoritmo de fatora
c
ao eficiente para todos os
inteiros . Disso depende a seguranca do RSA!
Nao se sabe, entretanto, se tal algoritmo nao existe mesmo ou se nao fomos
espertos o suficiente para inventa-lo...

4.4

Fatorac
ao por Fermat

Eficiente quando n tem um fator primo nao muito menor que

n.

Ideia: tentar achar n


umeros inteiros positivos x e y tais que n = x2 y 2 .
Caso mais facil: n = r2 (x = r e y = 0).
Se y > 0, entao

x=

n + y2 >

Notacao: escrevemos [r] como a parte inteira do n


umero real r.
Algoritmo de Fermat:

Etapa 1: Faca x = [ n]; se n = x2 , pare.


9

Etapa 2: Incremente x de uma unidade e calcule y =

x2 n.

Etapa 3: Repita a etapa 2 ate encontrar um valor inteiro para y, ou ate que x = n+1
2 .
No primeiro caso, n tem fatores x + y e x y; no segundo, n e primo.
Exemplo 4 Seja n = 1342127. Temos que x = 1158. Mas
x2 = 11582 = 1340964 < 1342127
Logo, passamos a incrementar x ate que
p
x2 n
seja inteiro ou x =

n+1
2 ,

que nesse caso vale 671064:

x2 n
x
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 s


ao x+y = 1277 e xy = 1051.
Faremos aqui apenas a demonstracao de que, se n e primo, entao o u
nico valor
possvel para x e x = n+1
.
Relembrando,
x
e
y
s
a
o
inteiros
positivos
tais que
2
n = x2 y 2 . Ou seja,
n = (x y)(x + y)
Como estamos supondo n primo, temos que x y = 1 e x + y = n. Logo,
x=

1+n
2

y=

n1
2

como queramos.
Veja a demonstracao completa do algoritmo no livro texto, paginas 41 a 43.
Observa
c
ao: Esse algoritmo diz algo importante sobre o RSA. Se escolhermos
p e q muito proximos, entao n = p.q e facilmente fatoravel pelo algoritmo de
Fermat.

4.5

Propriedade fundamental dos primos

Lema 6 Sejam a, b, c inteiros positivos e suponhamos que a e b s


ao primos entre
si. Ent
ao:
1. Se b divide o produto a.c ent
ao b divide c.
10

2. Se a e b dividem c ent
ao o produto a.b divide c.
Prova 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.
Para provar a segunda afirmativa, se a divide c, podemos escrever c = at para
algum inteiro t. 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

Podemos usar o lema acima para provar se seguinte propriedade:


Propriedade fundamental dos primos Seja p um primo e a e b inteiros
positivos. Se p divide o produto a.b, entao p divide a ou p divide b.
A demonstracao fica como exerccio (facam!).

4.6

Unicidade

A prova de unicidade da fatoracao de n


umeros primos decorre facilmente da
propriedade fundamental dos primos. A demonstracao se da por absurdo.
Seja n o menor inteiro positivo que admite duas fatoracoes distintas. Podemos
escrever:
n = pe11 . . . . .pekk = q1r1 . . . . .qsrs
onde p1 < p2 < . . . < pk e q1 < q2 < . . . < qs sao primos e e1 , . . . , ek , r1 , . . . , rs
sao inteiros positivos.
Como p1 divide n, pela propriedade fundamental dos primos p1 deve dividir um
dos fatores do produto da direita. Mas um primo so pode dividir outro se forem
iguais. Entao p1 = qj para algum j entre 1 e s. Logo,
n = pe11 . . . . .pekk

= q1r1 . . . . .qj j . . . . .qsrs


r
= q1r1 . . . . .p1j . . . . .qsrs

Podemos entao cancelar p1 que aparece em ambos os lados da equacao, obtendo


r 1

m = pe11 1 . . . . .pekk = q1r1 . . . . .p1j

. . . . .qsrs

onde m e um n
umero menor que n que apresenta duas fatoracoes distintas.
ABSURDO pois isso contraria a minimalidade de n.
11

4.7

Exerccios propostos

1. Prove a propriedade fundamental dos primos.


2. Demonstre que, se p e um n
umero primo, entao

p e um n
umero irracional.

3. Livro texto: 2, 4, 5, 8, 11, 12.

N
umeros primos

Ate agora:
propriedades basicas dos n
umeros inteiros;
dois algoritmos fundamentais;
Nessa secao, discutiremos metodos ingenuos para encontrar primos.

5.1

F
ormulas Polinomiais

Considere o polinomio:
f (x) = an .xn + an1 .xn1 + . . . + a1 .x + a0
onde an , an1 , . . . , a1 , a0 sao n
umeros inteiros e que satisfaz a condicao:
f (m) e primo, para todo inteiro positivo m
Exemplo 5 Seja f (x) = x2 + 1 Logo,
x
1
2
3
4
5
6
7
8
9
2

f (x)
2
5
10
17
26
37
50
65
82
5

x mpar f (x) par;


f (8) = 65 composto...
12

A pergunta que surge entao e: isso e fruto do azar?


Teorema 7 Dado um polin
omio f (x) com coeficientes inteiros, existe uma infinidade de inteiros positivos m tais que f (m) e composto.
Prova

Vamos Provar o teorema apenas no caso em que o polinomio tem grau 2. Ou


seja, consideraremos f do tipo:
f (x) = a.x2 + b.x + c
Podemos supor a > 0. Suponhamos que exista m tal que f (m) = p onde p e
primo. Calculando f (m + hp):
f (m + hp) = a(m + hp)2 + b(m + hp) + c
= (am2 + bm + c) + p(2amh + aph2 + bh)
= p(1 + 2amh + aph2 + bh)
Ou seja, se 1+2amh+aph2 +bh e composto entao f (m+hp) tambem e composto.
Mas isso e verdade sempre que
1 + 2amh + aph2 + bh > 1
ou seja, se
2amh + aph2 + bh = h.(2am + aph + b) > 0
Como podemos sempre tomar h positivo, temos:
2am + aph + b > 0 h >

b 2am
a.p

Existe uma infinidade de n


umeros dessa forma. Logo, se existe inteiro m tal
que f (m) e primo, entao existe uma infinidade de tais n
umeros.
Conclusao: n
ao existe uma f
ormula polinomial (em uma vari
avel) para
primos .

5.2

F
ormulas exponenciais: n
umeros de Mersenne

umeros de Mersenne
N

sao aqueles da forma:


M (n) = 2n 1

onde n e um inteiro n
ao negativo.
N
umeros perfeitos sao aqueles iguais `a metade da soma de seus divisores. Ex: 6 = 12/2 e 12 = 1 + 2 + 3 + 6

13

Nenhum primo e perfeito.


Resultado: 2n1 .(2n 1) e perfeito se 2n 1 e primo.
Outro resultado: Todo n
umero perfeito par possui a forma acima. Ex:
6 = 221 (22 1)
O que nao se sabe: se existem n
umeros perfeitos mpares.
Pergunta: Quais sao os n
umeros de Mersenne primos? Exemplos: quando
n = 2, 3, 5, 7, 13, 17, 19, 31, 61.... Observe que os expoentes sao todos primos, mas nem todos primos fazem parte dessa lista. Por exemplo,
M (11) = 2047 = 23.89

5.3

F
ormulas exponenciais: n
umeros de Fermat

N
umeros de Fermat

sao aqueles da forma:


n

F (n) = 22 + 1
onde n e um inteiro n
ao negativo.
Exemplos de n
umeros de Fermat primos: n = 0, 1, 2, 3, 4. F (5) = 18446744073709551617
e composto!
Poucos primos de Fermat sao conhecidos.Ate hoje, nao se descobriu nenhum F (n) primo com n 5.

5.4

F
ormulas fatoriais

Seja p um primo positivo. Construiremos uma funcao semelhante ao fatorial, s


o
que apenas os primos sao multiplicados. Vamos chama-la de p# . Ou seja, p# e
o produto de todos os primos menores ou iguais a p. Ex: 5# = 2.3.5 = 30
Observe que se p e q sao primos sucessivos, entao
p# = q # .p
Estaremos interessados nos n
umeros da forma p# + 1. Embora p# + 1 nem
#
sempre seja primo (Ex. 13 + 1 = 30031 = 59.509), podemos mostrar que nao
tem nenhum fator primo menor ou igual a p. Desta forma, temos um algoritmo
para calcular primo.
Pergunta: qual e o problema de tal algoritmo?
Observacao final: p# + 1 quase nunca e primo!

14

5.5

Infinidade de primos

Teorema 8 Existem uma infinidade de primos


Prova

Digamos que exista uma quantidade finita de primos:


{p1 , p2 , . . . , pk }
Podemos supor que esses primos estao ordenados, de modo que pk e o maior
deles. Considere o n
umero p#
umero possui fator primo
k + 1. Como vimos, esse n
maior que pk . ABSURDO!

5.6

Crivo de Erat
ostenes

O crivo de Eratostenes e o mais antigo dos metodos para encontrar primos.


Etapa 1: Listamos os n
umeros mpares de 3 a n.
Etapa 2: Procure o primeiro n
umero k da lista. Risque os demais n
umeros da lista,
de k em k.
Etapa 3: Repita a etapa 2 ate chegar em n.
Observacoes:
1. Podemos parar em

n...

2. Podemos comecara riscar a partir de k 2 ...

5.7

Crivo de Erat
ostenes revisado

Etapa 1: Crie um vetor v de

n1
2

posicoes, preenchidas com o valor 1; faca P = 3.

Etapa 2: Se P 2 > n, escreva os n


umeros 2j + 1 para os quais a j-esima entrada de
v e 1 e pare;
Etapa 3: Se a posicao
`a Etapa 2.

(P 1)
2

de v esta preenchida com 0 incremente P de 2 e volte

Etapa 4: Atribua o valor P 2 a uma nova variavel T ; substitua por zero o valor da
posicao (T 1)
e incremente T de 2P ; repita ate que T > n; incremente P
2
de 2 e volte `a Etapa 2.

15

5.8

Exerccios propostos

1. Entenda e implemente o algoritmo da pag 65 do livro texto.


2. Livro texto: 1, 3 a 7, 8 e 10.

Aritm
etica modular

Aritmetica modular = aritmetica dos fenomenos cclicos.


Exemplos: Horas, dias do mes, letras do alfabeto, etc.

6.1

Relac
oes de equival
encia

Seja X um conjunto e uma relacao entre elementos de X . Dizemos que e


c
ao de equival
encia se, para todos x, y, z X :
uma rela
Reflexiva x x.
Simetrica Se x y entao y x.
Transitiva Se x y e y z entao x z.
Exemplos:
< nos inteiros nao satisfaz reflexividade;
nos inteiros satisfaz reflexividade, mas nao satisfaz simetria;
=
6 e reflexiva, simetrica mas nao transitiva;
relacao de equivalencia: = nos n
umeros inteiros.
Relacoes de equivalencia: sao usadas para classificar os elementos de um conjunto em subconjuntos com propriedades semelhantes. As subdivisoes de um
conjunto produzidas por uma relacao de equivalencia sao conhecidas como classes
de equivalencia. Formalmente, seja X um conjunto e uma r.e. definida em
X . Se x X entao a classe de equival
encia de x e o conjunto de elementos
de X que sao equivalentes a x por . Denotamos:
x = {y X : y x}.
Propriedades:
Qualquer elemento de uma classe de equivalencia e um representante de
toda a classe.
16

X e a uniao de todas as classes de equivalencia.


Duas classes de equivalencia distintas nao podem ter um elemento em
comum.
O conjunto das classes de equivalencia de em X e chamado de conjunto
quociente de X por . Observe que os elementos do conjunto quociente sao
subconjuntos de X . Isto e, o conjunto quociente nao e um subcojunto de X ,
mas um subconjunto das partes de X .

6.2

Inteiros m
odulo n

Vamos construir uma relacao de equivalencia no conjunto dos inteiros. Digamos


que, pulando de n em n, todos os inteiros sao equivalentes. Ou melhor: dois
inteiros cuja diferenca e um m
ultiplo de n sao equivalentes. Formalmente, dizeodulo n se a b e m
ultiplo
mos que dois inteiros a e b sao congruentes m
de n. Escrevemos:
a b (mod n)
Exemplos:
10 0 (mod 5)

23 1

(mod 11)

Observa
c
ao: Congruencia m
odulo n e uma relacao de equivalencia:
a a (mod n) (trivialmente)
Se a b (mod n), entao a b e m
ultiplo de n. Mas b a = (a b);
logo, b a tambem e m
ultiplo de n. Portanto b a (mod n).
Transitividade: exerccio.
Chamamos de Zn o conjunto de inteiros m
odulo n. Ou seja, se a Z, entao
a = {a + kn | k Z}
ultiplos de n.
Em particular, 0 e o conjunto dos m
Voltemos agora ao algoritmo da divisao de Euclides. Vimos que, dados a e n
inteiros positivos, a > n, existem inteiros q e r tais que
a = n.q + r

or n1

Ou seja, a r 0 (mod n) e portanto a r

(mod n).

Em outras palavras,
Zn = {0, 1, . . . , n 1}
.
17

6.3

Artim
etica modular

Sejam a e b classes de Zn . Entao,


a+b=a+b
Exemplo:
5 + 4 9 1 (mod 8)
Logo,
5+4=9=1
A diferenca entre duas classes e definida de maneira analoga.
A formula para a multiplicacao das classes a e b de Zn e:
a.b = a.b
Propriedades da adicao:
A1 (a + b) + c = a + (b + c).
A2 a + b = b + a.
A3 a + 0 = a.
A4 a + a = 0.
Propriedades da multiplicacao:
M1 (a.b).c = a.(b.c).
M2 a.b = b.a.
M3 a.1 = a.
AM a.(b + c) = a.b + a.c.
Exemplo: em Z6 ,

6.4

2.3 = 6 = 0!!!

Crit
erios de divisibilidade

Divisibilidade por 3: 3|a se a soma de todos os algarismos de a e


divisvel por 3.
Prova

Seja
a = an .an1 . . . . .a1 .a0
= an .10n + an1 .10n1 + . . . + a1 .10 + a0
18

Como 10 1

(mod 3),
a an + an1 + . . . + a1 + a0

Logo, a 0

(mod 3)

(mod 3) se e somente se
an + an1 + . . . + a1 + a0 0 (mod 3)

Observe que podemos usar o mesmo argumento para provar que um n


umero
inteiro e divisvel por 9 se a soma de seus algarismos e divisvel por 9
(10 1 (mod 9)).
Divisibilidade por 11: 11|a se a soma alternada de todos os algarismos de a e divisvel por 11. Prova Observe que 10 1 (mod 11).
Portanto,
10k (1)k (mod 11)
e igual a 1 ou -1 dependendo da paridade de k. Logo,

a (1)n .an + (1n1 ).an1 + . . . + a2 a1 + a0

6.5

(mod 11)

Pot
encias

A aplicacao mais importante de congruencias no nosso curso e no c


alculo de
resto da divisao de uma potencia por um n
umero qualquer.
Vamos ilustrar como isso e feito na pratica atraves de um exemplo.
Suponhamos que o objetivo seja calcular
3515

(mod 20)

Em primeiro lugar, escrevemos o expoente 15 na base 2:


15 = 23 + 22 + 2 + 1
Logo,
3515
Como 35 15

=
=

(mod 20), 152 5


3515

352 +2 +2+1 = 35.352 .352 .352


35.(35)2 .(352 )2 .((352 )2 )2
(mod 20) e 52 5
2

(mod 20), temos:

35.352 .352 .352


15.(15)2 .(352 )2 .((352 )2 )2
15.5.(5)2 .((352 )2 )2
15.5.5.(5)2
15.5.5.5
15.5
15
19

(mod
(mod
(mod
(mod
(mod
(mod

20)
20)
20)
20)
20)
20)

6.6

Equa
c
oes diofantinas

c
ao diofantina e uma equacao em varias incognitas com coUma equa
eficientes inteiros. Por exemplo, xn + y n = z n . Estaremos interessados em
encontrar as solucoes inteiras dessas equacoes.
claro que tais equacoes podem ter infinitas soluces. Por exemplo, x + y = 2.
E
Ou nenhuma, como no caso da equacao
x3 117y 3 = 5
muito facil ver que isso e verdade atraves da reducao m
E
odulo 9. De fato, como
117 e divisvel por 9,
x3 117y 3 x3 5 (mod 9)
Logo, se a equacao acima tivesse solucao, deveramos ter x3 5 (mod 9).
classes m
odulo 9: 0 1 2 3 4 5 6 7 8
Mas:
Ou seja, x3 5
cubos m
odulo 9:
0 1 8 0 1 8 0 1 8
(mod 9) nao tem solucao.

6.7

Divis
ao modular

Teorema 9 (Teorema da invers


ao) A classe a tem inverso em Zn se e somente se a e n s
ao primos entre si.
Prova

() Suponha que a tem inverso. Entao existe b tal que


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 .


O conjunto dos elementos de Zn que tem inverso e muito importante. Vamos
denota-lo por U(n). Em outras palavras,
U(n) = {a Z(n)|mdc(a, n) = 1}
20

No caso de n = p ser primo,


U(p) = Z(n) \ {0}
Uma propriedade importante de U(n) e que esse conjunto e fechado com
rela
c
ao `
a multiplica
c
ao . Em outras palavras, o produto de dois elementos
de U(n) e um elemento de U(n). Em particular, podemos dividir a por b em Z(n)
somente se b U(n); nesse caso, b1 tambem pertencer
a a U(n) e ab a.b1
(mod n).
Podemos utilizar o que aprendemos para resolver congruencias lineares em Z(n).
Uma congru
encia linear e uma equacao do tipo:
a.x b

(mod n)

onde a, b Z. A solucao dessa equacao e:


x .b (mod n)
onde e o inverso de a m
odulo n.
Conclus
ao: Se mdc(a, n) = 1 entao a congruencia linear a.x b
tem uma e so uma solucao em Zn .

6.8

(mod n)

Exerccios propostos

4, 5, 6(b), 7, 10 e 11

Primeira Prova de Algebra


A

Quest
ao 1 - a) Calcule d = mdc(252, 198).
b) Encontre dois n
umeros inteiros a e b tais que:
a.252 + b.198 = d
Resolu
c
ao:

252=198+54
198=3.54+36

54=252-198
36=198-3.54

54=36+18

18=54-36

Deste modo, mdc(252, 198) = 18 e a = 4, b = 5

21

(1)

=198-3.(252-198)
=-3.252+4.198
=252-198-(-3.252+4.198)
=4.252+(-5).198

Quest
ao 2 - Verifique se as proposicoes abaixo sao verdadeiras ou falsas. De
uma demonstracao (= justificativa clara e bem escrita) ou um contra-exemplo
para justificar a sua conclus
ao.

(a) Se p e um n
umero primo, entao p e um n
umero irracional.
(b) Se um n
umero inteiro A se escreve em base 8 na forma an an1 ...a1 a0 , com
0 ai 7, entao 2|A se e somente se a0 = 0.
(c) Se p > 3 e um n
umero primo e p a(

(mod 3)), entao mdc(a, 3) = 1.

(d) Todo n
umero inteiro representavel com tres algarismos iguais na base 10 e
divisvel por 37.
(e) Se x e y sao inteiros mpares, entao x2 + y 2 = p2 para algum primo p.
Resolu
c
ao:
a) V- Suponha que existam a, b tais que
mdc(a, b) = 1. Logo,

p =

a
b.

Podemos supor

p.b2 = a2
e portanto p|a2 . Pela propriedade fundamental dos primos, p|a. Logo,
existe c tal que a = pc.
p.b2 = p2 .c2 = b2 = p.c2 = p|b2 = p|b
Mas isso e um absurdo uma vez que estamos supondo mdc(a, b) = 1.
b) F - Seja A = an an1 . . . a1 a0 um n
umero na base 8. Entao 2|A se e
somente se A 0 (mod 2). Observe que
A = an .8n + . . . + a1 .8 + a0 a0

(mod 2)

ou seja, 2|A se e somente se 2|a0 . Deste modo, 2|A se e somente se


a0 {0, 2, 4, 6}.
c) V - Se p a (mod 3), entao o resto da divisao de p e a por 3 e o mesmo.
Como p e primo, p > 3, temos que
p1
Logo, a 1

(mod 3) ou p 2 (mod 3)

(mod 3) ou a 2
a = 3n + k,

(mod 3), ou seja,


com k = 1, 2

Pelo algoritmo euclideano, mdc(a, 3) = mdc(k, 3) = 1 para k = 1, 2.

22

d) V - Seja n = aaa = a(111). Como 111 = 3.37,


aaa a(111) 0

(mod 37)

e) F - Se x e y sao mpares, entao existem n e m tais que


x = 2n + 1,

y = 2m + 1

Logo,
x2 + y 2

= 4n2 + 4n + 1 + 4m2 + 4m + 1
= 2(2n2 + 2n + 2m2 + 2m + 1)
= 2k

onde k e um n
umero mpar. Logo nao existe p tal que
x2 + y 2 = p2
Observe que p nao precisa ser primo: vale para qualquer n
umero natural.
Quest
ao 3 - Resolva um (e apenas um) dos exerccios abaixo:
(a) Seja p um n
umero primo. Mostre que um inteiro positivo a e o seu proprio
inverso m
odulo p (ou seja, a2 1 (mod p)) se e somente se a 1 (mod p)
ou a 1 (mod p).
(b) Calcule 1235

(mod 23).

Resolu
c
ao:
a) (=) Suponhamos a2 1 (mod p). Logo,
(a2 1) 0 (mod p) = p|(a + 1)(a 1)
Pela propriedade fundamental dos primos, p|(a + 1) ou p|(a 1). Logo,
a 1 (mod p)

a 1

ou

(=) Trivial!
b) Observe que 35 = 25 + 2 + 1. Logo,
1235

23

122 .122 .12


2.6.12
2.3
6 (mod 23)

(mod p)

Induc
ao e Fermat

8.1

Induc
ao finita

Seja P (n) uma proposicao que afirma que uma determinada propriedade vale
para cada n
umero natural n. Por exemplo:
Se p e um n
umero primo, entao np n e divisvel por p para todo natural
n.
A soma de 1 ate n e

n(n+1)
2

Para provar P (n), em geral usamos o princpio da indu


c
ao finita :
Princpio da indu
c
ao finita Para que uma proposicao P (n) seja verdadeira
para todo n natural, basta que:
1. P (1) seja verdadeira.
2. Se P (k) for verdadeira para algum n
umero natural k, entao P (k + 1)
tambem e verdadeira.

8.2

Pequeno teorema de Fermat

Lema 10 Seja p um n
umero primo e a, b inteiros. Ent
ao,
(a + b)p ap + bp
Prova

(mod p)

Veja livro texto, pag 94.

Teorema 11 (Teorema de Fermat) Seja p um n


umero primo e a um n
umero
inteiro. Ent
ao
ap a (mod p).
Prova
Se n = 1, entao 1p 1 (mod p) trivialmente.
Suponhamos que np n
o lema anterior,

(mod p) para algum n inteiro positivo. Usando

(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)
Como queramos demonstrar.
24

Caso geral: veja pag 95 do livro texto.


Teorema 12 (Teorema de Fermat II) Seja p um n
umero primo e a um inteiro que n
ao e divisvel por p. Ent
ao,
ap1 1 (mod p).
Como mdc(a, p) = 1, existe a tal que

Prova

aa 1

(mod p)

Multiplicando ambos os membros de ap a (mod p). por a , obtemos:


a .a.ap1 a .a

(mod p).

Logo,
ap1 1 (mod p).
Podemos simplificar algumas contas usando o Teorema de Fermat. De fato,
sejam p primo, a inteiro tal que mdc(a, p) = 1 e k um n
umero inteiro tal que
k p 1. Dividindo k por p 1,
k = (p 1).q + r

0 r < (p 1)

Logo,
p1

Mas (a

ak a(p1).q+r (ap1 )q .ar


) 1 (mod p) e portanto
ak ar

8.3

(mod p).

(mod p).

Exerccios propostos

1, 3, 46, 7, 8, 12

Pseudoprimos

Nesta secao, veremos com usar o pequeno teorema de Fermat para identificar
a-lo .
que um n
umero e composto sem fator

25

9.1

Pseudoprimos

De acordo com o teorema de Fermat, se p e primo e a e um inteiro qualquer,


entao ap a (mod p). Desta forma, e claro que, se n e um n
umero composto,
entao existe um inteiro b tal que bn \ b (mod n) (usaremos o smbolo \ para
significar n
ao equivalente). Observe que, na pratica, so precisamos considerar
os inteiros b no intervalo 1 < b < n 1 (por que?).
Desta forma, temos um metodo para determinar se um n
umero e composto sem
termos que fatora-lo:
Teste Se n, b sao n
umeros inteiros, n > 0 e 1 < b < n 1, tais que bn1 \ 1
(mod n), entao n e composto.
A pergunta que surge entao e: o teste acima e um procedimento de decisao?
Isto e, o fato de nao encontrarmos tal b significa que n e primo?
Resposta: Observe que, se n e composto, entao existe p primo, 1 < p < n 1
tal que p|n. Logo, mdc(p, n) = p 6= 1 e portanto p nao e inversvel m
odulo n.
Desta forma, pn1 \ 1 (mod n).

claro que esse nao e um metodo eficiente para testar primalidade uma vez que
E
e um metodo de exaust
ao.

Outra pergunta interessante que surge e a seguinte: sera que, se um n


umero
mpar n que satisfaca:
bn1 1 (mod n)
para algum 1 < b < n1 e primo? Infelizmente, a resposta e n
ao. Por exemplo,
2340 1 (mod 341) mas 341 = 11.31 nao e primo! Esses falsos primos sao
conhecidos como pseudoprimos. Ou seja, um pseudoprimo n para a base b
e um n
umero inteiro positivo mpar e composto tal que
bn1 1

(mod n)

Apesar de `as vezes dar errado, esse teste (chamado de teste de Leibniz) e muito
u
til. Tambeem e possvel melhorar o resultado do teste se testarmos para duas
bases.
Exemplo 6 Existem 50.847.534 primos entre 1 e 109 ; existem apenas 5597
pseudoprimos na base 2 e 1272 pseudoprimos para as bases 2 e 3.

9.2

N
umeros de Carmichael

Como vimos anteriormente, nao existem n


umeros que sejam pseudoprimos para
todas as bases. Entretanto, pode ocorrer que um n
umero composto n seja
pseudoprimo para todas as bases b tais que mdc(b, n) = 1.
umero de Carmichael
Dizemos que um n
umero composto mpar e um n
bn b (mod n).
26

se

Os n
umeros de Carmichael possuem duas propriedades muito interessantes,
dadas pelo teorema baixo:
Teorema 13 (Teorema de Korselt:) Um inteiro positivo mpar n e um n
umero
de Carmichael se, e somente se, cada fator primo p de n satisfaz as seguintes
condico
es:
1. p2 n
ao divide n;
2. p 1 divide n 1.
Prova

(=) Seja p um fator primo de n. Entao,


bn b

(mod p)

De fato, se b e divisvel por p entao ambos os membros da equivalencia sao


congruentes a zero. Se nao, pelo teorema de Fermat temos:
bp1 1 (mod p)
Pela condicao (2) do teorema, n 1 = (p 1).q para algum q. Logo,
bn (bp1 )q .b b

(mod p)

Por (1), temos que n = p1 . . . pk com p1 < p2 < . . . < pk . Como os primos sao
distintos, bn b e divisvel pelo produto p1 .p2 . . . . .pk = n. Em outras palavras,
bn b

(mod n)

e portanto n e um n
umero de Carmichael.
(=) Seja n um n
umero de Carmichael e suponhamos que exista p primo tal
que p2 |n. Escolha b = p. Entao:
pn p = p(pn1 1)
Mas p nao divide pn1 1, logo p2 nao pode dividir pn p. Portanto, n nao
pode dividir pn p. Em outras palavras, p p (mod n). Absurdo.
O restante da demonstracao depende do teorema da raiz primitiva, que so sera
vista no captulo 10...
Observa
co
es:
Para verificar que um n
umero e de Carmichael usando o teorema acima
necessitamos fatora-lo...
Muitos n
umeros de Carmichael possuem fatores primos pequenos!
Existem infinitos n
umeros de Carmichael.
Entre 1 e 109 existem 50.847.534 primos e 646 n
umeros de Carmichael.
27

9.3

Teste de Miller

Teorema de Fermat: detecta n


umeros compostos com uma certa eficiencia, mas
nao e um bom teste de primalidade.
Teste de Miller: Calcula-se a sequencia de potencias m
odulo n:
bq , b2q , . . . , b2

onde n 1 = 2k q.
O fato e que, se n e primo, entao:
b2

bn1 1 (mod n)
j

Digamos que j e o menor expoente tal que b2 q 1 (mod n). Se j 1


podemos escrever
j
j1
j1
b2 q 1 = (b2 q 1)(b2 q + 1)
j

j1

Se n e primo e divide b2 q 1, entao n deve dividir (b2


de j. Logo,
j1
b2 q 1 1 (mod n)

+1) pela minimalidade

Ou seja, uma das potencias


bq , b2q , . . . , b2

deve ser congruente a 1 m


odulo n. Se j = 0, entao temos apenas que bq 1
(mod n). Se nada disso acontecer, entao n deve ser composto.
Teste de Miller.
Etapa 1 Divida n 1 por 2 ate encontrar q mpar e k tais que n 1 = 2k q.
Etapa 2 Faca i = 0 e r = resto de bq por n.
Etapa 3 Se i = 0 e r = 1 ou i 0 e r = n 1: teste inconclusivo.
Etapa 4 Faca i = i + 1 e r = r2 onde r2 e o resto da divisao de r2 por n.
Etapa 5 Se i < k volte `a etapa 3; senao: n e composto.

Exemplo 7 Tome o n
umero de Carmichael 561. Temos que 560 = 24 .35.
Calculando as sequencias de restos m
odulo 561 das potencias de 2:
expoentes
restos

35
263

2.35
166
28

22 .35
67

23 .35
1

Logo 561 tem que ser composto.


Se um n
umero composto n tem resultado inconclusivo para o teste de Miller
com respeito a uma base b, dizemos que n e um pseudoprimo forte para a
base b. Observe que pseudoprimo forte pseudoprimo.

Existem 1282 pseudoprimos fortes entre 1 e 109 .

9.4

Primalidade e computac
ao alg
ebrica

importante ressaltar que o teste de Miller e muito usado na pratica. O que


E
se faz para ter maior garantia do resultado e fazer o teste para diversas bases.
assim com o Maple, ScratchPad - IBM, Axiom 1.1 - IBM.
E
Vale a observacao: dado um n
umero finito qualquer de bases, existem infinitos
n
umeros de Carmichael que sao pseudoprimos fortes para todas essas bases.

9.5

Exerccios propostos

2, 5, 7, 8, 10

10

Teorema de Euler

O pequeno teorema de Fermat nos diz como trabalhar com certas congruencias
envolvendo expoentes quando o m
odulo e primo. Nessa secao, veremos como
lidar com congruencias m
odulo um n
umero composto.

10.1

Func
ao de Euler

Defini
c
ao. Seja n um inteiro positivo. A fun
c
ao de Euler (n) e definida
como o n
umero de inteiros positivos nao excedendo n que sao relativamente
primos com n.
A tabela abaixo apresenta os valores de (n) para 1 n 12.
n
(n)

1
1

2
1

3
2

4
2

5
4

6
2

7
6

8
4

9
6

10
4

11
10

12
4

Na secao de aritmetica modular, estudamos o conjunto U(n), o conjunto dos


elementos de Zscrn que tem inverso. Vimos que
U(n) = {a Zn : mdc(a, n) = 1}
29

Desta forma, (n) nada mais e do que o n


umero de elementos de U(n).
Vamos ver como calcular (n). Comecamos com alguns casos especiais. Seja p
um n
umero primo. Entao todos os inteiros positivos menores que p sao primos
com p. Logo
(p) = p 1
Tambem e facil calcular (pk ). Observe que mdc(a, pk ) = 1 se e somente se
p nao divide a. Entao basta contar os inteiros menores que pk que nao sao
divisveis por p. Se 0 a < pk e divisvel por p, entao
a = p.b

0 b < pk 1

onde

Portanto ha pk1 inteiros positivos menores que pk que sao divisveis por p.
Logo ha pk pk1 que n
ao sao divisveis por p. Ou seja,
(pk ) = pk1 (p 1)
Para obtermos a formula geral, e necessario provar o seguinte resultado:
Teorema. Se m, n sao inteiros positivos tais que mdc(m, n) = 1, entao
(mn) = (m).(n)
A demonstracao desse teorema e trabalhosa (mas nao difcil) e portanto nao
faremos aqui.
Exemplo 8 (100) = (22 ).(52 ) = (2.1).(5.4) = 40
Pelo teorema acima temos que, se n = pe11 . . . . .pekk , entao,
(n) = pe11 1 . . . . .pekk 1 (p1 1). . . . .(pk 1)

10.2

Teorema de Euler

Vai ser necessario, para decodificacao de mensagens, saber calcular a funcao


de Euler. Tambem vamos ter que aplicar o teorema de Euler. O teorema
de Euler e uma generalizacao do teorema de Fermat para o caso em que o
m
odulo nao e primo:
Teorema de Euler. Se n e um inteiro positivo e a e um inteiro tal que
mdc(a, n) = 1, entao
a(n) 1 (mod n)
Antes de provar esse teorema, vamos apresentar um exemplo.

30

Exemplo 9 Temos que U(8) = {1, 3, 5, 7} e portanto (8) = 4. Observe que,


se a, b, c U(8), ent
ao a.b U(8) e, se c 6= b, ent
ao
a.b\ a.c

(por que?)

Para ver como isso funciona, tome a = 3. Ent


ao,
3.1
3.3
3.5
3.7

3
1
7
5

(mod
(mod
(mod
(mod

8)
8)
8)
8)

Logo,
(3.1).(3.3).(3.5).(3.7) 1.3.5.7

(mod 8)

e portanto,
34 .1.3.5.7 1.3.5.7

(mod 8)

Como mdc(1.3.5.7, 8) = 1, podemos cortar o termo comum dos dois lados da


equivalencia:
34 1 (mod 8)
Teorema 14 (Teorema de Euler) Se n e um inteiro positivo e a um inteiro
tal que mdc(n, a) = 1, ent
ao
a(n) 1 (mod n)
Prova

Escrevendo U(n) = {b1 , . . . , b(n) }, temos que:


(a.b1 ). . . . .(a.b(n) ) b1 . . . . .b(n)

(mod n)

Logo,
a(n) .b1 . . . . .b(n) b1 . . . . .b(n)

(mod n)

Como mdc(b1 . . . . .b(n) , n) = 1, podemos cortar o termo comum dos dois lados
e portanto,
a(n) 1 (mod n)

10.3

Exerccios propostos

Captulo 8: 4, 6, 8, 9, 10, 18

31

10.4

Tabela Hashing

Uma universidade deseja estocar um arquivo para cada um de seus estudantes


no seu computador. O n
umero identificador, ou chave para cada arquivo e o
n
umero do CPF do estudante. O CPF e um inteiro de 11 dgitos, portanto
e praticamente impossvel reservar uma posicao de mem
oria para cada CPF
possvel. Deve-se encontrar um metodo sistematico para arranjar esses arquivos
na mem
oria, usando um n
umero razoavel de posicoes de mem
oria. De outra
forma, ficaria impossvel acessar os arquivos...
Um desses metodos e utilizando a tabela hashing , baseada em fun
co
es
hashing . Existem varias propostas para funcoes hashing. Vamos discutir
(brevemente) o tipo mais utilizado.
Seja k a chave do arquivo a ser estocado e seja n um inteiro positivo. Definimos
a funcao hashing h(k) por
h(k) k

(mod n)

claro que devemos escolher um n adequado de modo que


onde 0 h(k) < n. E
os arquivos fiquem distribudos de uma maneira razoavel entre as n posicoes
possveis de mem
oria.
Por exemplo, n nao deve ser uma potencia de 10 (10r ) simplesmente porque o
valor da funcao h seria os r u
ltimos dgitos da chave.
Outro exemplo de uma escolha ruim e quando n|10m a onde a e m sao pequenos. Por exemplo, se n = 111|(103 1) = 999 entao 103 1 (mod n) e
portanto os n
umeros:
64121284868

64184821268

vao para a mesma posicao de mem


oria.
Para evitar esses problemas, n deve ser um n
umero primo proximo do n
umero
de posicoes disponveis. Por exemplo, se existem 5000 posicoes de memoria para
o armazenamento de 2000 arquivos de estudantes, podemos escolher n = 4969.
Claro que, mesmo assim, colis
oes podem ocorrer. Existem varias heursticas
para tratamento de colis
oes. O metodo mais usado e o de escolher uma posicao
livre. Existem varias maneiras de fazer isso e as mais complicadas sao as mais
eficientes. Eu poderia passar o dia falando sobre elas, mas vou citar apenas
uma, a mais simples. Consiste em tomar:
hj (k) h(k) + j

(mod n)

Desta forma, a chave k e alocada na posicao mais proxima possvel de h(k).


A eficiencia desse metodo e realmente baixa, pois tende a haver um engarrafamento.
Na pratica, o mais facil e atachar uma lista a cada posicao de memoria. Dessa
forma, procede-se por busca sequencial.
32

11
11.1

Criptografia RSA
Pr
e-codifica
c
ao

Em primeiro lugar, devemos converter a mensagem em uma sequencia de n


umeros.
Essa primeira etapa e chamada de pre-codificaca
o. Ha varias maneiras de se
fazer isso. Aqui vamos supor que o texto nao contem acentuacao, pontuacao,
n
umeros etc, apenas as letras A a Z (mai
usculas). Tambem vamos adicionar
espacos em branco entre palavras, que sera substitudo pelo n
umero 99. A letra
A sera convertida no n
umero 10, B sera 11 e assim por diante, ate o Z correspondendo ao n
umero 35. Observe que cada letra corresponde a um n
umero
com exatamente dois algarismos. Isso evita ambiguidades.
A chave p
ublica e um n
umero n = p.q, onde p e q sao primos. Antes de comecar
devemos, entao escolher esses n
umeros. O u
ltimo passo da pre-codificacao e
quebrar a mensagem em blocos. Esses blocos devem ser n
umeros menores
que n. A maneira de escolher os blocos nao e u
nica, mas e importante evitar
duas situacoes:
Nenhum bloco deve comecar com o n
umero 0 (problemas na decodificacao).
Os blocos nao devem corresponder a nenhuma unidade lingustica (palavra,
letra, etc). Assim a decodificacao por contagem de frequencia fica impossvel.

11.2

Codificando e decodificando

Para codificar a mensagem precisamos de n = p.q e de um inteiro positivo e que


seja inversvel m
odulo (n). Em outras palavras,
mdc(e, (n)) = mdc(e, (p 1).(q 1)) = 1
c
ao
Chamaremos o par (n, e) a chave de codifica

do sistema RSA.

Codificaremos cada bloco de mensagem separadamente e a mensagem codificada


sera a sequencia de blocos codificados.
Importante: Os blocos ja codificados nao poder
ao ser reunidos de modo a formar
um longo n
umero. Isso tornaria a decodificacao impossvel!
Vamos agora mostrar como codificar cada bloco b. Chamaremos o bloco codificado de C(b). Em primeiro lugar, lembre-se que b e menor que n. Entao:
C(b) be
Onde 0 C(b) < n.

33

(mod n)

Exemplo 10 Considere a frase Paraty


e linda . Convertendo em n
umeros,
2510271029349914992118231310
Agora devemos escolher n. Vamos comecar com um n
umero pequeno, por exemplo
n = 11.13 = 143
Podemos ent
ao quebrar a mensagem acima em blocos, que devem ter valor
menor que 143:
25 102 7 102 93 49 91 49 92 118 23 13 10
Ent
ao temos que (143) = 10.12 = 120 e portanto e deve ser um n
umero que
n
ao divide 120. O menor valor possvel e 7. Logo,
C(25) 257

252 .252 .25 (mod 143)


2
252 .53.25 (mod 143)
532 .53.25 (mod 143)
92.53.25 (mod 143)
14.25 (mod 143)
64 (mod 143)

Procedendo dessa maneira com todos os blocos, obtemos a seguinte mensagem


cifrada:
64 119 6 119 102 36 130 36 27 79 23 117 10
Vejamos agora como proceder para decodificar um bloco de mensagem codificada. A informacao que precisamos para decodificar esta contida no par (n, d),
onde d e o inverso de e m
odulo (n). Chamaremos (n, d) de chave de decodifica
c
ao e de D(c) o resultado do processo de decodificacao. D(c) e dado
por:
D(c) cd (mod n)
onde 0 D(c) < n.
Observe que e muito facil calcular d, desde que (n) e e sejam conhecidos: basta
aplicar o algoritmo euclideano estendido. Entretanto, se nao conhecemos p e q
e praticamente impossvel calcular d.
Voltando ao nosso exemplo, temos que n = 143 e e = 7. Para calcular d, usamos
o algoritmo euclideano estendido:
120 = 7.17 + 1

1 = 120 + (17).7

Logo o inverso de 7 m
odulo 120 e 17. Como d deve ser usado como um
expoente, precisamos que d seja positivo. Logo tomamos d = 120 117 = 103.

34

11.3

Funciona?

A pergunta obvia que surge agora e:


D(C(b)) = b?
Ou seja, decodificando um bloco de mensagem codificada, encontramos um bloco
da mensagem original? Porque senao todo nosso esforco foi sem sentido...
Vamos mostrar nessa secao que a resposta para a pergunta acima e sim .
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!
Por definicao, temos que
DC(b) (be )d be.d

(mod n)

Mas d e o inverso de e m
odulo (n). Logo existe 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 o teorema de Euler:


bed (b(n) )k .b b

(mod n)

Se b e n nao sao primos entre si, obderve que n = p.q, p e q primos distintos.
Logo,
bed b1+k(n) (b(p1) )k.(q1) .b (mod p)

Se mdc(b, p) = 1, entao podemos usar o teorema de Fermat (bp1 1 (mod p)).


Se nao, temos que p|b e portanto
bed b 0 (mod p)
Logo,
qualquer que seja b.

bed b

(mod p)

Fazemos o mesmo para o primo q, obtendo:


bed b

(mod q)

Portanto,
como queramos.

bed b

(mod p.q)

35

11.4

Porque o RSA
e seguro

Como ja vimos, o par de codificacao (n, e) e conhecido e acessvel a qualquer


usu
ario. O RSA so e seguro se for difcil calcular d quando apenas esse par e
conhecido.
Observe que so sabemos calcular d se soubermos o valor de (n), cujo c
alculo
depende da fatoracao de n. A pergunta que surge entao e: sera que nao existe
outro processo para calcular d e (n)? Por exemplo, o que aconteceria se alguem
inventasse um metodo para calcular (n) a partir de n e e? A resposta e que
teramos, entao, um algoritmo rapido de fatoracao. Observe que
(n) = (p 1).(q 1) = pq (p + q) + 1 = n (p + q) + 1
Logo, (p + q) = n (n) + 1 e conhecido. Contudo,
(p + q)2 4n = (p2 + q 2 + 2pq) 4pq = (p q)2
Logo,
pq =

(p + q)2 4n

que tambem e conhecido. Ou seja, conhecemos p+q e pq. Portanto conhecemos


p e q e fatoramos n!
Deste modo, conhecer (n) sem fatorar n significa que, na verdade, sabemos
fatorar n!
Outro jeito de quebrar o RSA seria achar um algoritmo que calcule d diretamente
a partir de n e e. Como ed 1 (mod (n)), isto implica que conhecemos um
m
ultiplo de (n). Isso tambem e suficiente para fatorar n (prova complicada).
Au
ltima alternativa seria achar b a partir da forma reduzida de be m
odulo n
sem achar d. Bom, ninguem conseguiu fazer isso ate agora... Acredita-se que
quebrar o RSA e fatorar n sejam problemas equivalentes, apesar disso nao ter
sido demonstrado.

11.5

Escolhendo primos

Suponha que desejamos implementar o RSA de chave p


ublica (n, e), de modo que
n seja um inteiro com aproximadamente r algarismos. Para construir n, escolha
r
45r
4r
e 100
algarismos e, em seguida, escolha q proximo de 10p . O
um primo p entre 10
tamanho da chave recomendado atualmente para uso pessoal e de 768 bits. Isso
significa que n ter
a aproximadamente 231 algarismos. Para construir tal n
umero
precisamos de dois primos de, digamos, 104 e 127 algarismos respectivamente.
Outra coisa a ser observada e que os n
umeros p 1, q 1, p + 1, p 1 nao tenham
fatores primos pequenos, pois senao seria facil fatorar n.
Para encontrar p e q, seguiremos a seguinte estrategia:
1. Tome um n
umero s mpar.
36

2. Verifique se n e divisvel por um primo menor que 5.000.


3. Aplique o teste de Miller a s usando como base os 10 primeiros primos.
Encontrar tais primos pode ser um processo trabalhoso. Por exemplo, se x e
um n
umero da ordem de 101 27, no intervalo entre x e x + 104 existem aproximadamente 34 primos dentre 560 n
umeros que passam a etapa (1) da estrategia
acima...

11.6

Assinaturas

Apenas codificar mensagens nao basta, em geral, pois o sistema e de chave


p
ublica. Ou seja, qualquer pessoa pode codificar uma mensagem usando uma
chave alheia. Por exemplo, um haker poderia facilmente mandar instrucoes ao
banco para que o seu saldo bancario fosse transferido para uma outra conta.
Por isso, o banco precisa de uma garantia de que a mensagem teve origem em
um usu
ario autorizado. Ou seja, a mensagem tem que ser assinada .
Vamos chamar de Cm e Dm as funcoes de codificacao e decodificacao do Mario
e de Ca e Da as funcoes de codificacao e decodificacao do Allan. Seja b um
bloco de mensagem que o Mario deseja mandar para o Allan. Para mandar
uma mensagem assinada, ao inves de Ca (b), o Mario envia
Ca (Dm (b))
Ou seja, primeiro ele decodifica a mensagem como so ele pode fazer, depois ele
codifica o resultado, como so o Allan pode ler. Para ler a mensagem, primeiro o
Allan aplica Da e depois Cm . Observe que Cm e p
ublico. Se a mensagem fizer
sentido, 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...

11.7

Exerccios propostos

Captulo 11: 1, 2, 3, 4, 6.

12

1o trabalho pr
atico

O trabalho tem como objetivo a criacao de dois n


umeros primos grandes (entre
20 e 30 bits). Para isso:
Gere dois n
umeros mpares m e k da magnetude acima, de modo que nao
sejam muito proximos um do outro.
37

Verifique se m, k sao divisveis 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 p
ublica e facilmente quebrada.
O trabalho dever
a ser entregue no dia 06/08/2002
constar de:

(sem falta!) e dever


a

Parte escrita de no m
aximo duas paginas digitadas. Essa parte dever
a conter os resultados do trabalho juntamente com a analise desses
resultados (em especial, se foi facil quebrar a sua chave ou nao).
Codigo impresso comentado . Evitem C+ +, por favor!
Disquete com o executavel do programa. Este tambem pode ser enviado
por e-mail. Lembrem-se que eu posso rodar apenas programas em Delphi
(4.0) ou qualquer outra linguagem que rode nas estacoes do DCC. Entao
evitem artifcios graficos sofisticados...

13
13.1

Razes primitivas
Teste de Lucas

Para determinar se n e primo, podemos verificar se (n) = n 1. Ou seja, se


mdc(a, n) = 1 para todo a menor que n. Isso so e possvel se n e mpar. Logo
precisamos encontrar um jeito de calcular (n) sem fatorar n. Mas ja vimos
que isso e impossvel...
Teorema da raiz primitiva. Se p e um primo, existe b Zn tal que
bp1 1 (mod p)
mas
br \ 1 (mod p)
se r < p 1.
umero k tal que
Em geral, chamaremos de ordem do elemento b em Zn o n
bk 1 (mod n) e br \ 1 (mod n) se r < k. Observe que se n e primo e
1 < b < n, entao a ordem de b e p 1.

38

Teorema de Lagrange. A ordem de b tem que dividir a ordem de U(n), que


e igual a (n).
Logo, dado n mpar, se existe b tal que bn1 1 (mod n) e bt \ 1 (mod n)
se t < n 1 entao n e primo pois teramos n 1 (n) n 1.
De acordo com o teorema da raiz primitiva, se n e primo, tal b sempre existe.
Encontra-lo e uma questao de sorte...
Para aplicar isso `a primalidade, precisamos encontrar uma maneira eficiente de
mostrar que a ordem de um elemento de U(n) e exatamente n 1.
Teste de Lucas. Sejam n impar e 1 b n 1. Se
bn1 1
e
b

n1
p

(mod n)

\ 1 (mod n)

para cada fator primo de n 1, entao n e primo.


Demonstracao: Veja o livro texto pag 168.
Continua... Aguardem!

14

Sistemas de congru
encias

O objetivo dessa secao e estudar a solucao de sistemas de equacoes lineares. A


aplicacao para criptografia e o desenvolvimento de um metodo para partilhar
senhas.

14.1

Equa
c
oes lineares

Ja estudamos o caso de uma equacao linear


ax b

(mod n)

Se a possui um inverso em Zn , entao multiplicando ambos os lados da equacao


acima por :
(ax) b
(mod n)
x b
(mod n)
Em particular, se n e primo e a\ 0
tem solucao.

(mod n), entao a equacao acima sempre

39

Se a nao tem inverso em Zn , entao mdc(a, n) = d 6= 1. Logo, a equacao:


ax ny = b
so tem solucao quando b e divisvel por d.
Suponhamos entao que d divide b. Escreveremos a = da , b = db e n = dn .
Cancelando os ds, chegamos `a seguinte equacao:
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 11 Seja 6x 4 (mod 8). Dividindo pelo mdc(6, 8) = 2, obtemos
3x 2

(mod 4)

Logo a soluca
o procurada e:
x 2 (mod 4)
Mas observe que o m
odulo mudou de 8 para 4... Para consertar isso, vamos
escrever a express
ao acima em uma express
ao de inteiros:
x = 2 + 4k
Duas possibilidades:
k e par. Nesse caso, x 2 (mod 8) e 2 e uma soluca
o.
k e mpar (k = 2m + 1). Nesse caso, x 6

(mod 8) e 6 e outra soluca


o.

Ou seja, uma equaca


o linear possui mais de uma soluca
o.

14.2

Um exemplo astron
omico

Tres satelites passar


ao sobre o Rio essa noite. O primeiro a
` uma hora , o
segundo a
`s 4 horas e o terceiro a
`s 8 horas da manh
a. O primeiro leva 13 horas
para completar uma volta em torno da terra, o segundo 15 horas e o terceiro 19
horas. Determine quantas horas decorrer
ao, a
` partir de meia noite, ate que os
tres satelites passem ao mesmo tempo sobre o Rio.
Montagem matematica: seja x e o n
umero de horas, contadas a partir da meia
noite de hoje, quando os tres satelites passarao juntos sobre o Rio. Ent
ao:
x 1
x 4
x 8

(mod 13)
(mod 15)
(mod 19)
40

Podemos re-escrever a primeira equacao cmo x = 1 + 13t, Substituindo a


primeira equacao na segunda, obtemos:
t 6 (mod 15)
Logo x = 79 + 195u. Substituindo essa equacao na terceira:
u 1 (mod 19)
Logo,
x = 79 + 195u
= 274 + 3705v
Logo os satelites passarao juntos pela primeira vez 274 horas depois da meia
noite de hoje.

14.3

Algoritmo chin
es do resto

Observe que, para resolver o problema dos satelites, resolvemos as duas primeiras
equacoes, obtendo x = 79 + 195u. Isso corresponde a uma nova equacao, x 79
(mod 195). Em geral, a solucao de um sistema de muitas equacoes e obtida
atraves da solucao de varios sistemas de duas equacoes. Desta forma, vamos
analisar apenas o algoritmo correspondente a solucao de um sistema de duas
equacoes.
Considere entao o sistema
x a
x b

(mod m)
(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.


Vamos assumir que mdc(n, m) = 1. Seja entao o inverso de m m
odulo n.
Entao:
y (b a)
(mod n)
y = (b a) + nz
x = a + m(b a) + mnz
x = a(1 m) + mb + mnz
x = an + mb + mnz
Observe que essa solucao e u
nica. Temos entao o seguinte teorema:
41

Teorema Chin
es 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 u


nica em Zn1 ...nk .

14.4

M
odulos n
ao co-primos

Analisaremos esse caso atraves de um exemplo. Considere o sistema:


x 3
x 19

(mod 12)
(mod 8)

Da primeira equacao, obtemos x = 3 + 12y. Substituindo isso na segunda


equacao, temos 12y 16 (mod 8). Dividindo essa equacao por 4, obtemos
3y 4 (mod 2). Logo,
x 3 (mod 24)
Observe que 24 e o mmc entre 8 e 12...

14.5

Partilha de senhas

Suponha que que desejemos partilhar uma senha s entre n pessoas, de modo
que a cada pessoa seja dado um elemento (uma parte) da senha. Esse elemento
e tal que e escolhido de um conjunto S de n pares de inteiros positivos de modo
que, para um inteiro positivo k n previamente escolhido temos:
1. qualquer subconjunto de S com k elementos permite determinar s facilmente;
2. e muito difcil determinar s conhecendo menos de k elementos de S.
Comecamos escolhendo um conjunto L de n inteiros positivos, dois a dois primos
entre si. Seja N o produto dos k menores n
umeros de L e M o produto dos
k 1 maiores n
umeros 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 m
odulo m. Observe que limiar k 1 implica s > m
para qualquer m L. Logo sm < s para qualquer m L.
42

Suponhamos que sejan conhecidos, em um dado momento, t elementos, k.


Denotaremos esses pares por (m1 , s1 ), . . . , (mt , st ). Vamos resolver o sistema de
congruencias:
x s1
(mod m1 )
x s2
(mod m2 )
...
x st
(mod mt )
obtendo x0 como solucao. Pelo teorema chines do resto,
x0 s (mod m1 . . . . .mt )
Por que? Sabemos que, como t k,
m1 . . . . .mt N > s
Pelo teorema chines do resto, o sistema acima tem uma u
nica solucao menor
que m1 . . . . .mt . Mas s tambem e solucao do sistema e s < m1 . . . . .mt . Logo
s = x0 .
Observa
co
es:
possvel escolher os m
1. E
odulos de modo que fique praticamente impossvel
encontrar s atraves de uma busca.
sempre possvel escolher um conjunto L que satisfaca todas as condicoes.
2. E
Exemplo 12 Digamos que em um banco h
a 5 funcion
arios 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 possvel 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. Ent
ao:
S = {(11, 19), (13, 17), (17, 13), (19, 11), (23, 7)}
Se os funcion
arios que possuem as senhas (17, 13) e (23, 7) est
ao no banco, para
obter a senha e preciso resolver o sistema
x 13
x 7

(mod 17)
(mod 23)

A soluca
o e x = 30 + 391k...

14.6

Exerccios propostos

1,2,4
43

15
15.1

L
ogica e ci
encia da computac
ao
Motiva
c
ao

Logica em ciencia da computacao:


Primeira abordagem computaca
o-como-modelo: computacoes sao estruturas matematicas contendo nodos, estados e transicoes e a logica constr
oi
afirmativas sobre essas estruturas.
Segunda abordagem computaca
o-como-deduca
o: estados sao descritos atraves
de um conjunto de proposicoes e mudancas nos estados sao modelados por
mudancas nas proposicoes dentro de uma derivacao (ou seja, por passos
na construcao de uma prova)
A primeira abordagem tem sido amplamente estudada e faz uso de topicos
da matematica como teoria de conjuntos, teoria das categorias, algebras, etc.
para modelar computacoes. Em geral, as estruturas matematicas utilizadas sao
complexas porque devem lidar com o conceito de infinitude.
A segunda abordagem, apesar de lidar com estruturas mais simples (que raramente fazem referencia ao infinito) e de estar mais intimamente ligada `a computacao, tem merecido pouca ou nenhuma atencao nos u
ltimos tempos.
Apenas apos recentes pesquisas na area de teoria de provas e programacao logica
observou-se um crescimento do estudo nessa area de pesquisa.
Logicas expressivas como logica linear (e Forum - linguagem de programacao
baseada em logica linear) passaram a ser utilizadas para modelar estados, transicoes
de estado e algumas primitivas de concorrencia.

15.2

L
ogica Cl
assica

A verdade de uma afirmativa e absoluta e independe da quaisquer pensamento, entendimento ou acao.


Afirmativas sao verdadeiras ou falsas, onde falso e a mesma coisa que nao
verdadeiro.
Isso e conhecido com princpio do meio excludo: pp.

15.3

L
ogica Intuicionista

Em pp nenhuma informacao e dada sobre qual realmente vale:

44

Existem dois n
umeros irracionais x e y tais que xy e racional.
Existem sete 7s consecutivos na representacao decimal do n
umero
.
Afirmativas so sao validas perante a existencia de uma prova ou construca
o
da afirmativa.
Essa logica e de especial interesse porque suas formulas estao em correspondencia 1 a 1 com tipos em -calculus, base das linguagens de programacao funcionais: Lisp, ML, Haskell.
Ainda, logica intuicionista e uma logica de recursos infinitos (mas nao de
conclus
oes infinitas).

15.4

L
ogica linear

Logica linear e uma logica de recursos conscientes.


No caso de transicao de estados:
maior tem valor 1 maior tem valor 2
claro que a proposicao { maior tem valor 1} deve deixar de ser valida
E
no estado 2, enquanto que a proposicao { maior tem valor 2}, que nao
era valida no estado 1, passa a valer no estado 2.
Esse tipo de comportamento nao pode ser descrito em logicas classica ou
intuicionista, apenas em logica linear.

15.5

Linguagens l
ogicas de programa
c
ao - Prolog

Uma definicao comum das cl


ausulas de Horn e dada de acordo com a
seguinte gramatica:
G ::= A|G G
D ::= A|G A|xD

Ou seja, formulas gol sao conjuncoes de formulas atomicas e clausulas de


programas sao da forma:
x1 . . . xm [A1 . . . An A0 ]
Observe que, como implicacao e quantificacao universal nao estao presentes no gol, todas as hipoteses e termos necessarios para completar a
prova devem estar presentes desde o incio do programa: assinaturas e
programas sao globais.
Ou seja, nada de mecanismos para modularizacao ou construtores de dados!
45

15.6

Linguagens l
ogicas de programa
c
ao - -Prolog

As f
ormulas de primeira ordem de Harrop estendem as clausulas de Horn,
uma vez que admitem implicacoes e quantificadores universais no gol:
G ::= A|G G|P G|xG
D ::= A|G A|xD
Deste modo, o programa pode crescer ao longo da prova (modularizacao) e
novas constantes podem ser adicionadas ao programa (abstract datatypes)
Desvantagem: recursos ilimitados para construcao de provas.

15.7

Linguagens l
ogicas de programa
c
ao - Forum

Logica linear nao e uma linguagem abstrata de programacao.


Forum e uma linguagem logica de programacao baseada em logica linear.
: ; ; possui uma prova em Forum se e somente se ! ,
, ? .
Alem de modularizacao e abstracao de dados tambem permite encapsulacao de estado, concorrencia e primitivas de comunicacao e sincronizacao.
Cl
ausulas em Forum possuem a forma:

y (G1 Gm G0 ),

(m 0)

onde G0 , . . . , Gm sao formulas arbitrarias em Forum e denota ou .

16

Algebra
e ci
encia da computac
ao

A principal aplicacao de matematica em ciencia da computacao e na definicao


de sem
antica formal em linguagens de programacao.
Sem
antica e geralmente definida como o estudo da relacao entre palavras

e sentencas de uma linguagem (escrita ou falada) e os seus significados. E


uma area que tem recebido, atraves dos tempos, muita atencao em ling
ustica
e filosofia, que estudam o significado de sentencas na linguagem natural. Uma
segunda area de estudo de sem
antica se concentra no significado de sentencas em
linguagens formais de logica matematica, originalmente projetada para servir
como fundacao da matematica. Esta secao visa discutir, brevemente, topicos
de uma terceira area da sem
antica: aquela que tem por objetivo desenvolver
tecnicas para expressar a sem
antica de linguagens utilizadas para programacao
de computadores. Estaremos especialmente interessados no uso de estruturas
matematicas tais como grupos, domnios e teoria de categorias na descricao de
sem
antica de linguagens imperativas (como o Pascal) e funcionais (como ML,
Haskell).
46

17

Sem
antica

Tradicionalmente, linguagens de computadores tem sido baseadas em uma seq


uencia
de comandos, determinados por sentencas imperativas. Em linguagem natural,
tais sentencas sao aquelas que podem ser encontradas em um livro de receitas:
Bata a clara do ovo ate ficar dura. (1)
Em contraste, sentencas de logica matematica visam estabelecer verdades absolutas:
Quando batida, a clara do ovo fica dura. (2)
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 sem
antica denotacional.
Vejamos um exemplo da sem
antica do comando if. Escreveremos C[] para denotacao de um comando e E[] para denotacao de uma express
ao. Entao temos:
C[if E then C1 else C2 ] = E[E]v.isBool v (v C[C1 ], C[C2 ])
Da mesma forma, podemos escrever a sem
antica do comando while como:
C[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])
Antes de falarmos um pouco sobre esse tipo de sem
antica, vamos responder
`a uma pergunta fundamental: qual e o objetivo de se estudar sem
antica de
linguagens de programacao? Bem, quando essa area surgiu, o objetivo era prover
uma descricao suficientemente precisa para tornar possvel aos implementadores
construir um compilador para a linguagem em questao. Hoje em dia, a enfase
esta em:
1. fornecer uma descricao precisa para os programadores, tornando possvel
que estes facam afirmativas rigorosas sobre o comportamento de programas por eles escritos;
47

2. fornecer ferramentas para os designers de linguagens de programacao, para


que possam sugerir linguagens melhores, confiaveis e com descricoes formais simples.
Ou seja, a grande vantagem e que desenvolve-se um metodo matematico (e portanto formal) que garante corretude tanto de programas quanto da linguagens
desenvolvidas.

18

Sem
antica Denotacional

a sem
E
antica que mapeia construtores sintaticos de programas em valores abstratos (n
umeros, funcoes, etc) que eles denotam. Esses mapeamentos sao
claro
usualmente definidos recursivamente (como no cado do while acima). E
que alguns cuidados devem ser tomados quando trabalhamos com funcoes recursivas. Em especial, para modelar o espaco de todas as funcoes recursivas precisaramos de um conjunto X que contivesse todo o espaco de funcoes
X X. Por questoes de cardinalidade, sabemos que isso e impossvel. Para
lidar com essa dificuldade, foi proposto, em 1969, um modelo para funcoes recursivas X X restritas a funcoes contnuas em X (de acordo com uma certa
topologia).
Esse modelo, chamado de teoria de domnio, e utilizado para descrever a sem
antica
denotacional do -calculus, base de linguagens de programacao funcionais. E,
utilizando o -calculus, podemos facilmente descrever a sem
antica denotacional
de linguagens como o Algol60, base do Pascal.
Outro tipo de sem
antica que tem sido muito estudada e a sem
antica categ
orica.
As ideias basicas desse topico (muito em moda atualmente) sao elegantes e de
facil entendimento para um aluno da graduacao com alguma maturidade na

area de Algebra.

19

Segundo trabalho pr
atico

O segundo trabalho pratico consiste em implementar o algoritmo RSA. Deve


ser apresentado o seguinte:
1. A chave p
ublica (n) criada no TP1, juntamente com o n
umero e tal que
mdc(e, (n)) = 1.
2. Algoritmo para encontrar d, o inverso de e m
odulo (n).
3. Algoritmos de codificacao (incluindo o de particao da mensagem em blocos) e decodificacao.

48

4. Teste em um texto de, no mnimo, 20 linhas. O texto, os blocos e o texto


cifrado dever
ao estar contidos no trabalho.
Como sempre, e necessario um pequeno texto introdutorio de no m
aximo duas
paginas. Dessa vez nao vou cobrar os executaveis...

49

Você também pode gostar