Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
A teoria dos nmeros a parte na matemtica que envolve o estudo dos nmeros inteiros
e suas propriedades. Comeamos explorando a noo de divisibilidade. A diviso de um
nmero inteiro por um nmeros inteiro resulta em um quociente e um resto. Trabalhar
com esses restos conduz a aritmtrica modular.
As ideias desenvolvidas dentro da teoria dos nmeros abrange uma gama de aplicaes
dentro da cincia da computao e da matemtica de um modo geral.
Divisibilidade
a|b
b
=c
a
b + c = as + at b + c = a(s + t)
Se ab$ e $bc, ento, s(b = as) e t(c = bt), assim, c/t = as, portanto c/a = st.
Como a, b, c, s e t so inteiros, s + t, ast e st tambm so. Assim, podemos resumir esses
resultados no primeiro teorema usando a notao da definio ??.
Teorema 1 Sejam a, b e c nmeros inteiros,
1. Se a|b e a|c, ento a|(b + c);
2. Se a|b, ento a|bn para todo inteiro n;
3. Se a|b e b|c, ento a|c.
2
Pela regra 2 do teorema ?? temos que se a|b e a|c, ento a|mb e a|nc para todo inteiro
m e n. Esse fato leva ao primeiro corolrio.
Corolrio 1 (Corolrio) Se a, b e c so nmeros inteiros tal que a|b e a|c, ento a|(mb+
nc) sempre que m e n so nmeros inteiros. (De acordo com a regra 1 e 2 do teorema ??).
Quando um nmero inteiro b dividido por um nmero inteiro positivo a, o resultado
um quociente k. Se a diviso no for exata, h tambm um resto diferente de zero.
a|b
b
b
=k+r
a
a
1.1
Aritmtica Modular
= q1 + q2
=q
m m
m
(1)
3
Definio 3 Se a e b forem nmeros inteiros e m for um nmero inteiro positivo, ento
a congruente a b modulo m se m|a b. Usamos a notao a b(mod m) para indicar
congruncia. Se a e b no forem congruentes a m, escrevemos a 6 b(mod b).
O teorema ?? e a definio ?? diz que se os restos da diviso de dois nmeros inteiros
pelo mesmo nmero inteiro m forem iguais, esses nmeros so congruentes. De acordo
com a equao ??, obtemos o teorema a seguir.
Teorema 4 Considere m como um inteiro positivo. Os nmeros inteiros a e b so
congruentes a m q(a = mq + b).
O conjunto de todos os inteiros congruentes ao modulo m chamado de classe de
congruncia de modulo m.
Considere que a congruente a b modulo m e c congruente a d modulo m, isto ,
a b(mod m) e c d(mod m), sendo m inteiro positivo. Assim, segundo o teorema ??
b = sm + a e d = tm + c, sendo s e t inteiros. Efetuando as operaes b + d e b d obtemos,
b + d = a + c + m(s + t)
(b + d) (a + c) = m(s + t)
b d = (sm + a) (tm + c)
b d = ac + m(at + sc + stm)
bd ac = m(at + sc + stm)
(2)
4
em que k um inteiro nao negativo, a0 , a1 , , ak so nmeros inteiros no negativos
menores que b e ak 6= 0.
A representao de n no Teorema 1 chamada de expanso de n na base b. A expanso
na base b de n indicada por (ak ak1 a1 a0 )b .
Por exemplo, (45)8 representa 481 +580 = 37. Outro exemplo que podemos considerar
a transformao de (11)10 na base 10 para a base 2:
Dividendo
11
5
2
1
Divisor
2=
2=
2=
2=
Quociente
5
2
1
0
Resto
1
1
0
1
2.1
Potenciao Modular
dn = dak1 2
41 +0242 +12+1
311 = 312
5
311 = 32
3 +2+1
311 = 38+2+1
ou ainda, 311 = 38 32 31 . Assim elevando ao quadrado sucessivamente, percebe-se que
32 = 9, 34 = 92 = 81, e 38 = (81)2 = 6561. Logo 311 = 38 32 31 = 6561 9 3 = 177147.
A ideia do algoritmo de potenciao modular encontra sucessivamente d mod m,
2
d mod m, d4 mod m, , d2k1 mod m. E multiplicar esses termos junto com d2j mod
m, onde aj = 1, encontrando o resto do produto quando dividido por m depois de cada
multiplicao.
Para isso, o algoritmo leva em conta que ak dk mod m, pois sabendo que a
d mod m verdade, tem-se que
a = d + sm
a d = sm
ak dk = (a d)(ak1 + ak2 d + + adk2 + dk1 )
(ak dk ) tambm multiplo de m.
ak dk mod m
Por exemplo considere que deseja-se calcular 540 mod 7 tem-se que:
51 mod 7 = 5
52 mod 7 = (51 mod 7)2 mod 7 = 4
54 mod 7 = (52 mod 7)2 mod 7 = 42 mod 7 = 2
58 mod 7 = (54 mod 7)2 mod 7 = 22 mod 7 = 4
516 mod 7 = (58 mod 7)2 mod 7 = 42 mod 7 = 2
532 mod 7 = (516 mod 7)2 mod 7 = 22 mod 7 = 4
Podemos rescrever 540 = 532 58 , pois sabendo que (40)10 = (101000)2 . Logo temos
que a expanso binria do expoente dado por
61 +0262 +1263 +0264 +0265 +0266
540 = 512
540 = 532 58
De acordo com o teorema 1.5 temos que ab mod m = ((a mod m)(b mod m)) mod m.
Portanto,
540 mod 7 = ((532 mod 7) (58 mod 7)) mod 7
540 mod 7 = 4 4 mod 7
540 mod 7 = 16 mod 7 = 2
Vamos simular o algoritmo considerando agora que deseja-se calcular 3644 mod 645,
portanto b = 3, m = 645, e n ser a expanso binrio do valor 644, logo n = 1010000100,
e k ser a quantidade de bits.
Inicialmente x = 1, potencia = 3 mod 645 = 9. No lao de repetio para temos: O
algoritmo produz como resultado 3644 mod 645 = 36. Portanto,
3644 = 3512 3128 34
6
i
i
i
i
i
i
i
i
i
i
=
=
=
=
=
=
=
=
=
=
0
1
2
3
4
5
6
7
8
9
a0
a1
a2
a3
a4
a5
a6
a7
a8
a9
=
=
=
=
=
=
=
=
=
=
0
x=1
potencia = 32 mod 645 =9
0
x=1
potencia = 92 mod 645 = 81
1
x=(181)mod 645=81 potencia = 812 mod 645 = 111
0
x=81 potencia = 1112 mod 645 = 66
0
x=81 potencia = 662 mod 645 = 486
0
x=81 potencia = 4862 mod 645 = 126
0
x=81 potencia = 1262 mod 645 = 396
1 x=(81396)mod 645=471 potencia = 3962 mod 645 = 81
0
x=471 potencia = 812 mod 645 = 111
1 x=(471111)mod 645=36 potencia = 1112 mod 645 = 66
3644 mod 645 = ((3512 mod 645) (3128 mod 645) (34 mod 645)) mod 645
3644 mod 645 = (111 396 81)mod645
3644 mod 645 = 36
Nesta seo sera discutido os nmeros primos, pois esses so essenciais nos sistema de
criptografia. Um nmero primo um nmero inteiro maior que 1 que somente divisvel
por 1 e por ele mesmo.
Tambm sera discutido os mximos divisores comuns de dois nmeros inteiros, bem
como o mnimo mltiplo comum de dois nmeros inteiros.
3.1
Nmeros primos
Por exemplo mostre que 101 primo: Os nicos primos no excedentes a 101 so 2,
3, 5 e 7. Como 101 no divisvel por esses nmeros, temos que 101 primo.
1
O nmero inteiro n composto se e somente se houver um nmero inteiro a, tal que a | n e 1 < a < n.
8
Teorema 9 O teorema do nmero primo
A razo do nmero de primos no excedente a x e
limitante.
x
ln x
O teorema do nmero primo foi demonstrado pela primeira vez em 1896 pelo matemtico
francs Jacques Hadamard e pelo matemtico belga Charles-Jean-Gustave-Nicholas de
la Valle-Poussin, usando a teorema das variveis complexas. Pode-se usar o teorema do
nmero primo para estimar a probabilidade de um nmero escolhido aleatoriamente ser
primo. Usando esse teorema possvel mostrar
que a probabilidade de um nmero inteiro
n
ln n
n ser primo , tambm aproximadamente n . Por exemplo, a probabilidade de um nmero
inteiro prximo de 101000 ser primo aproximadamente ln 1011000 , que aproximadamente
1
.
2300
A fatorao e o teste para verificar se um nmero primo tornaram-se importantes
nas aplicaes da teoria dos nmeros para a criptografia. Isto levou a um grande interesse
em desenvolver algoritmos eficientes para as duas tarefas. H um grande esforo para
fatorar nmeros grandes, especialmente os com o formato k n 1, em que k um inteiro
positivo pequeno e n um nmero inteiro positivo grande, esses nmeros so chamados de
Cunningham.
3.2
O maior nmero inteiro que divide dois nmeros inteiros chamado de mximo divisor
comum desses inteiros.
Considere a e b como nmeros inteiros diferentes de zero. O maior nmero inteiro d,
tal que d|a e d|b chamado de mximo divisor comum de a e b. O mximo divisor comum
de a e b indicado por mdc(a,b).
O mximo divisor comum de dois nmeros inteiros, diferentes de zero, existe porque
o conjunto dos divisores comuns desses inteiros finito. Uma maneira de encontrar o
mximo divisor comum de dois nmeros inteiros encontrar os divisores positivos comuns
a ambos os inteiros e ento pegar o maior divisor. Por exemplo os divisores positivos
comuns de 24 e 36 so 1, 2, 3, 4, 6 e 12. Assim mdc(24,36) = 12.
Quando dois nmeros inteiros no tm divisor positivos comum alm do 1, eles so
relativamente primos. Ou seja os nmeros inteiros a e b so relativamente primos, ou
primos entre si, se o mximo divisor comum deles for 1. Por exemplo 17 e 22 so primos
entre si, pois mdc(17,22) = 1.
Precisamos especificar se cada par de nmeros inteiros em um conjunto de inteiros no
tem um divisor positivo comum alm de 1: Os nmeros inteiros a1 , a2 , , an so pares
relativamente primos, ou primos entre si dois a dois, se mdc(ai, aj) = 1 sempre que 1 i
< j n.
Outra maneira de encontrar o mximo divisor comum de dois nmeros inteiros usar
a fatorao desses inteiros. Suponha que as fatoraes em nmeros primos dos inteiros a e
b, diferente de zero, so
a = pa11 pa22 pann ,
em que cada expoente um nmero inteiro no negativo e todos os primos que aparecem na
fatorao em nmeros primos de a ou b esto inclusos nas duas fatoraes, com expoente
zero se necessrio. Ento, mdc(a,b) dado por
mdc(a, b) = p1
pm in(an , bn )n
em que min(x, y) representa o menor entre os nmeros x e y. Para declarar que esta
frmula para mdc(a,b) vlida, devemos mostrar que o nmero inteiro do lado direito
divide a e b e que nenhum inteiro maior divide. Este inteiro divide a e b porque a potncia
de cada primo na fatorao no excede a potncia deste primo na fatorao de a nem de b.
Alm disso, nenhum nmero inteiro maior pode dividir a e b, porque os expoentes dos
nmeros primos nesta fatorao no podem ser aumentados e nenhum primo pode ser
includo.
Exemplo: Como a fatorao em nmeros primos de 120 e 500 ,
120 = 23 3 5
500 = 22 53
o mximo divisor comum
mdc(120, 500) = 2min(3,2) 3min(1,0) 5m in(1, 3) = 22 30 51 = 20
A fatorao em nmeros primos tambm pode ser usada para encontrar o mnimo
mltiplo comum de dois nmeros inteiros.
3.3
mmc(a, b) = p1
n ,bn )
pmax(a
n
em que max(x, y) indica o mximo de dois nmeros x e y. Esta frmula vlida porque
um mltiplo comum de a e b tem, pelo menos, max(ai , bi ) fatores de pi em sua fatorao
em nmeros primos e o mnimo mltiplo comum no tem outros fatores primos alm
daquele em a e b.
Exemplo: O mnimo mltiplo comum de 23 35 72 e 24 33 dado por
mmc(23 35 72 , 24 33 ) = 2max(3,4) 3max(5,3) 7max(2,0) .
H um teorema d relao entre o mximo divisor comum e o mnimo mltiplo comum
de dois nmeros inteiros.
Teorema 10 Considere a e b como nmeros inteiros positivos. Ento
ab = mdc(a, b) mmc(a, b)
10
Para demonstra esse teorema vamos considera a fatorao, como visto anteriomente
sabendo que
max(a1 ,b1 ) max(a2 ,b2 )
n ,bn )
mmc(a, b) = p1
p2
pmax(a
n
min(a1 ,b1 ) min(a2 ,b2 )
p2
mdc(a, b) = p1
pnmin(an ,bn )
e
a = pa11 pa22 pann ,
temos
(pa11 pa22 pann )(pb11 pb22 pbnn )
max(a1 ,b1 ) max(a2 ,b2 )
p2
= (p1
n ,bn )
pmax(a
)(p1
n
= p1
n ,bn )
pmin(a
),
n
3.4
O algoritmo de Euclides
o mtodo mais eficiente para encontrar o mximo divisor comum. Foi nomeado assim
em homenagem ao matemtico grego Euclides.
Computar o mximo divisor comum diretamente ineficiente. Isto , para encontrar a
fatorao em primos um processo demorado. Um mtodo eficiente de fazer isso utilizar
o algoritmo de Euclides. O algoritmo de Euclides baseado no resultado a seguir sobre
mximos divisores comuns e no calculo do mod: Considere a = bq + r, em que a, b, q e r
so nmeros inteiros. Ento
mdc(a, b) = mdc(b, r).
Assim o problema reduzido utilizando divises sucessivas. Para um melhor entendimento
vamos calcular mdc(91, 287). Primeiro dividimos o maior dos inteiros (287) pelo menor
(91) e obtemos
287 = 91 3 + 14.
Qualquer divisor de 91 e 287 deve tambm ser divisor de 287 91 3 = 14. Alm disso,
qualquer divisor de 91 e 14 dever ser tambm divisor de 287 = 91 3 + 14. Assim, o
mximo divisor comum de 91 e 287 o mesmo que o mximo divisor comum de 91 e 14.
Isto significa que o problema de encontrar o mdc(91,287) foi reduzido ao problema de
encontrar mdc(91,14).
Podemos, ento prosseguir com as divises sucessivas. Dividimos 91 por 14 para obter
91 = 14 +7
Como qualquer divisor comum de 91 e de 14 tambm divide 91 14 6 = 7 e qualquer
divisor comum de 14 e de 7 divide 91, temos que mdc(91, 14) = mdc(14, 7). Continuando
a diviso de 14 por 7 obtemos
14 = 7 2.
11
Conclumos que mdc(14, 7) = 7. Alm disso, como mdc(287, 91) = mdc(91, 14) =
mdc(14, 7) = 7.
Exemplo: Encontre o mximo divisor comum de 414 e 662 mdc(414, 662).
662 = 414 1 + 248
414 = 248 1 + 166
248 = 166 1 + 82
166 = 82 2 + 2
82 = 2 41 + 0.
Portanto mdc(414, 662) = mdc(82, 41) = 2.
Algoritmo 3 Algoritmo de Euclides
mdc(a: inteiro, b: inteiro)
xa
yb
enquanto y <> 0 faa
r mod(a, b)
xy
yr
fim enquanto
retrun x
. mdc(a,b) x
12
Congruncia
13
A teoria dos nmeros tem muitas aplicaes, por exemplo ela desempenha um papel
fundamental na criptografia, de modo que a informao no pode se facilmente entendida
sem um conhecimento especial.
Teoria dos nmeros a base de muitos mtodos de criptografia, usado pela primeira
vez h milhares de anos, e amplamente utilizado at o sculo 20. As mensagens eram
encriptografadas mudando cada letra para uma letra diferente, ou cada bloco de letras
para um bloco diferente de letras.
Teoria dos nmeros tambm importante na criptografia de chave pblica, um tipo de
criptografia inventado na dcada de 1970. Na criptografia de chave pblica, saber como
criptografar a mensagem no significa que saber como descriptografar. O sistema de
chave pblico mais amplamente utilizado o criptossistema RSA, que encripta mensagens
utilizando exponenciao modular, onde o mdulo o produto de dois nmeros primos
grandes.
Neste capitulo sera apresentado a criptografia clssica bem como o processo de criptoanalise e a criptografia de chave pblica (criptossistema RSA).
5.1
Criptografia Clssica
Um dos primeiros usos de criptografia foi por Julius Caesar. Ele fez uma mensagem
secreta deslocando cada trs letras do alfabeto (as trs ltimas letras do alfabeto corresponderiam as trs primeiras). Por exemplo, utilizando este esquema a letra B enviado
como a letra E e X corresponder a letra A. Este um exemplo de encriptao, isto , o
processo de fazer uma mensagem secreta.
Para expressar processo de encriptao, utilizado por Caesar, matematicamente,
primeiro substituiremos cada letra por um elemento de Z26 , isto , cada letra agora
se representado como um nmero como mostra a Tabela 1. Podemos representa o mtodo
de encriptao de Caesar por uma funo f (p), onde p um inteiro no negativo, p 25,
f (p) = (p + 3)mod26.
Na verso encriptada da mensagem, a letra representado por p substitudo com a
letra representado por (p + 3)mod26.
Table
0 1 2
A B C
13 14 15
N O P
1: Letras do
3 4 5
D E F
16 17 18
Q R S
alfabeto e sua
6 7 8
G H I
19 20 21
T U V
posio.
9 10
J K
22 23
W X
11 12
L M
24 25
Y Z
14
Agora calculamos o nmero correspondente por meio da funo (p + 3)mod26, isto ,
f (18) = (18 + 3)mod26 = 21
f (14) = (14 + 3)mod26 = 17
f (2) = (2 + 3)mod26 = 5
f (17) = (17 + 3)mod26 = 20
Agora temos,
2117517202017
Substituindo os nmeros por letras, temos a mensagem encriptografa: "VRFRUUR".
Para recuperar a mensagem original, isto , para descriptografa a mensagem pelo
mtodo de Caesar, asta calcular f 1 a funo inversa.
f 1 (p) = (p 3)mod26.
Descriptografando a mensagem do exemplo anterior "VRFRUUR" temos
f 1 (21) = (21 3)mod26 = 18
f 1 (17) = (17 3)mod26 = 14
f 1 (5) = (5 3)mod26 = 2
f 1 (20) = (20 3)mod26 = 17
Existem vrios caminhos para generalizar o mtodo de Csar. Por exemplo, em vez
de transferir o equivalente numrico de cada letra por 3, podemos deslocar o equivalente
numrico de cada letra por k, de modo que
f (p) = (p + k)mod26,
f 1 (p) = (p k)mod26.
O nmero inteiro k chamado de chave.
5.2
Criptoanlise
15
teste novamente. E s consideramos o valor de k quando a mensagem descriptografada
fizer sentido.
Exemplo: Suponha que temos a mensagem ZNK KGXRE HOXJ MKZ CUXS. Qual a
mensagem original? Primeiro verificamos a frequncia de cada letra no texto, e percebemos que a letra mais frequente K, ento suponhamos que K equivale a E no texto
descriptografado. Sabendo que E = 4 e K = 10 temos
10 = (4 + k)mod 26
k = 6.
Portanto a mensagem descriptografa THE EARLY BIRD GETS THE WORM. Como a
mensagem faz sentido consideramos que nossa hiptese esta correta.
5.3
Criptossistema RSA
O sistema conhecido como RSA foi criado por trs pesquisadores do M.I.T (Ronald
Rivest, Adi Shamir e Leonard Adleman). O criptossistema RSA baseado em potenciao
modular do produto de dois nmeros primos grande, o que pode ser feito rapidamente
com o Algoritmo de Potenciao Modular. Cada indivduo tem uma chave de codificao
que consiste em um mdulo n = pq, em que p e q so nmeros primos grandes, com 200
dgitos cada, e um expoente e que relativamente primo a (p 1)(q 1). Para produzir
uma chave que possa ser usada na decodificao, dois nmeros primos grandes devem
ser encontrados. O produto desses nmeros primos n = pq, com aproximadamente 400
dgitos, no pode ser fatorado em uma quantidade razovel de tempo. Esta uma razo
importante porque a decodificao no pode ser feita rapidamente sem uma chave de
decodificao separada.
No mtodo de codificao RSA, as mensagens so transcrita em sequncia de nmeros
inteiros. Esses nmeros inteiros so agrupados na forma de inteiros grandes, cada um
representando um bloco de letras. A codificao feita transformando o nmero inteiro
M , que representa o texto total (a mensagem original), em um nmero inteiro C, que
representa o texto codificado (a mensagem codificada), usando-se a funo
C = M e mod n.
16
Por questes praticas este exemplo considera nmeros primos pequeno ,em vez de
primos com 100 dgitos. Exemplo: Codifique a mensagem STOP usando o criptossistema
RSA com p = 43 e q = 59.
n = pq = 43 59 = 2537
mdc(exp, (p 1)(q 1)) = mdc(13, 42 58) = 1
Agora transcrevemos as letras equivalente a STOP para nmeros
1819 1415
Codificamos cada bloco,
181913 mod 2537 = 2081
141513 mod 2537 = 2182
Assim a mensagem encriptografada 2081 2182.
17
ANEXO A
int mod(int a, int b){
int q = 0; /* Quociente*/
int r = abs(a);
while(r>=b){
r = r-b;
q = q+1;
}
if(a<0 && r>0){
r = b - r;
q = -(q+1);
}
return r;
}
int* exp_base(int n, int b, int* p){ /*Funo pra converter a base do numero*/
/* b: base
n: nmero na base 10 a ser expandido
p: ponteiro para armazenar o valor do contador k*/
int q = n;
int k = 0;
int *a = (int*) malloc(n*sizeof(int)); /*aloca dinmicamente um vetor*/
while(q!=0){
a[k] = mod(q,b);
q/=b;
k++;
}
*p = k; /*Conteudo de p recebe o valor de k*/
return a;
}
int PotModular(int b, int *n, int m, int k){
/*b^n mod m
onde n a expanso da potncia em binario
k: tamanho do vetor n ou quantidade de bits */
int x=1;
int pot = mod(b,m);
int i;
for(i=0; i<=k-1; i++){
if (n[i]==1){
x = mod((x*pot),m);
}
pot= mod((pot*pot),m);
}
return x;
}
int mdc(a,b){
int x = a;
18
int y= b;
while(y!=0){
int r = mod(x,y);
x =y;
y = r;
}
return x;
}