Você está na página 1de 117

Criptograa e Seguranca

Paulo J. Almeida

Departamento de Matematica da Universidade de Aveiro


18 de Julho de 2012

Conte
udo
1 Preliminares
1.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Vocabulario . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4
4
6

2 Complexidade
12
2.1 Estimativas de tempo . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 P versus NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Criptograa Sim
etrica
3.1 Introducao . . . . . . . . . . . . . . . . . . . . .
3.2 Cifra de Substituicao . . . . . . . . . . . . . . .
3.3 Criptoanalise classica . . . . . . . . . . . . . . .
3.4 Criptoanalise da Cifra de Substituicao . . . . .
3.5 Cifra de Deslocamento . . . . . . . . . . . . . .
3.6 Algoritmo de Euclides e inversos mod n . . . .
3.7 Cifra Am . . . . . . . . . . . . . . . . . . . . .
3.8 Funcao de Euler . . . . . . . . . . . . . . . .
3.9 Criptoanalise da Cifra Am . . . . . . . . . . .
3.10 Cifra de Vigen`ere . . . . . . . . . . . . . . . . .
3.11 Criptoanalise da cifra de Vigenere . . . . . . . .
3.12 Cifra de Hill . . . . . . . . . . . . . . . . . . . .
3.13 Ataque `a cifra de Hill . . . . . . . . . . . . . . .
3.14 Cifra de Permutacao . . . . . . . . . . . . . . .
3.15 Cifras de Fluxo . . . . . . . . . . . . . . . . . .
3.16 Cifra de Fluxo baseada no LFSR . . . . . . . .
3.17 Criptoanalise da cifra de uxo baseada no LFSR

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

18
18
19
20
22
25
26
32
33
34
36
37
42
43
43
44
45
46

4 Criptograa de chave p
ublica
4.1 Teorema Chines dos Restos . . . . . . . . . .
4.2 Lagrange, Euler e Fermat . . . . . . . . . . .
4.3 Razes primitivas . . . . . . . . . . . . . . . .
4.4 Exponenciacao modular rapida . . . . . . . .
4.5 RSA . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 Ataque do expoente p
ublico pequeno .
4.6 Resduos quadraticos . . . . . . . . . . . . . .
4.7 Algoritmo de Tonelli-Shanks . . . . . . . . . .
4.8 Cifra de Rabin . . . . . . . . . . . . . . . . .
4.9 Protocolo Die-Hellman . . . . . . . . . . . .
4.9.1 Ataque do homem no meio . . . . . . .
4.10 Sistema ElGamal . . . . . . . . . . . . . . . .
4.10.1 Ataque da repeticao da chave efemera .
4.11 Sistema Merkle-Hellman . . . . . . . . . . . .
5 Primalidade
5.1 Teste de Fermat . . . . . .
5.2 Teste de Miller-Rabin . . .
5.3 Teste de Solovay-Strassen
5.4 Teste n 1 de Lucas . . .
6 Factorizac
ao
6.1 Metodo p 1 de Pollard
6.2 Metodo ro de Pollard . .
6.3 Factorizacao de Fermat .
6.4 Crivo quadratico . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

49
49
53
53
54
55
56
57
65
66
69
70
71
72
72

.
.
.
.

75
76
77
79
80

.
.
.
.

82
82
83
85
90

7 Logaritmo Discreto
94
7.1 Enumeracao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.2 Algoritmo passos de bebe passos de gigante . . . . . . . . . . . 95
7.3 Calculo de ndices . . . . . . . . . . . . . . . . . . . . . . . . . 96
8 Assinaturas digitais
8.1 Introducao . . . . . . . .
8.2 Assinatura RSA . . . . .
8.3 Assinatura ElGamal . .
8.3.1 Forjar assinaturas

. . . . . .
. . . . . .
. . . . . .
ElGamal

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

99
99
100
101
102

8.4

8.3.2 Falhas de protocolo . . . . . . . . . . . . . . . . . . . . 104


DSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

9 Func
oes de sntese
9.1 Ataque do Aniversario . . . . . . . . . . . . . . . . . .
9.2 Funcoes de sntese comprovadamente seguras . . . . . .
9.2.1 Funcao de sntese Chaum-van Heijst-Ptzmann
9.2.2 VSH . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

109
. 110
. 111
. 113
. 115

Captulo 1
Preliminares
1.1

Introduc
ao

Alice deseja enviar uma mensagem a Bob sem que Olga a perceba, no caso
desta interceptar a mensagem. Com este objectivo, Alice pode cifrar a
mensagem antes de a enviar a Bob. Bob recebe a mensagem e decifra-a.
Critografia e a ciencia que estuda estas duas accoes. Se Carla intercepta
a mensagem cifrada, pode tentar quebrar a cifra e ler a mensagem. Criptoanalise e a ciencia em que se estuda metodos ou processos para quebrar
cifras. Criptologia engloba tanto a Criptograa como a Criptoanalise.
Durante este curso iremos aprender varios sistemas criptogracos, alguns dos quais sao correntemente usados nas diversas comunicacoes de mensagens (militares, espionagem, n
umeros de PIN, conversacoes telefonicas,
transaccoes bancarias, Internet, e-mail, etc.). Ao mesmo tempo, Estudaremos metodos para quebrar certos cifras e a razao pela qual alguns dos sistemas criptogracos sao considerados inquebraveis. Iremos tambem estudar
funcoes de sntese (que sao uma especie de impressao digital), assinaturas
e identicacao digital e diversos protocolos de seguranca. As ferramentas

essenciais deste curso serao Teoria dos N


umeros e algumas nocoes de Algebra.

1.2

Vocabul
ario

Mensagem original (ou texto plano) - Mensagem que se pretende tornar secreta, por exemplo OLA;
Mensagem cifrada - A mensagem secreta que se obtem apos ter sido
4

cifrada, por exemplo ROD (usando o sistema criptograco utilizado por J


ulio
Cesar);
Emissor - Quem envia a mensagem;
Receptor - Quem recebe a mensagem;
Cifrar - Transformar a mensagem original numa mensagem cifrada;
Decifrar - Transformar a mensagem cifrada na mensagem original;
Cifra - Conjunto de procedimentos e conjunto de smbolos (letras, nomes,
sinais, etc) usados para cifrar uma mensagem;
Codificacao simples - Transformar a mensagem original em n
umeros ou
bits1 . Por exemplo, se zermos a transformacao 2 0, A 1, ..., Z 26
entao a palavra OLA passava a 15 12 1. Usualmente utiliza-se o codigo
ASCII, que representa cada smbolo por 8 bits (byte): A 01000001, B
01000010, a 01100001, 0 00110000, ? 00111111, etc;
Descodificar - Transformar n
umeros ou bits em mensagens;
Monogramica (ou monogr
afica) - Uma cifra que traduz um a um os
smbolos do texto original em texto cifrado;
Poligramica (ou poligrafica - Uma cifra que traduz varios smbolos do
texto original, em grupo e ao mesmo tempo, em texto cifrado;
Cifra de transposicao ou permutac
ao - Uma cifra que re-arranja e/ou
permuta as letras, smbolos ou bits do texto plano;
Cifra de substituicao - Uma cifra que substitui letras, smbolos ou bits
por outros sem lhes alterar a ordem;
Sistema criptografico - Conjunto de procedimentos para cifrar e decifrar
uma mensagem;
Chave - Num sistema criptograco, corresponde a um nome, uma palavra,
uma frase, etc, que permite cifrar ou decifrar uma mensagem.
Sistema criptografico de chave simetrica - Necessita de uma chave secreta
partilhada pelo emissor e pelo receptor. O emissor e o receptor tem que
concordar com uma chave antes do incio da transmissao da mensagem;
Sistema criptografico de chave p
ublica - Cada utilizador tem uma chave
para cifrar que e p
ublica e foi publicada e uma chave para decifrar que e
secreta (normalmente so utilizadores autorizados tem a chave secreta);
Assinatura - Processo pelo qual o emissor pode certicar o receptor da sua
identidade. Nos sistemas de chave p
ublica este processo evita que utilizadores
inimigos enviem mensagens enganosas;
1

bits e o plural de bit - binary digit

o processo pelo qual o inimigo (quem nao esta autorizado


Criptoanalise - E
a decifrar a mensagem) tenta transformar a mensagem cifrada na mensagem
original.
Os processos para cifrar e decifrar devem ser faceis de aplicar para os
utilizadores autorizados mas deve ser difcil um inimigo ou utilizador nao
autorizado decifrar as mensagens. Teoria dos n
umeros e uma excelente fonte
de problemas com alguns mecanismos faceis e alguns mecanismos difceis,
portanto aparenta ser uma optima area para ser usada em criptologia.

1.3

Hist
oria

A historia da criptograa aparenta ter sido iniciada no antigo Egipto, cerca


de 1900 a.C. pelo arquitecto Khnumhotep II, na tempo do farao Amenemhet
II. O escriba de Khnumhotep II substituiu alguns trechos e palavras de documentos importantes por smbolos estranhos de modo a dicultar que ladroes
chegassem a tesouros reportados nesses documentos.
Alguns seculos mais tarde aparecem outros metodos de transmitir mensagens de modo secreto, por exemplo na Mesopotamia, Assria, China, India
e Egipto. Exemplos desses metodos sao:

Tatuagens com mensagens na cabeca de escravos. Infelizmente


era preciso esperar o cabelo crescer antes de enviara mensagem.
A decifracao era feita no barbeiro;
Marcas na madeira de placas de cera. As marcas eram escondidas
com cera nova. Para decifrar, bastava derreter a cera;
Mensagens dentro do estomago de animais de caca.
Este tipo de ocultacao de mensagens toma o nome de esteganograa e
distingue-se da criptograa porque neste caso a mensagem nao e alterada e
baseia-se no facto de um interceptor nao saber da existencia da mensagem.
Quando se utiliza criptograa, sabe-se que esta a ser enviada uma mensagem,
mas o seu sentido e obscuro. Como exemplos modernos de esteganograa,
temos a ocultacao de mensagens em imagens digitais, atraves da alteracao de
alguns bits em cada componente da cor e marcas ocultas nas notas bancarias

para evitar a sua falsicacao. Apesar da sua aparente semelhanca com criptograa, os metodos de esteganograa sao muito distintos dos utilizados em
criptograa e nao serao estudados durante este curso.
Cerca de 600 a.C., os hebreus criaram alguns sistemas criptogracos
aquando da escrita do livro de Jeremias, nomeadamente o Atbash, que consiste de uma troca simples entre as letras do hebraico, por ordem inversa.
O primeiro sistema criptograco de uso militar tera sido o Scytale ou
Bastiao de Licurgo, utilizado pelo general espartano Pasanius, em 475 a.C..
O scytale consiste em escrever a mensagem numa tira estreita de couro ou
pergaminho quando esta esta enrolada em torno de um bastiao de madeira.
A mensagem original e escrita no sentido do comprimento do bastiao e, portanto, quando a tira e desenrolada obtem-se a mensagem cifrada. Para voltar
a obter a mensagem original, deve-se enrolar outra vez a tira num bastiao
com o mesmo permetro e forma. Este e um exemplo de uma cifra de transposicao. Esta e ainda a ideia de muitas tecnicas populares actuais.
Na India, por volta de 300 a. C., apareceu um livro intitulado Arthasastra, atribudo a Kautilya, onde sao referidos os primeiros metodos de
criptoanalise. Estes processos sao recomendados para diplomatas. O famoso
Kama Sutra de Vatsayana, menciona a criptograa nas artes (yogas) 44 e
45, de entre a sua lista de 64 artes e ciencias que todos devem saber (Part I,
captulo 3, http://www.sacred-texts.com/sex/kama/index.htm).
J
ulio Cesar utilizou uma cifra que consistia em substituir cada letra pela
letra que se encontra tres posicoes depois no alfabeto. Este e um exemplo de
uma cifra de deslocamento.
No seculo VIII, al-Khalil, escreveu o livro Kitab al Muamma (que signica O livro das mensagens criptogracas). Infelizmente este livro desapareceu. al-Khalil decifrou um criptograma bizantino antigo quando supos,
correctamente, que o incio do criptograma era Em nome de Deus. Este
metodo, conhecido como o metodo da palavra provavel, foi usado para ajudar a decifrar mensagens cifradas pelo Enigma, durante a Segunda Guerra
Mundial. Cerca de 100 anos depois, al-Kindi, escreveu um outro livro sobre
criptograa, ainda existente, intitulado Risalah Istikhraj al Muamma (Escritos sobre a decifracao de mensagens criptogracas). al-Kindi considerou
analises estatsticas para quebrar cifras, processo ainda usado na actualidade.
Em 1466, Leon Battista Alberti, escreveu um ensaio, no qual menciona
uma cifra em disco, criando a nocao de cifra poli-alfabetica.
Giovan Batista Belaso inventou, em 1553, um sistema criptograco polialfabetico a que actualmente se chama cifra de Vigen`ere, por ter sido fal7

samente atribudo a Blaise de Vigen`ere durante o seculo XIX. Este sistema


tem uma chave e uma serie de diferentes cifras de Cesar e foi considerado
indecifravel durante muito tempo, porem e facilmente quebrado utilizando
analise estatstica. Em 1585, Vigen`ere criou a nocao de auto-chave, processo
ainda hoje utilizado, por exemplo no sistema DES.
Durante os seculos XVIII e XIX, assistiu-se `a proliferacao de Cameras
Escuras, gabinetes de espionagem, onde se utilizava a criptologia para ns
militares e ns civis, nomeadamente para decifrar mensagens diplomaticas.
Em Viena, e criada uma das mais ecientes cameras escuras, onde se decifrava cerca de 100 mensagens diplomaticas internacionais, por dia. Franca,
Inglaterra e Alemanha tambem criam os seus centros de criptoanalise, tendo
empregado diversos matematicos famosos.
Durante a Primeira Guerra Mundial assiste-se a uma proliferacao de sistemas criptogracos para usos militares. Como exemplos, temos o Playfair e
o ADFGVX.
A cifra inglesa Playfair (guerra dos Boers e Primeira Guerra Mundial)
consiste em escrever a palavra chave (que nao pode ter letras repetidas)
seguida das restantes letras num quadrado cinco por cinco. Se considerarmos
a palavra chave Palmerston, obtemos
P
R
B
H
V

A L
S T
C D
IJ K
W X

M E
O N
F G
Q U
Y Z

Para cifrar um par de letras, forma-se um rectangulo do qual as letras sao


vertices. A mensagem cifrada consiste dos outros dois vertices. Por exemplo,
PI e cifrado em AH. Se duas letras estao na mesma linha (resp. mesma
coluna), toma-se as letras seguintes, e. g. EU e cifrado em NZ e ME ca EP.
Se a mensagem original tiver duas letras iguais consecutivas, coloca-se um X
a separa-las, e. g. a mensagem ASSIM passa a ser AS XS IM.
A cifra alema ADFGVX (Primeira Guerra Mundial), utiliza uma tabela
xa para efectuar uma substituicao da mensagem original. Cada letra e
transformada no par de letras correspondente `a linha e coluna onde a letra
original esta.

A
D
F
G
V
X

A
K
9
K
E
8
U

D F
Z W
B 6
7 J
V Y
O D
4 I

G
R
C
P
3
H
S

V X
1 F
L 5
G X
A N
0 2
T M

Assim, ACHTUNG e primeiro cifrado em GV DG VG XV XA GX FV.


Esta e a parte da substituicao da cifra.
Em seguida, efectua-se um deslocamento, utilizando uma chave sem letras repetidas, neste caso a chave e DEUTSCH. Constroi-se uma tabela em
que, na primeira linha esta a palavra chave, na segunda linha o numeral correspondente `a ordem alfabetica de cada letra da primeira linha e, nas linhas
seguintes e escrita a mensagem que resultou do processo de substituicao efectuado anteriormente. A mensagem cifrada e obtida, escrevendo as letras das
colunas seguindo a ordem indicada na segunda linha.
D E U T S C H
2 3 7 6 5 1 4
G V D G V G X
V X A G X F V
No nosso exemplo, a mensagem cifrada correspondente `a mensagem original ACHTUNG e GF GV VX XV VX GG DA.
A grande fraqueza da cifra ADFGVX e usar uma tabela xa para a parte
da substituicao. A alternancia entre substituicoes e deslocacoes permite obter
cifras bastante seguras, sendo este processo a base do DES (Data Encryption
Standard) e do AES (Advanced Encryption Standard).
Apos esta guerra comecam a aparecer as primeiras maquinas cifrantes que
usam rotores mecanicos. Em 1923, Arthur Scherbius, desenvolve o ENIGMA,
talvez a mais famosa maquina cifrante. O ENIGMA e utilizado pelos alemaes
durante a Segunda Guerra Mundial para comunicacoes com os submarinos
e para deslocar as suas tropas. O ataque criptoanaltico ao ENIGMA foi
iniciado pelo matematico polaco Marian Rejewski (juntamente com Jerzy
Rozycki e Henryk Zygalski), que apos a Polonia ter sido invadida conseguiu
passar a sua informacao para Franca. Esta informacao acabou por chegar
a Inglaterra, onde Turing e o seu grupo de criptoanalticos trabalhavam.
Estes conseguiram decifrar o ENIGMA o que permitiu descobrir planos mil-

itares dos alemaes e o envio mensagens enganosas para os alemaes localizados


em Franca, conseguindo assim facilitar a invasao por Dunquerque. Japao
tinha a Maquina P
urpura, cujo sistema foi quebrado por equipa liderada
por William Frederick Friedman (criador da palavra criptoanalise). O sistema criptograco utilizado pelos EUA durante Segunda Guerra Mundial,
encontra-se ainda classicado.
Nos anos 60, o Dr. Horst Feistel, liderando um projecto de pesquisa no
IBM Watson Research Lab, desenvolve a cifra Lucifer. Em 1974, a IBM apresenta Lucifer ao NBS (National Bureau of Standards), o qual, apos algumas
alteracoes, adopta esta cifra como cifra padrao nos EUA, criando assim o
DES (Data Encryption Standard). Este sistema foi criticado desde o incio
por varios investigadores e acabou por ser quebrado, usando forca bruta, em
1997.
Whiteld Die e Martin Hellman publicam, em 1976, o artigo New Directions in Cryptography, onde introduzem a ideia de criptograa de chave
p
ublica, neste caso baseada no problema do logaritmo discreto, e avancam
com a ideia de autenticacao utilizando funcoes de um so sentido (one way
functions). Inspirados por aquele artigo, Ronald L. Rivest, Adi Shamir e
Leonard M. Adleman, desenvolvem uma cifra de chave p
ublica, que tambem
pode ser usada para assinaturas digitais, baseada no contraste entre a diculdade de factorizar n
umeros grandes e a relativa facilidade de identicar
n
umeros primos grandes. Este sistema passou a ser conhecido como RSA
e foi patenteado. Em 1984, Taher Elgamal desenvolve o sistema ElGamal
tambem utilizando o problema do logaritmo discreto.
Nos anos 90 aparecem diversos sistemas criptogracos em particular o
IDEA (International Data Encryption Algorithm) de Xuejia Lai e James
Massey, que pretende ser um substituto do DES. A criptograa quantica e
introduzida em 1990. O PGP (Pretty Good Privacy) de Phil Zimmermann,
desenvolvido em 1991, ainda e um dos programas mais utilizados para proteger a privacidade do e-mail e dos arquivos guardados no computador do
utilizador. Nas versoes mais recentes do PGP, e utilizado o sistema ElGamal.
Em 1997, o NIST solicitou propostas para a substituicao do DES. Em 2000, o
NIST escolheu o Rijndael (de entre os nalistas estava MARS da IBM, RC6
de RSA Laboratories, Rijndael de Joan Daemen e Vincent Rijmen, Serpent
de Anderson, Biham e Knudsen, e o twosh de Bruce Schneier e sua equipa),
para ser o novo AES (Advanced Encryption Standard). So em 2005 e que
o NIST (National Institute of Standards and Technology), que substituiu o
NBS, publica um plano de transicao com a duracao de dois anos, para que as
10

agencias governamentais deixassem de utilizar o DES e passassem a utilizar


o AES.

11

Captulo 2
Complexidade
Tudo indica que seja praticamente impossvel criar cifras absolutamente in mais razoavel e suciente para o uso concreto, requerer que
quebraveis. E
um sistema seja praticamente inquebravel por um inimigo, isto e, requerer
que um sistema demore demasiado tempo (usando milhoes de computadores
super-potentes) a ser quebrado. Durante este curso, iremos ver o que isto
signica em casos concretos.

2.1

Estimativas de tempo

Um topico que e central em complexidade e a estimacao do n


umero de
operacoes bit necessarias para efectuar operacoes aritmeticas ou calculos
matematicos num computador. Vamos comecar com algumas nocoes basicas.
Um inteiro n pode ser escrito em qualquer base b com b > 0 inteiro.
Usamos a notacao (dk1 dk2 d1 d0 )b para signicar que
n = dk1 bk1 + dk2 bk2 + d1 b + d0 ,
onde os algarismos di sao smbolos que podem tomar valores entre 0 e b
1 e dk1 e nao nulo. Esta representacao e u
nica dependendo apenas da
base escolhida. Quando a base e 10 escreve-se apenas dk1 dk2 d1 d0 , sem
indicacao da base, para representar n. Por exemplo,

5476 = 5 103 + 4 102 + 7 10 + 6,


12

(10110)2 = 1 24 + 0 23 + 1 22 + 1 2 + 0 = 22.
As fraccoes podem tambem ser representadas em qualquer base, usandose neste caso o ponto utuante para distinguir a parte inteira da parte fraccionaria, i. e.
n = (dk1 dk2 d1 d0 .d1 d2 dm )b ,
se
n=

k1

dj b j .

j=m

Diz-se que um inteiro n tem k algarismos, quando escrito na base b, se


n = (dk1 dk2 d1 d0 )b . Note-se que
[
]
log n
n
umero de algarismos = [logb n] + 1 =
.
log b
Estamos em condicoes de calcular o tempo necessario para fazer certas
operacoes aritmeticas. Comecaremos com a adic
ao. Os computadores trabalham no sistema binario, portanto iremos fazer as nossas operacoes neste
sistema, da o nome de operacoes bit (binary digit). Consideremos a seguinte
adicao:

1111

1111000
+0011110
10010110
Suponhamos que ambos os n
umeros tem k bits, adicionando-se zeros `a
esquerda caso necessario. Vejamos em detalhe em que consiste esta adicao.
Basicamente, temos que repetir k vezes os seguintes passos:
1. Se ambos os bits numa coluna sao zero e nao ha transporte. Neste caso,
mete-se um zero e se estivermos na coluna k + 1 o processo termina.
Se nao estivermos na coluna k + 1 passa-se `a coluna seguinte;
2. Se ou (a) ambos os bits sao zero e ha transporte, ou (b) um dos bits e
zero e o outro e um e nao ha transporte, entao mete-se um 1 e passa-se
`a coluna seguinte; se estivermos na coluna k + 1 o processo termina.
13

3. Se ou (a) ambos os bits sao um e nao ha transporte, ou (b) um dos bits


e zero e o outro e um e ha transporte, entao mete-se um 0, mete-se um
transporte na coluna seguinte e passa-se `a frente;
4. Se ambos os bits sao um e ha transporte, mete-se um 1, mete-se um
transporte na coluna seguinte e passa-se `a frente.
Chamamos operacao bit a uma implementacao deste processo. Portanto,
adicionar dois n
umeros com k bits demora k + 1 operacoes bit. Iremos ver
como descobrir o n
umero de operacoes bit de varias outras operacoes aritmeticas. O tempo que um computador demora a efectuar uma certa tarefa
e, essencialmente, proporcional ao n
umero de operacoes bit. No entanto, a
constante de proporcionalidade (o n
umero de nano-segundos que um computador demora a fazer uma operacao bit) depende do computador em particular. Quando falarmos de estimar o tempo que se demora a efectuar certa
tarefa estaremos a falar do n
umero de operacoes bit requeridas.
Vejamos agora o processo de multiplicar um n
umero n com k bits por um
n
umero m com l bits. Por exemplo,
11101
1101
00011101
01110100
11101000
101111001
Obtemos, no maximo l linhas, onde cada linha consiste de uma copia de
n deslocada para a direita uma certa distancia. Portanto, cada linha tem
no maximo k + l 1 bits. Temos assim que fazer, no maximo l 1 adicoes,
de inteiros com k + l 1 bits. Portanto, temos (l 1)(k + l) operacoes bit.
Note-se que neste calculo, negligenciamos o tempo necessario para deslocar
para a direitae o tempo de acesso `a memoria. No entanto, este tempo e
considerado irrisorio, quando comparado a um grande n
umero de operacoes
bit. Assim, so nos interessa majorar o n
umero de operacoes bit. Convem
tambem simplicar ao maximo as nossas estimativas. Por exemplo, se k l,
podemos estimar
tempo(k-bit l-bit) 2kl 2k 2
14

Denic
ao. Sejam f, g, duas funcoes aritmeticas, i. e. funcoes cujo conjunto
de partida consiste dos inteiros positivos e o conjunto de chegada consiste
dos n
umeros reais (por vezes, o conjunto de chegada sera o conjunto dos
complexos). Se g 0, escrevemos
f (n) = O(g(n))
se existir C > 0 e um inteiro n0 tal que
f (n) Cg(n)
para qualquer n n0 . Mais geralmente, se existe C > 0, tal que
f (n1 , . . . , nk ) Cg(n1 , . . . , nk )
para ni s sucientemente grandes, escrevemos
f = O(g).
Exemplo. Se f = a0 + a1 d + + ad nd e um polin
omio de grau d, com
d
ad > 0 entao f = O(n ).
Exemplo. log n = O(n ), para qualquer > 0.
Exemplo. O n
umero de algarismos de n na base b e O

log n
log b

)
= O(log n).

Exemplo. Tempo para efectuar a adic


ao de n com m, com m n, e
O(log n).
Exemplo. Tempo para efectuar o produto de n por m, com m n, e
O(log2 n).
Note-se que os dois exemplos anteriores referem-se aos processos descritos
para efectuar estas operacoes. Claramente, existem outros processos para
efectuar as operacoes mencionadas, podendo estes demorar mais, ou menos
tempo. Por exemplo, poderamos ter multiplicado m por n, fazendo a adicao
de n com ele proprio, m 1 vezes. Ha processos de multiplicacao rapida que
permitem multiplicar dois n
umeros m n em
O(log n(log log n)(log log log n))
operacoes bit. A cada procedimento que nos permite efectuar certa operacao
(ou resolver certa questao), chamamos algoritmo.
O algoritmo da divisao ensinado no ensino basico tambem tem O(kl)
operacoes bit, quando se divide um n
umero com k bits por um com l bits.
15

Exemplo. Converter o inteiro n com k bits para a sua representacao na base


10. Dividir n por 1010 demora O(4k) e temos que efectuar
[
]
log n
+1
log 10
divisoes (tantas quantos os dgitos na base 10 de n). Obtemos assim
tempo(converter n para decimal) = O(k 2 ) = O(log2 n).
Exemplo. Converter o inteiro n com k bits para a sua representacao na base
b. Suponhamos que b tem l bits. Dividir n por b demora O(lk) e temos que
efectuar
[
]
log n
+1
log b
divisoes (tantas quantos os algarismos na base b de n). Obtemos assim
tempo(converter n para a base b) = O(lk)O(k/l) = O(k 2 ) = O(log2 n).
Exemplo. Tempo requerido para obter n!. Temos que efectuar O(n) (mais
exactamente n 2) multiplicac
oes, cada uma entre um n
umero com, no
maximo, nk bits e outro, com, no maximo, k bits. Portanto, cada multiplicacao demora O(nk 2 ) operac
oes bit. Assim,
tempo(calcular n!) = O(n2 k 2 ) = O(n2 log2 n).

2.2

P versus NP

Denic
ao. Um algoritmo para efectuar uma computacao (ou responder a
uma questao), envolvendo inteiros n1 , . . . , nr de k1 , . . . , kr bits, respectivamente, e um algoritmo de tempo polinomial se existirem inteiros d1 , . . . , dr
tais que
n
umero de operacoes bit = O(k1d1 krdr )
Denic
ao. Uma operacao (questao, computacao, tarefa) e de tempo polinomial se existir um algoritmo de tempo polinomial para a efectuar (resolver).
Dizemos que estas operacoes estao na classe P.
Denic
ao. Se a prova de uma resposta, dada a uma questao, pode ser efectuada em tempo polinomial, dizemos que esta questao esta na classe NP.
16

Claramente, temos que PNP.


Exemplo. Questao: factorizar o n
umero n. Se alguem conseguir resolver a
questao, basta publicar essa factorizac
ao n = m1 mt . Para verificarmos
se a resposta esta correcta, basta multiplicarmos os inteiros m1 , . . . , mt . Esta
verificacao pode ser efectuada em tempo polinomial (t 1 multiplicac
oes,
onde t e muito pequeno). Portanto, a factorizac
ao esta na classe NP. No
entanto, ainda nao foram descobertos algoritmos para efectuar factorizac
oes
em tempo polinomial. Assim, a factorizacao pode nao estar na classe P.
Um dos problemas do milenio consiste em provar ou provar que e falsa,
a armacao P = N P .

17

Captulo 3
Criptograa Sim
etrica
Criptograa e a arte e ciencia de enviar mensagens secretas. O emissor usa
uma chave para cifrar a mensagem, esta e enviada ate ao receptor que usa
outra chave para a decifrar. Escrevendo letras e sinais de pontuacao como
n
umeros, podemos assumir que a mensagem a enviar e um inteiro P que
e codicado num outro inteiro C. O problema consiste em inventar chaves
que tornem impossvel ou computacionalmente irrealizavel que o inimigo (ou
qualquer pessoa que nao queiramos que leia a mensagem) decifre a mensagem interceptada. Muitas vezes a criptograa usa chaves secretas que so
sao conhecidas pelo emissor e pelo receptor. Se o inimigo descobre a chave
de cifrar e intercepta a mensagem cifrada, ele pode conseguir descobrir a
chave de decifrar e recuperar a mensagem original. Este foi o metodo que os
matematicos ingleses usaram para decifrar o Enigma, usado pelos alemaes
para comunicar entre si e, em particular, com os submarinos, na segunda
guerra mundial.
Neste captulo iremos estudar alguns exemplos classicos de criptosistemas.

3.1

Introduc
ao

Normalmente, o primeiro passo para inventar um criptosistema consiste em


codicar a mensagem, i. e. transformar a mensagem original em n
umeros
ou bits. Este processo pode ser efectuado letra a letra, e. g. A 0, ...,
Z 25, ou em pares de letras, e. g. dadas duas letras correspondentes a
x, y {0, 1, . . . , 25}, o par de letras ira corresponder ao inteiro
26x + y {0, 1, . . . , 675}.
18

Por exemplo, o par EUcorresponde ao n


umero 125. A codicacao pode
tambem ser feita a n-uplos de letras, n 3, fazendo-se a correspondencia:
se a letra i corresponde ao n
umero xi entao o n-uplo 1 n corresponde
a inteiro
26n1 x1 + 26xn1 + xn .
Durante este curso, usaremos essencialmente as codicacoes
1. A 0, ..., Z 25;
2. 2 0, A 1, . . . , Z 26;
3. 2 0, A 1, . . . , Z 26, 0 27, . . . 9 36;
4. O codigo ASCII.
Denic
ao. Um criptosistema e um quntuplo (P, C, K, E, D) que satisfaz as
seguintes condicoes:
1. P e o conjunto nito dos textos planos possveis;
2. C e o conjunto nito dos textos cifrados possveis;
3. K e o conjunto nito das chaves;
4. Para cada K K existe uma regra para cifrar eK E e uma regra para
decifrar correspondente dK D, tais que eK : P C, dK : C P
e dK (eK (x)) = x, para qualquer x P.

3.2

Cifra de Substituic
ao

As cifras de Substituicao sao utilizadas `a centenas de anos. Actualmente


ainda aparecem em Criptogramas nas revistas recreativas. Como o proprio
nome indica, estas cifras consistem em substituir cada letra por uma outra
letra. Nestas cifras nao e necessario codicar a mensagem primeiro.
Cifra (Substituicao). Seja m um inteiro positivo. Sejam P = C = Zm .
O conjunto das chaves K consiste de todas as permutac
oes dos n
umeros
0, 1, . . . , m 1. Sejam x P e y C. Para cada permutac
ao K,
definimos
e (x) = (x)
19

d (y) = 1 (y),

onde 1 e a permutacao inversa de .


Estas cifras tem m! chaves possveis. No caso de m = 26, obtemos mais
de 4.0 1026 chaves, o que torna impraticavel a busca exaustiva da chave de
um sistema criptograco deste tipo. Mais tarde veremos como quebrar estes
sistemas.
Exerccio. Considere m = 26. Sabendo que foi utilizada uma cifra de substituicao, decifre a seguinte mensagem na lngua inglesa.
MGZVYZLGHCMHJMYXSSFMNHAHYCDLMHA

3.3

Criptoan
alise cl
assica

Suponhamos que se deseja decifrar uma mensagem, mas nao se sabe a chave.
Para isso usa-se criptoanalise. Diz-se quebrar o codigo ao processo de descobrir como decifrar mensagens num dado criptosistema sem se saber as
chaves. Para quebrar um codigo necessitamos de dois tipos de informacao:
que tipo de criposistema temos, e quais sao as chaves desse criptosistema.
Iremos assumir que o tipo de criptosistema a quebrar e conhecido (princpio
de Kerckho) e iremos so estudar como descobrir as chaves.
Ha varios nveis de ataques a um criptosistema, os mais comuns sao
S
o mensagem cifrada(ciphertext-only): O oponente possui uma mensagem cifrada;
Texto plano conhecido (known plaintext): O oponente possui um texto
plano e a mensagem cifrada correspondente;
Texto plano escolhido (chosen plaintext): o oponente obteve acesso temporario `a maquina de cifrar. Portanto pode escolher um texto plano e
cifra-lo.
Mensagem cifrada escolhida (chosen ciphertext): O oponente obteve
acesso temporario `a maquina de decifrar. Portanto pode escolher uma
mensagem cifrada e decifra-la.

20

Letra
Probabilidade
Letra
Probabilidade
Letra
Probabilidade
Letra
Probabilidade

E
0.127
H
0.061
W
0.023
K
0.008

T
0.091
R
0.060
F
0.022
J
0.002

A
0.082
D
0.043
G
0.020
X
0.001

O
0.075
L
0.040
Y
0.020
Q
0.001

I
0.070
C
0.028
P
0.019
Z
0.001

N
0.067
U
0.028
B
0.015

S
0.063
M
0.024
V
0.010

Figura 3.1: Distribuicao de Frequencias na Lngua Inglesa


Letra
Probabilidade
Letra
Probabilidade
Letra
Probabilidade
Letra
Probabilidade

A
0.146
D
0.050
H
0.013
J
0.004

E
0.126
M
0.047
G
0.013
X
0.002

O
0.107
T
0.047
Q
0.012
K
0.001

S
0.078
U
0.046
B
0.010
W
0.001

R
0.065
C
0.039
F
0.010
Y
0.001

I
0.062
L
0.028
V
0.009

N
0.051
P
0.025
J
0.004

Figura 3.2: Distribuicao de Frequencias na Lngua Portuguesa


Normalmente, e prefervel usar textos planos sem espacos nem pontuacao,
tornando o criptosistema mais seguro.
Muitas tecnicas de criptoanalise utilizam as propriedades estatsticas de
uma lngua. Nas guras 3.1 e 3.2 estao representadas as frequencias relativas
das lnguas Ingles e Portugues, respectivamente. Por vezes temos tambem de
usar as frequencias relativas de duas ou tres letras consecutivas (digramas e
trigramas). Os digramas mais frequentes na lngua inglesa sao: TH, HE, IN,
ER, AN, RE, ED, ON, ES, ST, EN, AT, TO, NT, HA, ND, OU, EA, NG, AS,
OR, TI, IS, ET, IT, AR, TE, SE, HI e OF. Os trigramas mais frequentes na
lngua inglesa sao: THE, ING, AND, HER, ERE, ENT, THA, NTH, WAS,
ETH, FOR e DTH.

21

3.4

Criptoan
alise da Cifra de Substituic
ao

Vamos complicar um pouco e analisar como se pode quebrar a cifra de substituicao. Considere a mensagem cifrada
YIFQFM ZRWQFY VECFMD ZPCVMR ZWNMDZ VEJBTX
CDDUMJ NDIFEF MDZCDM QZKCEY FCJMYR NCWJCS
ZREXCH ZUNMXZ NZUCDR JXYYSM RTMEYI FZWDYV
ZVYFZU MRZCRW NZDZJJ XZWGCH SMRNMD
HNCMFQ CHZJMX JZWIEJ YUCFWD JNZDIR
A seguinte tabela apresenta a analise de frequencia desta mensagem
cifrada
Letra
Frequencia
Letra
Frequencia
Letra
Frequencia

A
0
J
11
S
3

B
1
K
1
T
2

C
15
L
0
U
5

D
13
M
16
V
5

E
7
N
9
W
8

F
11
O
0
X
6

G
1
P
1
Y
10

H
4
Q
4
Z
20

I
5
R
10

Como o Z aparece signicativamente mais vezes que qualquer outra letra,


podemos conjecturar que dK (Z) = e. As outras letras que aparecem pelo
menos de 9 vezes sao M, C, D, F, J, R, Y, N e sera de esperar que estas
letras sejam obtidas a partir de t, a, o, i, n, s, h, r, mas por termos um texto
tao pequeno, as frequencias nao variam de modo suciente para nos dar a
correspondencia correcta.
Nesta altura, e aconselhavel considerar digramas, especialmente aqueles
que contem a letra Z. Verica-se que os digramas DZ e ZW aparecem quatro
vezes cada, que os digramas NZ e ZU aparecem tres vezes cada e que os digramas RZ, HZ, XZ, FZ, ZR, ZV, ZC, ZD, ZJ aparecem duas vezes cada. Como
ZW aparece quatro vezes, WZ nunca aparece e W nao e das letras que mais
aparecem, podemos conjecturar que dK (W ) = d. Como DZ aparece quatro
vezes e ZD aparece duas vezes, podemos esperar que dK (D) {r, s, t}, mas
nao conseguimos, de uma maneira clara, prever qual das tres possibilidades
e a correcta.
22

Assumindo dK (W ) = d, verica-se que os u


nicos digramas com W no
m, que aparecem mais que uma vez sao ZW e RW. Entre os digramas mais
frequentes na lngua inglesa, os u
nicos que terminam em d sao ed e nd, donde
somos levados a conjecturar que dK (R) = n.
Antes de continuarmos a nossa analise, vejamos quais sao os digramas que
mais aparecem na mensagem cifrada. Alem dos digramas DZ e ZW tambem
MD e MR aparecem quatro vezes cada, e, alem de NZ e ZU, tambem CD, CH,
FM, IF e NM aparecem tres vezes. Atendendo aos digramas mais frequentes
na lngua inglesa podemos inferir que dK (M ) {a, i, n, o, s} e dK (R)
{n, r, s, t}. Mais, como NM e NZ sao frequentes, entao provavelmente temos
dK (N M ) {ha, hi}.
Au
ltima armacao permite-nos conjecturar que dK (N ) = h e dK (M )
{a, i}.
Vejamos como ca a frase se efectuarmos as substituicoes conjecturadas:
-----end - - -----e----n
YIFQFM ZRWQFY VECFMD ZPCVMR
-----h------e---e---CDDUMJ NDIFEF MDZCDM QZKCEY
en - - - e-h--e
he - - - n
-----ZREXCH ZUNMXZ NZUCDR JXYYSM
e---e- ne - nd
he - e - - ed - - ZVYFZU MRZCRW NZDZJJ XZWGCH
-h-----e--- ed - - ----dHNCMFQ CHZJMX
JZWIEJ YUCFWD

edh - - e
-----ZWNMDZ VEJBTX
-----n
h-d--FCJMYR NCWJCS
n----- ed - - RTMEYI FZWDYV
- - nh - SMRNMD
- he - - n
JNZDIR

A sequencia ne - nd sugere que devemos substituir C por a o que implica


que dK (M ) = i. Donde

23

-----i
end - - --a-ie - a - in
YIFQFM ZRWQFY VECFMD ZPCVMR
a---ih----i - ea - i
-e-a-CDDUMJ NDIFEF MDZCDM QZKCEY
en - - a e - hi - e
he - a - n
-----i
ZREXCH ZUNMXZ NZUCDR JXYYSM
e---eineand
he - e - - ed - a ZVYFZU MRZCRW NZDZJJ XZWGCH
- hai - a-e-i- ed - - --a-dHNCMFQ CHZJMX
JZWIEJ YUCFWD

edhi - e
-----ZWNMDZ VEJBTX
-a-i-n
had - a FCJMYR NCWJCS
n-i--- ed - - RTMEYI FZWDYV
- inhi SMRNMD
- he - - n
JNZDIR

Das vogais mais frequentes so nos falta determinar a letra que corresponde a o. Sabemos que esta letra e muito comum, portanto sera aceitavel
supor que e uma das letras D, F, J, Y. Mas D, F, J sao facilmente eliminadas senao provocavam sequencias de muitas vogais no texto plano. Conjecturamos entao que dK (Y ) = o. Quando se faz esta substituicao, obtem-se
as sequencias a-ion o que sugere a terminacao ation muito comum em ingles.
Assim, dK (J) = t.
o----i
end - - o
--a-ie - a - in
YIFQFM ZRWQFY VECFMD ZPCVMR
a - - - it
h----i - ea - i
-e-a-o
CDDUMJ NDIFEF MDZCDM QZKCEY
en - - a e - hi - e
he - a - n
t - oo - i
ZREXCH ZUNMXZ NZUCDR JXYYSM
e-o-eineand
he - ett
- ed - a ZVYFZU MRZCRW NZDZJJ XZWGCH
- hai - a - eti ted - - t
o-a-dHNCMFQ CHZJMX
JZWIEJ YUCFWD

edhi - e
--t--ZWNMDZ VEJBTX
- ation
hadta FCJMYR NCWJCS
n-i-o- ed - o RTMEYI FZWDYV
- inhi SMRNMD
the - - n
JNZDIR

Ja tnhamos reparado que dK (D) {r, s, t}. Atendendo `a sequencia dthe, faz sentido considerar que dK (D) = s. Das letras mais frequentes so nos
sobram F e r. Donde dK (F ) = r.

24

o - r - ri
end - ro
- - aris
e - a - in
YIFQFM ZRWQFY VECFMD ZPCVMR
ass - it
hs - r - r
iseasi
-e-a-o
CDDUMJ NDIFEF MDZCDM QZKCEY
en - - a e - hi - e
he - asn
t - oo - i
ZREXCH ZUNMXZ NZUCDR JXYYSM
e - ore ineand
hesett
- ed - a ZVYFZU MRZCRW NZDZJJ XZWGCH
- hair a - eti ted - - t
o - a - ds
HNCMFQ CHZJMX
JZWIEJ YUCFWD

edhise
--t--ZWNMDZ VEJBTX
ration
hadta FCJMYR NCWJCS
n-i-oredso RTMEYI FZWDYV
- inhis
SMRNMD
thes - n
JNZDIR

Agora, facilmente se obtem


Our friend from Paris examined his empty glass with surprise, as
if evaporation had taken place while he wasnt looking. I poured
some more wine and he settled back in his chair, face tilted up
towards the sun

3.5

Cifra de Deslocamento

Nesta subseccao, apresentamos as cifras de deslocamento, da qual o sistema


criptograco utilizado por J
ulio Cesar e um exemplo. A base desta cifra,
assim como de outras cifras que estudaremos posteriormente, e a aritmetica
modular.
Denic
ao. Sejam a e b inteiros e n um inteiro positivo. Se n | (a b),
dizemos que a e congruente com b e escrevemos
ab

mod n

Cifra (Deslocamento). Seja m um inteiro positivo. Sejam P = C = K = Zm .


Para 0 K m 1, x P e y C definimos
eK (x) x + K

mod m

dK (y) y K

mod m

25

A cifra de Cesar e uma cifra de deslocamento, com K = 3 e m = 23. O


ROT-13, actualmente utilizado online, em newsgroups e usenet, para ocultar
mensagens ofensivas, respostas a puzzles, etc., e outro exemplo de uma cifra
de deslocamento, neste caso com K = 13 e m = 26. Note-se que, neste caso
eK (eK (x)) = x.
As cifras de deslocamento sao exemplos de cifras de substituicao.
As cifras de deslocamento sao muito inseguras, porque ha somente m
chaves possveis, e m e normalmente muito pequeno. Uma busca exaustiva
da chave quebra rapidamente um destes sistemas criptogracos.
Exerccio. A seguinte mensagem foi cifrada com uma cifra de deslocac
ao
com m = 27. Decifre-a.
OCUAE SCMRUMLQLDQSFCMZOM

3.6

Algoritmo de Euclides e inversos mod n

Antes de vermos mais sistemas criptogracos, necessitamos de alguns resultados elementares da Teoria dos N
umeros.
Denic
ao. Sejam a e b dois inteiros tais que pelo menos um deles e nao
nulo. Chamamos maximo divisor comum ao maior elemento do conjunto dos
divisores comuns de a e b e denotamos este elemento por (a, b).
Sejam a e b dois inteiros positivos. Pelo algoritmo da divisao, existem
dois inteiros q0 e r0 , tais que
a = q0 b + r0 , com 0 r0 < b
Se r0 = 0 podemos utilizar o algoritmo da divisao para os inteiros b por r0 .
Entao existem q1 e r1 tais que
b = q1 r0 + r1 , com 0 r1 < r0
Procedendo desta forma obtemos uma sequencia de inteiros nao negativos
r0 , r1 , . . . , rn , tais que r0 > r1 > > rn 0. Note que este processo tem
de terminar ao m de um n
umero nito de passos e que o u
ltimo resto, que
denotamos por rk+1 , e nulo.

26

Teorema 3.1. Se a e b sao dois inteiros positivos e rk e o u


ltimo resto nao
nulo obtido pelo algoritmo de Euclides, entao rk = (a, b). Mais, o algoritmo
de Euclides permite encontrar inteiros u e v tais que
au + bv = (a, b)
Demonstrac
ao: O algoritmo de Euclides pode ser esquematizado pelo
seguinte sistema de equacoes:

a = bq0 + r0

b
= r 0 q1 + r 1

r 0 = r 1 q2 + r 2
(3.1)
..

rk2 = rk1 qk + rk

r
=r q
k1

k k+1

Seja d = (a, b). Vamos provar por inducao que d|ri e d|ri+1 , para todo
o 0 i k 1. Como d|a e d|b, temos d|(a bq0 ), i.e., d|r0 . Como
d|b e d|r0 entao d|(b r0 q1 ) = r1 . Agora, suponhamos que d|ri e d|ri+1 ,
queremos provar que d|ri+1 e d|ri+2 . Usando a hipotese de inducao, obtemos
que d|(ri ri+1 qi+2 ). Mas ri ri+1 qi+2 = ri+2 . Portanto d|ri+2 .
Acabamos de provar que d|ri para todo 0 i k. Em particular, d|rk .
Como d, rk > 0, temos d rk .
Reciprocamente, a u
ltima equacao em (3.1) e o facto de rk = 0, diz-nos
que rk |rk1 . Usando a pen
ultima equacao, obtemos rk |rk2 . Por inducao,
conclumos que rk |ri , para qualquer 0 i k. Usando a segunda equacao,
temos rk |b e usando a primeira, rk |a. Logo, rk |d. Portanto, rk = d.
Agora, provamos a segunda parte do teorema. Seja r2 = a e r1 = b.
Sabemos que
ri = ri2 ri1 qi ,
(3.2)
para qualquer 0 i k. Vamos provar por inducao que, para qualquer
0 i k, existem inteiros ui e vi tais que ri = ui a + vi b. Como r0 = a bq0 ,
o resultado e valido para i = 0. Suponhamos, por hipotese de inducao que o
resultado e verdadeiro para i e para i 1. Entao
ri+1 = ri1 ri qi+1
= ui1 a + vi1 b (ui a + vi b)qi+1
= (ui1 ui qi+1 )a + (vi1 vi qi+1 )b
= ui+1 a + vi+1 b
27

Portanto, para qualquer 0 i k, ri = ui a + vi b. Em particular, existem


inteiros u e v, tais que rk = ua + vb.
2

Exemplo. Seja a = 543 e b = 431. A seguinte tabela esquematiza o algoritmo de Euclides para calcular d = (a, b) e descobrir u e v tais que
au + bv = 1.
i
qi
ri
ui
vi

543
1
0

431
0
1

0
1
112
1
1

1
3
95
3
4

2
1
17
4
5

3
5
10
23
29

4
1
7
27
34

5
1
3
50
63

6
2
1
127
160

Entao (a, b) = 1 e 127a 160b = 1. Mais, para cada 2 i k


ri = aui + bvi .
Teorema 3.2. Suponhamos que a > b. Entao
tempo(determinar (a, b) usando o algoritmo de Euclides) = O(log3 a).
Demonstrac
ao: O algoritmo de Euclides consiste em efectuar sucessivas divisoes, onde os sucessivos restos formam uma sequencia estritamente
decrescente. Portanto, para estimar o n
umero de operacoes bit, precisamos
de saber quantas divisoes e necessario efectuar. Primeiro, vamos provar que
ri+2 < 12 ri :
Se ri+1 12 ri , entao como ri+2 < ri+1 , obtemos ri+2 < 12 ri .
Se ri+1 > 12 ri , entao a divisao seguinte, no algoritmo de Euclides, e
ri = ri+1 + ri+2 .
Portanto, ri+2 = ri ri+1 < 12 ri .
Acabamos de provar que em cada dois passos do algoritmo de Euclides
o resto e pelo menos reduzido a metade, donde temos no maximo 2[log2 a]
divisoes. Como cada divisao envolve n
umeros menores ou iguais a a, o n
umero
de operacoes bit por divisao e O(log2 a). Portanto, o algoritmo de Euclides
demora
O(log3 a)
28

operacoes bit.

Denic
ao. Sejam a e b inteiros tais que pelo menos um deles e nao nulo. Se
(a, b) = 1 entao dizemos que a e b sao primos entre si.
Teorema 3.3. Se (n, a) = 1 e n|ab, entao n|b.
Demonstrac
ao: Pelo teorema 3.1, se (n, a) = 1 entao existem inteiros u
e v, tais que nu + av = 1, donde nbu + abv = b. Como n|ab, obtemos n|b. 2

Teorema 3.4. Se (a, n) = 1 e ab ac mod n, entao b c mod n. Em


geral, se (a, n) = d e ab ac mod n ent
ao
n
b c mod .
d
Demonstrac
ao: Suponhamos que (a, n) = d e ab ac mod n. Entao
existe um inteiro k tal que ab = ac + kn. Sejam
a
n
a1 = , n 1 = .
d
d
Claramente, a1 e n1 sao inteiros e (a1 , n1 ) = 1. Dividindo ambos os membros
de ab = ac + kn por d, obtem-se a1 (b c) = kn1 . Donde, a1 | kn1 . Como
(a1 , n1 ) = 1, temos a1 | k. Portanto, k = a1 k1 , para algum inteiro k1 . Assim,
b c = k1 n1 , ou seja n1 | (b c). Portanto, b c mod nd .
2

Teorema 3.5. Sejam a e b inteiros nao nulos e d = (a, b). Se d - c ent


ao a
equacao
ax + by = c
(3.3)
nao tem solucoes inteiras. Se d|c, a equac
ao tem uma infinidade de soluc
oes
inteiras. Se x = x0 , y = y0 e uma soluc
ao de (3.3), entao todas as soluc
oes
de (3.3) sao dadas por
b
d
a
y = y0 t
d

x = x0 + t

29

onde t e um inteiro.
Demonstrac
ao: Como d|a e d|b, temos d|(ax + by) para quaisquer inteiros x e y. Portanto, se c = ax + by, entao d|c. Donde, se d - c, (3.3) nao
tem solucoes inteiras. Agora, se d|c, existe um inteiro e tal que c = de. Pelo
teorema 3.1, existem inteiros u e v, tais que
au + bv = d.
Multiplicando por e, obtemos a(ue) + b(ve) = de = c. Portanto, a equacao
(3.3) tem pelo menos uma solucao. Seja (x0 , y0 ) uma solucao de (3.3) e t um
inteiro qualquer. Entao
(
)
(
b
a)
a x0 + t
+ b y0 t
= ax0 + by0 = c.
d
d
O que prova que a equacao (3.3) tem uma innidade de solucoes.
Falta-nos ainda provar que qualquer solucao de ax + by = c e da forma
descrita no teorema. Suponhamos que (x1 , y1 ) e outra solucao. Entao
a(x1 x0 ) + b(y1 y0 ) = c c = 0.
Donde

a
b
(x1 x0 ) = (y1 y0 ),
d
d

(3.4)

o que implica que


(
Como
que

a b
,
d d

b a
| (x1 x0 ).
d d

)
= 1, temos

b
| (x1 x0 ). Portanto, existe um inteiro t, tal
d

b
x1 = x0 + t .
d
Substituindo em (3.4), obtemos
a b
b
t = (y1 y0 ),
d d
d
donde

a
y1 = y0 t .
d
Portanto, qualquer solucao de (3.3) e forma acima descrita.

30

Teorema 3.6. A congruencia


ax b

mod n

(3.5)

tem solucoes se e so se d | b, onde d = (a, n). Se d | b entao a soluc


ao e u
nica
n
mod . Se (a, n) = 1 entao (3.5) tem uma soluc
ao que e u
nica mod n.
d
Demonstrac
ao: Se x0 e uma solucao da equacao (3.5) entao existe um
inteiro y0 tal que
ax0 = b + ny0 ,
donde a equacao
ax ny = b

(3.6)

tem solucao. Reciprocamente, se (x0 , y0 ) e uma solucao de (3.6) entao


ax0 ax0 ny0 b

mod n

e, portanto, (3.5) tem solucao. Acabamos de provar que (3.5) tem solucoes
se e so se (3.6) tem solucoes e a partir de uma solucao de (3.6) obtemos
uma solucao de (3.5). Pelo teorema 3.5, (3.6) tem solucoes se e so se d | b.
Portanto, (3.5) tem solucoes se e so se d | b.
Suponhamos agora que (3.6) tem solucoes e seja (x0 , y0 ) uma solucao.
Pelo teorema 3.5 qualquer solucao de (3.6) e da forma
n
a
x = x0 + t , y = y 0 t ,
d
d
onde t e um inteiro. Portanto, qualquer solucao de (3.5) e da forma
x = x0 + t
Como
x0 + t

n
x0
d

n
d

mod

n
,
d

n
entao todas as solucoes de (3.5) sao congruentes com x0 mod , e portanto,
d
n
a solucao de (3.5) e u
nica mod .
d
A u
ltima parte do teorema resulta imediatamente das duas primeiras
partes.
2

31

Denic
ao. Sejam a e n inteiros tais que (a, n) = 1. Ao u
nico inteiro, que e
solucao da equacao
ax 1 mod n
chamamos inverso de a mod n e denota-mo-lo por a1 mod n.
Como o processo para escrever (a, b) como combinacao linear de a e b
e dado pelo algoritmo de Euclides, tambem este processo demora O(log3 a)
operacoes bit. Em particular obtemos:
Corol
ario 3.7. Dado a, n inteiros, com n > 1 e (a, n) = 1. Entao
tempo(determinar a1 ) = O(log3 a).
Exemplo. Como (543, 431) = 1 e 127 543 160 431 = 1, entao o inverso
de 543 mod 431 e 127 e o inverso de 431 mod 543 e 383.

3.7

Cifra Am

Nesta subseccao, apresentamos outro caso especial da cifra de substituicao,


conhecido como cifra am. Este tipo de criptosistema utiliza funcoes ans,
i. e. funcoes da forma f (x) = ax + b. Mais uma vez utilizamos congruencias
para denir as regras para cifrar e para decifrar. Dado m > 1 inteiro, a, b
Zm , queremos que a regra para cifrar e( x) (da cifra am com a chave (a, b))
seja da forma
e(x) ax + b mod m.
Note-se que, para podermos ter uma regra para decifrar e necessario que
e(x) seja injectiva. Pelo teorema 3.6, e(x) e injectiva se e so se (a, m) = 1.
Sabemos tambem que se (a, m) = 1 entao a tem inverso mod m.
Cifra (Am). Seja m um inteiro positivo. Sejam P = C = Zm e K =
{(a, b) Z2m | (a, m) = 1}. Sejam x P e y C ent
ao definimos
ea,b (x) ax + b
e

da,b (y) a1 (y b)

32

mod m

mod m

3.8

Func
ao de Euler

Denic
ao. Seja n 1. O n
umero de inteiros positivos menores ou iguais a
n que sao primos com n e denotado por (n). Esta funcao de n e chamada
funcao de Euler
Assim, o conjunto das chaves K tem m(m) elementos. Recordamos
agora os seguinte resultados sobre a funcao .
Teorema 3.8. A funcao (n) e multiplicativa.
Demonstrac
ao: Sejam m e n inteiros positivos tais que (m, n) = 1.
Vamos meter os primeiros mn inteiros numa tabela com m colunas e n linhas.
1
m+1
2m+1
..
.

2
m+2
2m+2
..
.

...
...
...
..
.

m
m+m
2m+m
..
.

(n-1)m+1 (n-1)m+2 . . . (n-1)m+m


Os n
umeros na coluna j sao m 0 + j, m 1 + j, m 2 + j, . . . , m(n 1) + j.
Temos, (ma + j, m) = (j, m), para qualquer inteiro a. Portanto, ou qualquer
elemento da coluna j e primo com m ou nenhum elemento da coluna j e primo
com m. Assim, ha exactamente (m) colunas contendo inteiros primos com
m e qualquer elemento destas (m) colunas e primo com m.
Como (m, n) = 1, os n elementos de cada coluna j formam um sistema
completo de resduos mod n. Portanto, por denicao, cada coluna j contem
exactamente (n) elementos primos com n. Donde, em cada uma das (m)
colunas que tem os elementos que sao primos com m, ha exactamente (n) elementos primos com n. Mais, estes sao os u
nicos elementos que sao ao mesmo
tempo primos com m e primos com n. Isto e, ha exactamente (m)(n), elementos na tabela que sao primos com m e, ao mesmo tempo, primos com
n.
Mas um inteiro e primo com mn se e so se for primo simultaneamente
com m e com n. Portanto,
(mn) = (m)(n)
2

e a funcao de Euler e multiplicativa.

33

Teorema 3.9. Suponhamos que a factorizac


ao de n em primos e a seguinte
n = pa11 pa22 pakk
Entao

1
1
1
(n) = n(1 )(1 ) (1 ) =
(pai i pai i 1 )
p1
p2
pk
i=1
k

Demonstrac
ao: Vamos comecar por calcular (pa ), para p primo e a
1. Um inteiro e primo com pa excepto se for divisvel por p. Os n
umeros de
1 a pa que sao divisveis por p, sao 1 p, 2 p, . . . , pa1 p. Portanto,
1
(pa ) = pa pa1 = pa (1 ).
p
Mas como a funcao (n) e multiplicativa, temos
(n) = (pa11 )(pa22 ) (pakk )
1
1
1
= pa11 (1 )pa22 (1 ) pakk (1 )
p1
p2
pk
1
1
1
= pa11 pa22 pakk (1 )(1 ) (1 )
p1
p2
pk
1
1
1
= n(1 )(1 ) (1 )
p1
p2
pk
2

3.9

Criptoan
alise da Cifra Am

Suponhamos que e interceptada uma mensagem que se sabe ter sido cifrada
usando um criptosistema am, e que o alfabeto utilizado tem N = 26 letras.
As duas letras mais frequentes na mensagem sao Je C. Sabe-se tambem
que a mensagem esta em ingles, e que nesta lngua, as letras mais frequentes
sao o Ee o T(ver gura 3.1). Deduzimos assim que, provavelmente, o

34

Efoi cifrado em Je que o Tfoi cifrado em C. Para determinar as


chaves so temos que resolver o sistema de congruencias
10c + d 5 mod 26
3c + d 20 mod 26
Exemplo. Vamos decifrar a seguinte mensagem.
ICFMGTICJWARGIJGTRWNKJGFKWABGOKWFK
RWCBKAWJZMJGCCWKGCKJOKCKFKXJGFGNJM
GFMAAWFWLMOGFGCWTRWGKCMAAMKTGJMKFG
OKPMTVGSIWGBJWNWJMGSIWTRWSIWGFKXJG
FGWWJGGCKFGFKBKJRKTITOGAWOKCWNJMG
As letras mais frequentes sao o G e o W, portanto assumimos que a foi
cifrado em G e e foi cifrado em W.
Obtemos as congruencias 6u + v 0 mod 26 e 22u + v 4 mod 26.
Logo u = 10 ou u = 23, mas u tem de ser primo com 26, donde u = 23 e
v = 18.
Portanto, a = 17 e b = 6.
Exerccio. Decifre a mensagem que se sabe ter sido cifrada usando uma
cifra afim e que o texto plano esta na lngua portuguesa.
HJHRF MRHOH XHMIZ XDFJF HQRUI TMHHZ XDTYI
TMHZH JTXRD HHQZY HJZJF DRFUH YJZUI ZHFQT
SYRDF ZJVZM HYRXI FHDFU IZDZQ FMBTZ ZXIHX
HMIZX QFOZJ XZMZA QZMRJ ZUIHO HXQFM TJFTJ
HRXOF XUFXX FXXZU IROFXQ HMHXZ HQMZD
RHMHH MIZOH JHIZJ HIRDH IZJFX OZTIR YRWHM
FMHDR FDRUR FZTJY FUVFQ ZMRFO FOZIM ZRUFR
UIZUX REF

35

3.10

Cifra de Vigen`
ere

Nas cifras estudadas ate agora, dada uma chave, cada letra e transformada
numa so outra letra. Por esta razao, aqueles criptosistemas sao denominados
mono-alfabeticos. A cifra de Vigen`ere, que vamos apresentar nesta seccao, e
o primeiro exemplo de um criptosistema poli-alfabetico.
Cifra (Vigen`ere). Sejam m e n inteiros positivos. Sejam P = C = K =
(Zm )n . Dada uma chave K = (k1 , . . . , kn ) e x P e y C, definimos
eK (x1 , . . . , xn ) (x1 + k1 , . . . , xn + kn ) mod m
e
dK (y1 , . . . , yn ) (y1 k1 , . . . , yn kn ) mod m.
O n
umero de chaves possveis, dados m e n e mn .
Exemplo. Suponhamos que m = 26, n = 8 e a chave e PORTUGAL. Entao
K = (15, 14, 17, 19, 20, 6, 0, 11). Queremos cifrar a frase
este criptosistema nao e seguro
Primeiro codificamos o texto plano depois ciframos grupos de 8 de cada vez
e adicionamos a chave mod 26, da seguinte maneira
4 18 19 4 2 17 8
15 14 17 19 20 6 0
19 6 10 23 22 23 8
12 0 13 0
11 15 14 17
23 15 1 17

14
19
7

4
20
24

15
11
3
18
6
24

19
15
6
4
0
4

6
11
17

14
14
2
20
15
9

18
17
9
17
14
5

A mensagem cifrada fica


TGKXWXIDGCJBMZEXPBRHYYERJFF

36

8
19
1
14
17
5

18
20
12

19
6
25

4
0
4

3.11

Criptoan
alise da cifra de Vigenere

O primeiro passo para criptanalisar a cifra de Vigenere consiste em encontrar


o comprimento da palavra chave, que denotamos por n. Vamos estudar duas
tecnicas que nos podem ajudar a encontrar n, nomeadamente o teste de
Kasiski e o ndice de coincidencia.
O teste de Kasiski foi pela primeira vez descrito por Friedrich Kasiski
em 1863. Este teste tem por base o facto de dois segmentos identicos do
texto plano serao transformados no mesmo texto cifrado sempre que a sua
ocorrencia no texto plano esta com x posicoes de separacao, com x 0
mod n. Reciprocamente, se forem observados no texto cifrado dois segmentos
identicos com comprimento de pelo menos tres letras, entao ha uma grande
chance que eles correspondam a segmentos identicos do texto plano.
O teste de Kasiski funciona do seguinte modo: Primeiro procuramos no
texto cifrado pares de segmentos identicos de comprimento maior ou igual a
3 e guardamos a distancia entre o incio de cada um dos dois segmentos. Se
obtivermos as distancias d1 , d2 , . . . entao conjecturamos que n divide o maior
divisor comum entre todas as distancias.
Outro processo para estimar o valor de n, consiste em utilizar o ndice de
coincidencia desenvolvido por Wolfe Friedman em 1920.
Denic
ao. Seja x = x1 x2 . . . xm uma lista de m letras. O ndice de coincidencia de x, que denotamos por Ic (x) e a probabilidade de que dois elementos de x sejam iguais. Denotemos as frequencias de A, B, C, . . .(, Z) em x por
f0 , f1 , . . . , f25 . Como podemos escolher dois elementos de x de m2 maneiras
( )
e, para cada 0 i 25, ha f2i maneiras de escolher dois elementos e ambos
serem i entao,
25
fi (fi 1)
Ic (x) = i=0
.
m(m 1)
Se x e parte de um texto em ingles ou e um texto cifrado atraves de uma
cifra mono-alfabetica, e pi sao as probabilidades indicadas na gura 3.1 sera
de esperar que
25

Ic (x)
p2i = 0.065.
i=0

A gura 3.3 apresenta os ndices de coincidencia de varias lnguas.

37

Portugues
Ingles
Frances
Italiano
Alemao
Japones
Russo
Texto aleatorio

0.0738
0.0661
0.0778
0.0738
0.0762
0.0819
0.0529
0.0385

Figura 3.3: Indices de Coincidencia esperados


Vejamos agora como utilizar o ndice de coincidencia para determinar o
comprimento da palavra passe de uma cifra de Vigenere, n.
Suponhamos que y = y1 y2 . . . ym foi obtido atraves de uma cifra de Vigenere de um texto plano em ingles. Para cada inteiro r 1, escrevemos a
mensagem cifrada y, por colunas numa matriz do tipo r m/r. Denotamos
por yi a linha i, desta matriz, com 1 i r. Se r = n entao e de esperar
que Ic (yi ) seja aproximadamente 0.0661, para qualquer 1 i r. Se r = n
entao as listas yi serao mais aleatorias, pois foram obtidas utilizando cifras
de deslocamento com varias chaves. Como o ndice de coincidencia esperado
de uma lngua e muito diferente do ndice de coincidencia esperado de um
texto aleatorio, seremos capazes de descobrir o valor de n.
Apos determinarmos o comprimento da palavra passe, cada yi e obtido
atraves de uma cifra de deslocamento de um texto plano na lngua considerada e pode ser utilizada a analise de frequencias para obter a palavra passe.
Quando o texto plano e pequeno, a analise de frequencias pode nao ser suciente para conjecturar com grande conviccao o valor da chave. Neste caso,
usamos o ndice de coincidencia m
utua entre duas listas.
Denic
ao. Sejam x = x1 x2 . . . xm e y = y1 y2 . . . yt listas com m e t letras,
respectivamente. O ndice de coincidencia m
utua de x e y, que denotamos
por M Ic (x, y) e a probabilidade de um elemento de x ser igual a um elemento
de y. Se denotarmos as frequencias de A, B, . . . , Z em x e y por f0 , f1 , . . . , f25
e g0 , g1 , . . . , g25 , respectivamente, entao
25
fi gi
M Ic (x, y) = i=0
.
mt
Ja vimos que cada yi e obtido atraves de uma cifra de deslocamento.
38

Seja K = (k1 , . . . , kn ) a palavra passe, entao yi obtem-se somando ki a cada


i-esima letra do texto plano. Vamos primeiro estimar M Ic (yi , yj ). Tirando
uma letra de yi e outra de yj , a probabilidade de serem ambas A e pki pkj ,
a probabilidade de ambas serem B e p1ki p1kj , etc. (note que os ndices sao
reduzidos mod 26). Portanto,
M Ic (yi , yj )

25

phki phkj =

h=0

25

ph ph+ki kj .

h=0

Esta estimativa depende apenas da diferenca ki kj mod 26 `a qual


chamamos deslocamento relativo de yi e yj . Mais, como
25

ph ph+l =

h=0

25

phl ph ,

h=0

um deslocamento relativo de u da a mesma estimativa para M Ic que um


deslocamento relativo de 26 u. Portanto precisamos apenas de calcular as
estimativas para os deslocamentos relativos entre 0 e 13.
Deslocamento relativo Valor esperado de M Ic
0
0.065
1
0.039
2
0.032
3
0.034
4
0.044
5
0.033
6
0.036
7
0.039
8
0.034
9
0.034
10
0.038
11
0.045
12
0.039
13
0.043
Verica-se que um deslocamento relativo nulo da um ndice de coincidencia m
utua (M Ic ) muito distinto do M Ic correspondente a qualquer outro
deslocamento relativo. Podemos usar esta informacao para tentar descobrir
u = ki kj . Primeiro xamos yi e vamos cifrar yj usando cada uma das
chaves g com 0 g 25 e denotamos a mensagem cifrada obtida, por yjg .
Em seguida, calculamos os ndices M Ic (yi , yjg ), para cada 0 g 25,
39

25

fh,i fhg,j
,
mt
onde fh,i e fh,j sao as frequencias da letra correspondente a h em yi e yj ,
respectivamente. Quando g = u o ndice M Ic deve ser proximo de 0.065,
mas quando g = u o ndice deve ser relativamente menor. Para cada i e j
devemos calcular 14 ndices, um para cada chave.
Vamos ilustrar estes metodos com o seguinte exemplo:
M Ic (yi , yig )

h=0

Exemplo. Sabemos que a seguinte mensagem foi cifrada utilizando um criptosistema de Vigenere.
CHREEV OAHMAE RATBIA XXWTNX BEEOPH BSBQMQ
EQERBW RVXUOA KXAOSX XWEAHB WGJMMQ MNKGRF
VGXWTR ZXWIAK LXFPSK AUTEMN DCMGTS XMXBTU
IADNGM GPSREL XNJELX VRVPRT ULHDNQ WTWDTY
GBPHXT FALJHA SVBFXN GLLCHR ZBWELE KMSJIK
NBHWRJ GNMGJS GLXFEY PHAGNR BIEQJT AMRVLC
RREMND GLXRRI MGNSNR WCHRQH AEYEVT AQEBBI
PEEWEV KAKOEW ADREMX MTBHHC HRTKDN VRZCHR
CLQOHP WQAIIW XNRMGW OIIFKE E
Primeiro, vamos tentar descobrir n utilizando o teste de Kasiski. O
trigrama CHR aparece cinco vezes na mensagem cifrada, comecando nas
posicoes 1, 166, 236, 276 e 286. As distancias da primeira ocorrencia `as outras sao 165, 235, 275 e 285 e o maximo divisor comum entre estes valores e
5. Portanto, e de prever que o comprimento da palavra passe seja 5.
Vejamos se com o calculo dos ndices de coincidencia chegamos `a mesma
conclusao. Se r = 1, o ndice de coincidencia e 0.045. Se r = 2 obtemos
Ic (y1 ) = 0.046 e Ic (y2 ) = 0.041. Se r = 3 obtemos Ic (y1 ) = 0.043, Ic (y2 ) =
0.050 e Ic (y3 ) = 0.047. Para r = 4, obtemos os valores 0.042, 0.039, 0.046 e
0.040. Finalmente, para r = 5, obtemos 0.063, 0.068, 0.069, 0.061 e 0.072, o
que tambem sugere que n = 5.
Vamos agora tentar utilizar os ndices de coincidencia m
utua para descobrir a palavra passe. Utilizando um programa no computador, calcula-se
todos os 260 valores de M Ic (yi , yjg ), com 1 i < j 5 e 0 g 25, e
40

procura-se os valores que forem proximos de 0.065. Dado um par (i, j), se
houver um u
nico valor perto de 0.065, conjecturamos que esse e o valor do
deslocamento relativo.
Verifica-se haver grande evidencia que o deslocamento relativo entre y1
e y2 seja 9; o deslocamento relativo entre y2 e y3 seja 13; o deslocamento
relativo entre y2 e y5 seja 7; o deslocamento relativo entre y3 e y5 seja 20;
o deslocamento relativo entre y4 e y5 seja 11. Obtemos assim as seguintes
equacoes nas cinco incognitas k1 , . . . , k5 (todos os calculos sao efectuados
mod 26):
k1 k2
k1 k5
k2 k3
k2 k5
k3 k5
k4 k5

=
=
=
=
=
=

9
16
13
7
20
11.

Donde

k2
k3
k4
k5

=
=
=
=

k1 + 17
k1 + 4
k1 + 21
k1 + 10

Assim, a chave deve ser (k1 , k1 + 17, k1 + 4, k1 + 21, k1 + 10), para algum
0 k1 25, ou seja, a chave e uma das sequencias AREVK ou BSFWL ou
CTGXM. . . . A u
nica destas sequencias que faz sentido e JAN ET . Note-se
que a palavra passe nao tem que fazer sentido. Nesse caso, podemos experimentar qualquer das possveis chaves ate que uma de um texto com sentido,
ou, se quisermos utilizar o computador, verificar qual delas e que corresponde
a um texto plano que tenha uma analise de frequencias de acordo com a lngua
que esta a ser utilizada. Para a chave JANET Obtemos o texto plano
The almond tree was in tentative blossom. The days were longer,
often ending with magnicent evenings of corrugated pink skies.
41

The hunting season was over, with hounds and guns put away for
six months. The vineyards were busy again as the well-organized
farmers treated their vines and the more lackadaisical neighbors
hurried to do the pruning they should have done in November.

3.12

Cifra de Hill

Nesta seccao descrevemos outro criptosistema polialfabetico inventado em


1929 por Lester S. Hill.
Cifra (Hill). Sejam m e n inteiros positivos. Sejam P = C = (Zm )n e
K = {K Mn (Zm ) : Ke invertvel}. Dada uma chave

k1,1 k1,2 . . . k1,n


k2,1 k2,2 . . . k2,n

K = ..
..
..
.
.
.
kn,1 kn,2 . . . kn,n
e x P e y C, definimos
e

eK (x1 , x2 , . . . , xn ) (x1 x2 . . . xn )K

mod m

dK (y1 , y2 . . . , yn ) (y1 y2 . . . yn )K 1

mod m.

Exemplo. Sejam m = 26, n = 2 e

K=

11 8
3 7

)
7 18
K =
23 11
Para cifrar o texto plano hill, dividimos primeiro nos dois grupos hi e ll e
efectuamos os produtos
(
)
(
) 11 8
(
)
7 8
= 23 8
3 7
e
(
)
(
) 11 8
(
)
11 11
= 24 9
3 7
A mensagem cifrada fica XIYJ.
Neste caso

42

3.13

Ataque `
a cifra de Hill

A cifra de Hill e mais difcil de quebrar quando so se conhece a mensagem


cifrada, mas sucumbe muito facilmente quando se conhece um texto plano
que deu origem a uma mensagem cifrada. Vamos assumir que o oponente
conhece o valor de n (comprimento de cada parte do texto plano a ser cifrada
individualmente) e conhece pelo menos n pares distintos de n-uplos xj =
(xj,1 , xj,2 , . . . , xj,n ) e yj = (yj,1 , yj,2 , . . . , yj,n ), tais que yj = eK (xj ), com 1
j n. Sejam X = [xi,j ] e Y = [yi,j ], entao Y = XK, onde K e a matriz da
chave desconhecida. Se X for invertvel, o oponente pode obter K = X 1 Y
e quebrar o sistema. Se X nao for invertvel sera necessario utilizar outros n
pares.
Exemplo. Suponha que o texto plano friday e cifrado utilizando uma cifra
de Hill com n = 2, obtendo-se PQCFKU. Entao temos eK (5, 17) = (15, 16),
eK (8, 3) = (2, 5) e eK (0, 24) = (10, 20). Utilizando os dois primeiros pares,
obtemos a equacao matricial
)
) (
(
5 17
15 16
K.
=
8 3
2 5
Como
)
)1 (
(
9 1
5 17
=
2 15
8 3
a chave K e

(
K=

9 1
2 15

)(

15 16
2 5

(
=

7 19
8 3

)
.

Podemos utilizar o terceiro par para confirmar este resultado.


Mas pode acontecer (e e provavel que aconteca) que o oponente nao
conheca n. Neste caso, ele pode usar este processo utilizando n = 2, 3, . . . ate
que a chave seja descoberta. Se um valor de n e incorrecto, entao a matriz
K obtida utilizando este algoritmo nao funcionara para outros pares texto
plano-texto cifrado. Portanto, n pode ser facilmente determinado.

3.14

Cifra de Permuta
c
ao

Ate agora todas as cifras estudadas envolveram substituicoes das letras do


texto plano por letras da mensagem cifrada. A ideia da cifra de permutacao
43

(tambem chamada cifra de transposicao) consiste em nao alterar as letras do


texto plano, mas sim a sua posicao. Este tipo de cifras tem sido utilizado
ha centenas de anos, tendo Giovanni Porta notado, ja em 1563, a distincao
entre estas cifras e as cifras de substituicao.
Cifra (Permutacao). Sejam m e n inteiros positivos. Sejam P = C = (Zm )n
e K consiste de todas as permutac
oes de {1, . . . , n}. Dada uma chave e
x P e y C, definimos
e (x1 , x2 , . . . , xn ) (x(1) , x(2) , . . . , x(n) )
e
d (y1 , y2 , . . . , yn ) (y1 (1) , x1 (2) , . . . , x1 (n) ),
onde 1 e a permutacao inversa de .
A cifra de permutacao e um caso especial da cifra de Hill. A permutacao
de {1, . . . , n}, corresponde `a matriz de permutacao K cuja entrada (i, j)
e 1 se i = (j) e 0 caso contrario.

3.15

Cifras de Fluxo

Nos varios criptosistemas estudados, a chave K mantem-se xa e e utilizada


para cifrar os sucessivos blocos de texto plano. Isto e, a mensagem cifrada,
y, e obtida da seguinte maneira:
y = y1 y2 = eK (x1 )eK (x2 ) .
Estes criptosistemas chamam-se Cifras de bloco. Nesta seccao, vamos estudar
uma generalizacao das cifras de bloco, i. e. criptosistemas que usam um uxo
de chaves.
Uma cifra de uxo funciona da seguinte forma: Dada uma chave K K e
um texto plano x1 x2 , e gerado um uxo de chaves, digamos z = z1 z2 ,
denido por
zi = fi (K, x1 , . . . , xi1 )
e a mensagem cifrada e obtida da seguinte forma:
y = y1 y2 = ez1 (x1 )ez2 (x2 ) .

44

Assim, para cifrar o texto plano x1 x2 , calcula-se sucessivamente os valores


z1 , y1 , z2 , y2 , . . . . Para decifrar y1 y2 , calcula-se sucessivamente os valores
z1 , x 1 , z 2 , x 2 , . . . .
A formulacao matematica e apresentada a seguir:
Denic
ao. Uma cifra de uxo e um heptuplo (P, C, K, L, F, E, D) satisfazendo as condicoes seguintes:
1. P e o conjunto nito dos textos planos possveis;
2. C e o conjunto nito dos textos cifrados possveis;
3. K e o conjunto nito das chaves;
4. L e o conjunto nito do alfabeto dos uxos de chaves;
5. F = (f1 , f2 , . . . ) e o gerador de uxos de chaves. Para cada i 1,
fi : K P i1 L.
6. Para cada z L existe uma regra para cifrar ez E e uma regra para
decifrar correspondente dz D, tais que ez : P C, dz : C P e
dz (ez (x)) = x, para qualquer x P.
As cifras de bloco sao um caso particular das cifras de uxo, onde zi = k,
para qualquer i 1. Quando as funcoes fi so dependem da chave K, dizemos
que temos uma cifra de uxo sincronizada. Neste caso, K e a semente que e
expandida para gerar o uxo z1 z2 .
Uma cifra de uxo e peri
odica com perodo d se zi+d = zi , para qualquer
i 1. A cifra de Vegenere pode ser interpretada como uma cifra de uxo
sincronizada e periodica, com perodo n. Neste caso, zi = ki , para 1 i n.
Em muitos criptosistemas de uxo, utiliza-se P = C = L = (Z2 )n e cifrar
ou decifrar e adicionar mod 2, o que corresponde a efectuar a operacao do
ouexclusivo, conhecida como XOR.

3.16

Cifra de Fluxo baseada no LFSR

Um metodo de geracao do uxo de chaves e o seguinte:

45

Suponhamos que temos uma chave K = (k1 , . . . , kn , c0 , . . . , cn1 ) K.


Denimos zj = kj , para 1 j n, e geramos o uxo de chaves atraves da
seguinte recorrencia linear de grau n
zi+n

n1

cj zi+j

mod 2,

j=0

para i 1.
Note que so estamos realmente a cifrar quando (k1 , . . . , kn ) = (0, . . . , 0).
Se esta hipotese se vericar e se os valores c0 , c1 , . . . , cm1 tambem nao sao
todos nulos, entao vamos obter uma cifra de uxo periodica de perodo 2n 1.
Portanto, uma chave inicial pequenada origem a um uxo de chaves com
um perodo grande.
As cifras A5/1, A5/2, utilizadas nos telemoveis GSM, e a cifra EO, utilizada no Bluetooth, sao cifras do tipo LFSR.
Exemplo. Sejam n = 4, K = (1, 0, 0, 0) e o fluxo de chaves gerado por
zi+4 zi + zi+1

mod 2.

Entao o fluxo de chaves e


1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, . . . .
e tem perodo 15 = 24 1.
Este metodo pode ser ecientemente implementado em Hardware utilizando um Linear feedback shift register (LFSR).

3.17

Criptoan
alise da cifra de uxo baseada
no LFSR

Vejamos um metodo para quebrar a cifra de uxo baseada no LFSR, quando


se conhece um texto plano e a mensagem cifrada que lhe corresponde. Como
vimos, a mensagem cifrada e obtida adicionando o texto plano ao uxo de
chaves modulo 2, i.e. yi = xi + zi . O uxo de chaves e produzido a partir da
chave secreta z1 , . . . , zm e as relacoes de recorrencia linear

46

zm+i

m1

cj zi+j

mod 2,

j=0

onde c0 , . . . , cm1 Z2 e c0 = 1.
Suponha que o oponente conhece o texto plano x1 , x2 , . . . , xn e a mensagem cifrada correspondente y1 , y2 , . . . , yn , entao pode obter os valores zi
xi + yi mod 2, para 1 i n. Suponhamos que o oponente tambem conhece o comprimento da chave secreta m. Entao precisa apenas de determinar
c0 , c1 , . . . , cm1 . Como para cada i 1, temos
zm+i

m1

cj zi+j

mod 2,

j=0

que e uma equacao linear com m incognitas. Se n 2m entao temos um


sistema de equacoes com m equacoes e m incognitas e, portanto, pode ser
resolvido. A seguinte equacao matricial descreve este sistema de equacoes

z1
z2
..
.

(zm+1 , zm+2 , . . . , z2m ) = (c0 , c1 , . . . , cm1 )

z2
z3
..
.

...
...

zm
zm+1
..
.

zm zm+1 . . . z2m1
Pode ser mostrado que a matriz tem inversa se m for o comprimento
da chave secreta (ver exerccio 1.9, pag 42, em Criptography: Theory and
Practice de Douglas Stinson). Neste caso, obtemos

(c0 , c1 , . . . , cm1 ) = (zm+1 , zm+2 , . . . , z2m )

z1
z2
..
.

z2
z3
..
.

...
...

zm
zm+1
..
.

zm zm+1 . . . z2m1
Vejamos um exemplo:
Exemplo. Suponhamos que Oscar obtem a mensagem cifrada
101101011110010
47

correspondente ao texto plano


011001111111000.
Entao o fluxo de chaves pode ser obtido somando bit a bit mod 2 os valores
anteriores. Portanto o fluxo de chaves sera
110100100001010.
Entao

(0, 1, 0, 0, 0) = (c1 , c2 , c3 , c4 , c5 )

1
1
0
1
0

1
0
1
0
0

0
1
0
0
1

1
0
0
1
0

0
0
1
0
0

Donde, apos calcularmos a inversa da matriz e efectuar os restantes calculos,


obtemos (c1 , c2 , c3 , c4 , c5 ) = (1, 0, 0, 1, 0). Portanto, a recorrencia para gerar
o fluxo de chaves e
zi+5 zi + zi+3

48

mod 2.

Captulo 4
Criptograa de chave p
ublica
Os proximos sistemas criptogracos que iremos estudar ha uma chave para
cifrar que e p
ublica, mas a chave para decifrar e secreta e nao pode ser obtida
a partir da chave p
ublica. Antes de descrevermos estes sistemas, necessitamos
de recordar alguns resultados de teoria elementar dos n
umeros.

4.1

Teorema Chin
es dos Restos

Na seccao 3.6 vimos como resolver congruencias da forma


ax b

mod n.

O proximo resultado diz-nos quando e que um sistema com duas congruencias


tem solucao.
Teorema 4.1. Se (m, n) = 1, entao o sistema
{
x a mod m
x b mod n
Tem uma e uma so solucao

mod mn.

Demonstrac
ao: Um inteiro x satisfaz a primeira equacao se e so se
existe um inteiro t tal que
x = a + mt
(4.1)
Agora, a + mt satisfaz a segunda equacao se e so se
mt b a
49

mod n.

(4.2)

Como (m, n) = 1, esta u


ltima equacao tem uma u
nica solucao, digamos c, i.
e.
t c mod n.
Portanto, t satisfaz (4.2) se e so se existe um inteiro k tal que t = c + nk.
Substituindo em (4.1), vericamos que x e solucao do sistema se e so se
x = a + m(c + nk)
= (a + mc) + mnk
Logo, a + mc e solucao do sistema e e u
nica mod mn.

Este teorema e um caso especial de um resultado mais geral, que ja era


conhecido dos chineses ha mais de 2000 anos.
Teorema 4.2 (Teorema chines dos restos). Sejam m1 , . . . , mk inteiros positivos que sao primos entre si dois a dois. Entao o sistema

x a1 mod m1

x a2 mod m2
..

x a mod m
k
k
tem uma u
nica solucao

mod (m1 m2 mk ).

Demonstrac
ao: Iremos usar o teorema 4.1 (k 1) vezes. Pelo teorema
4.1 as duas primeiras equacoes tem uma u
nica solucao mod (m1 m2 ). Seja
b2 esta solucao, i. e.
x b2 mod m1 m2
(4.3)
A terceira equacao e
x a3

mod m3 .

(4.4)

Como, por hipotese (m1 , m3 ) = (m2 , m3 ) = 1, entao temos (m1 m2 , m3 ) = 1


(porque?). Para resolver o sistema formado pelas equacoes (4.3) e (4.4),
podemos mais uma vez utilizar o teorema 4.1. Portanto, ha uma u
nica
solucao de (4.3) e (4.4) mod ((m1 m2 )m3 ), i. e., ha uma u
nica solucao
das tres primeiras equacoes mod (m1 m2 m3 ). Continuando desta maneira,

50

depois de (k 1) aplicacoes do teorema 4.1, obtemos uma u


nica solucao
mod (m1 m2 mk ) do sistema
{
x bk1 mod (m1 m2 mk1 )
x ak mod mk
Esta solucao, digamos x bk mod (m1 m2 mk ), e tambem a u
nica solucao
do sistema inicial mod (m1 m2 mk ).
2

O proximo teorema permitir-nos-a encontrar uma solucao do sistema

x a1 mod m1

x a2 mod m2
..

x a mod m
k

sem ter que utilizar diversas vezes o teorema 4.1.


Teorema 4.3. Sejam m1 , . . . , mk inteiros positivos que sao primos entre
M
si dois a dois. Sejam M = m1 m2 mk , Mi =
e yi o inverso de Mi
mi
mod mi , para qualquer 1 i k. Entao
N = a1 M1 y1 + a2 M2 y2 + ak Mk yk
e a u
nica solucao

mod M do sistema

x a1 mod m1

x a2 mod m2
..

x a mod m
k
k

Demonstrac
ao: Pelo teorema do resto chines, sabemos que ha uma
solucao u
nica mod M do sistema anterior. Portanto, basta-nos provar que
N e essa solucao. Seja 1 i k. Como (Mi , mi ) = 1, entao, pelo teorema
3.6, existe yi tal que Mi yi 1 mod mi . Mais, Mi 0 mod mj , para
qualquer j = i. Entao
N a1 M1 y1 + a2 M2 y2 + ak Mk yk
ai Mi yi mod mi
ai Mi (Mi )1 mod mi
ai mod mi
51

mod mi

Portanto, N e solucao da equacao x ai mod mi , para qualquer 1 i k.


Donde, N e a u
nica solucao do sistema mod M .
2

Exemplo. A primeira menc


ao conhecida do teorema chines do resto e o
seguinte problema extrado do livro Sun Tzu Suan Ching (O Manual Matematico do Mestre Sun), escrito por Sun Zi, por volta do terceiro seculo a.c.
Temos um certo n
umero de coisas, mas nao sabemos exactamente
quantas sao. Se formarmos grupos de tres, sobram duas. Se
formarmos grupos de cinco, sobram tres. Se formarmos grupos
de sete, sobram duas. Quantas coisas temos?
Resolver este problema equivale a

x2
x3

x2

resolver o sistema
mod 3
mod 5
mod 7

Primeiro iremos usar o processo descrito no teorema do resto chines. Da


primeira equacao obtemos x = 2 + 3t, para algum inteiro t. Substituindo na
segunda equacao, obtemos 2 + 3t 3 mod 5, donde 3t 1 mod 5, i. e.
t 2 mod 5. Portanto, t = 2 + 5k, para algum inteiro k, e
x = 2 + 3(2 + 5k) = 8 + 15k.
Substituindo este valor na terceira equac
ao, obtemos
8 + 15k 2

mod 7.

Como 8 15 1 mod 7, resulta que k 1 mod 7. Assim, k = 1 + 7s,


para algum inteiro s. Portanto
x = 8 + 15(1 + 7s) = 23 + 105s.
Provamos que qualquer soluc
ao do sistema e da forma 23 + 105s, para s
inteiro, e a u
nica solucao mod (3 5 7) e 23.
Agora usamos o metodo descrito no teorema anterior. Aqui M = 105,
M1 = 35, M2 = 21 e M3 = 15. O inverso de 35 mod 3 e y1 = 1, o inverso
de 21 mod 5 e y2 = 1 e o inverso de 15 mod 7 e y3 = 1. Portanto,
N = 2 35 (1) + 3 21 1 + 2 15 1 = 23
52

4.2

Lagrange, Euler e Fermat

Seja G um grupo multiplicativo, denimos ordem de um elemento g G


como sendo o menor inteiro positivo m tal que g m = 1. Se G = (Zn , ) entao
G tem (n) elementos e, neste caso, denimos ordem de um elemento da
seguinte maneira:
Denic
ao. Suponhamos que (a, n) = 1. Denimos a ordem de a mod n
como sendo o menor inteiro positivo, digamos b, para o qual
ab 1

mod n

e denota-mo-lo por ordn (a).


Por exemplo, ord13 (5) = 4, pois
51
52
53
54

5 mod 13
1 mod 13
5 mod 13
1 mod 13

Recordemos os famosos resultados:


Teorema 4.4 (Lagrange). Suponha que G e um grupo multiplicativo com n
elementos e seja g G. Entao a ordem de g divide n.
Teorema 4.5 (Fermat). Se p e primo entao bp b mod p
Teorema 4.6 (Euler). Se (b, n) = 1 ent
ao
b(n) 1

4.3

mod n.

Razes primitivas

Quando p e primo, o grupo (Zn , ) e cclico e os elementos que geram este


grupo sao muito importantes em criptograa. Recordemos o nome destes
elementos e um resultado que nos diz quantos existem.
Denic
ao. Se (a, n) = 1 e ordn (a) = (n) dizemos que a e uma raz primitiva de n.
Teorema 4.7. Seja p um primo e d | (p 1). Entao ha exactamente (d)
inteiros distintos mod p cuja ordem mod p e d. Em particular, ha exactamente (p 1) razes primitivas de p.
53

4.4

Exponenciac
ao modular r
apida

Antes de passar ao sistema RSA e outros sistemas de chave p


ublica necessitamos ainda de um algoritmo que nos permita fazer exponenciacoes modulares
rapidas.
Teorema 4.8. Sejam n, m e b inteiros, com b < m. Entao
tempo(bn

mod m) = O(log n log2 m)

Por um exerccio, calcular bn demora O(n2 log2 b) operacoes bit. Podemos determinar bn mod m dividindo bn por m o que nos da O(n log b log m)
operacoes bit. Portanto, no total teramos
O(n2 log2 b) + O(n log b log m)
operacoes bit. Este valor e exageradamente superior a O(log n log2 m) se m
nao for muito superior a n, portanto temos que utilizar um algoritmo muito
mais rapido que o indicado para calcular bn . Uma das ideias deste algoritmo
e nunca trabalhar com n
umeros muito grandes, i. e. sempre que zermos
uma multiplicacao, reduziremos logo de seguida o resultado mod m. Assim,
os inteiros envolvidos nos nossos calculos nunca serao maiores que m2 .
Demonstrac
ao: Denotamos por a o produto parcial. Quando o algoritmo terminar, teremos a bn mod m. Comecamos por tomar a = 1 e seja
n = (nk1 n1 n0 )2 a representacao de n na base 2, onde k e o n
umero de
bits de n.
Se n0 = 1, entao tomar a = b, caso contrario a = 1. A seguir calculamos
b2 e seja b1 = b2 mod m.
Se n1 = 1, a passa a ser ab1 mod m, caso contrario a nao e alterado.
Seja b2 = b21 mod m.
Se n2 = 1, a passa a ser ab2 mod m, caso contrario a nao e alterado.
j
Continuando desta maneira, temos, no passo j, bj b2 mod m, com
bj < m. Se nj = 1, i. e. se 2j aparece na expansao binaria de n, entao
inclumos bj no produto para a, caso contrario, nao inclumos bj . Depois de
k 1 passos, obtemos
k1

a bn0 +n1 2+nk1 2

bn

mod m.

Em cada passo temos uma multiplicacao e uma divisao, se nj = 0, ou duas


multiplicacoes e duas divisoes se nj = 1, de n
umeros menores que m2 . Por2
2
tanto, cada passo demora O(log m ) = O(log2 m) operacoes bit. Como
54

temos O(log n) passos, obtemos


tempo(bn

mod m) = O(log n log2 m).


2

4.5

RSA

O RSA foi inventado por Ron Rivest, Adi Shamir, e Leonard Adleman, no
MIT, em 1977.
Sejam p = q dois primos grandes e seja n = pq. Ja vimos que (n) =
(p 1)(q 1). Seja e um inteiro que e primo com (n). Os n
umeros n e e
sao publicados, da o nome de criptosistema de chave p
ublica. A mensagem
a cifrar deve ser um n
umero P n. A mensagem cifrada sera o u
nico inteiro
0 < C < n tal que
C P e mod n.
importante notar que p, q e (n) sao mantidos secretos. Como sabemos
E
(n), podemos usar o algoritmo de Euclides para encontrar um n
umero d tal
que
ed 1 mod (n),
i. e. ed = 1 + (n)k, para algum inteiro k. Para decifrar a mensagem, basta
calcular o menor resduo nao negativo de
Cd

mod n.

Vejamos porque:
Se (P, n) = 1, o teorema de Euler diz-nos que
C d P ed P 1+(n)k P

mod n

Se (P, n) = 1 entao (P, n) = p ou (P, n) = q. Suponhamos que (P, n) = p.


Entao (P, q) = 1, donde
{ d
C P ed 0 mod p
C d P ed P 1+(n)k P (P q1 )(p1)k P mod q
55

Pelo teorema chines dos restos, C d P mod n.


Portanto, para alguem decifrar a mensagem, ele tem que conhecer d e
n. Nao basta saber e e n. Para calcular d ele tem de saber (n), o que
requer um conhecimento dos primos p e q. Ou seja, tem de saber factorizar
n. Se os primos p e q forem sucientemente grandes (por exemplo, milhares
de algarismos, cada um), entao, com os mais potentes computadores e o
conhecimento matematico actual, e impossvel descobrir os factores de n
num perodo de tempo menor que um milhao de anos. Quem sabe p e q pode
calcular (n), mas um oponente que queira decifrar a mensagem, falhara,
pois nao sabe os primos nem uma maneira rapida de factorizar n.
Suponha que o alfabeto tem N letras, e n = pq, seja k tal que N k < n <
N k+1 . Costuma-se codicar as mensagens originais em blocos de k letras,
mas descodica-se as mensagens cifradas em blocos de k + 1 letras. Deste
modo qualquer mensagem pode ser codicada e qualquer mensagem cifrada
pode ser descodicada.
Exemplo. Considere n = 466883 e e = 139. Decifre IMYMLYJCNLSKe
LICASWZEKTIU.
No sistema RSA, so a chave para decifrar d deve ser mantida secreta. A
chave para cifrar e e o modulo n podem ser publicados. Com os conhecimentos actuais e impraticavel obter d sabendo e e n. Portanto, pode haver
uma lista p
ublica (tipo lista telefonica) com o nome de cada utilizador, o seu
modulo n e o expoente p
ublico e (esta chave e usualmente a mesma para
varios utilizadores, devendo ser relativamente pequena para tornar o sistema
eciente).
Para que a fatorizacao do modulo n seja impraticavel os factores primos
de n devem ser escolhidos apropriadamente. Devido `a forca dos algoritmos
actuais para factorizar inteiros, p e q devem ter aproximadamente o mesmo
n
umero de bits (mas nao demasiado proximos), e com pelo menos 512 bits.
Se para um dos factores p, p 1 tiver so factores primos pequenos, entao
o metodo de fatorizacao p 1ira permitir factorizar n.

4.5.1

Ataque do expoente p
ublico pequeno

A chave de cifrar e deve ser escolhida o mais pequena possvel, de modo a fazer
a cifra eciente. A escolha e = 2 e impossvel porque (n) = (p1)(q1) que
e par. Portanto, a menor chave de cifrar possvel e e = 3. Porem, pode ser
perigoso usar chaves de cifrar demasiado pequenas, porque o inimigo pode
56

usar o ataque do expoente pequeno: Este ataque funciona se a mesma


mensagem M e cifrada e vezes, usando sempre a chave de cifrar e e usando e
modulos ni primos dois a dois. Por exemplo, um banco pode enviar a mesma
mensagem M a alguns dos seus clientes usando os diferentes modulos RSA
destes clientes e sempre o mesmo e. Em seguida mostramos como este ataque
funciona. Sejam ci = ne mod ni , 1 i e as correspondentes mensagens
cifradas. Entao o inimigo usa o seguinte algoritmo:
1. Calcular um inteiro c tal que c ci mod ni , onde 1 i e e 1 c
n1 n2 ne , usando o teorema chines dos restos.
2. Determinar a raiz e de c, que vai ser M .
Para vericar que este algoritmo realmente funciona, basta notar que o
inteiro u = M e e menor que n1 n2 ne (porque M < ni ) e que claramente
verica as congruencias u ci mod ni . Donde c = u, pelo teorema
chines

e
dos restos (ha unicidade de solucao mod (n1 ne )), e portanto c = M .
A raiz e de c pode ser calculada de um modo eciente (por exemplo,
usando um generalizacao do algoritmo para obter a raiz quadrada). Portanto,
o ataque do expoente pequeno pode ser realmente eciente. Porem, este
metodo falha se as mensagens originais forem diferentes, e isto pode ser
obtido se acrescentarmos `a mensagem original alguns bits de texto aleatorios.
Podemos tambem usar um maior expoente para cifrar. Um valor muito
utilizado e e = 216 + 1.

4.6

Resduos quadr
aticos

Sejam p primo mpar e a um inteiro, tais que p - a. Seja 1 x p 1


entao so um dos inteiros x, 2x, . . . , (p 1)x e congruente com a mod p. Ha,
portanto, um u
nico x tal que
xx a

mod p

com 1 x p 1. Dizemos que x esta associado a x. Ha duas possibilidades, ou existe pelo menos um 1 x p 1, que esta associado a si mesmo
ou nao existe tal inteiro. Vamos analisar cada caso.
1. Suponhamos que ha um inteiro x1 que esta associado a si mesmo. Entao
a congruencia
x2 a mod p
(4.5)
57

tem a solucao x = x1 . Neste caso, dizemos que a e um resduo


quadratico de p. Claramente, p x1 e outra solucao de (4.5). Mais, se
x2 e outra solucao de (4.5), entao
x21 x22 0 mod p
donde,
(x1 x2 )(x1 + x2 ) 0 mod p.
Logo, x1 x2 mod p ou x1 x2 p x2 mod p. Portanto, a
equacao (4.5) so tem duas solucoes, que sao x1 e p x1 . Podemos
entao agrupar os inteiros
1, 2, . . . , p 1
p3
em
pares de inteiros associados e diferentes, sobrando x1 e p x1
2
que estao associados a si proprios. Temos
x1 (p x1 ) x21 a

mod p

e, para cada par de associados x e x ,


xx a
Entao
(p 1)! =

p1

i a a

mod p.

p3
2

p1
2

mod p.

i=1

2. Se nao ha qualquer inteiro que esteja associado a si proprio, dizemos


que a e um nao-resduo quadratico de p. Neste caso, a equacao (4.5)
nao tem solucoes e os inteiros
1, 2, . . . , p 1
podem ser agrupados em
Portanto,

p1
pares de inteiros associados diferentes.
2

(p 1)! =

p1

ia

i=1

58

p1
2

mod p.

Seja p um primo mpar (


e a)
um qualquer inteiro nao divisvel por p. Denimos
a
o smbolo de Legendre
, da seguinte maneira
p
( ) {
a
1
se a e um resduo quadratico de p
=
1
se a e um nao-resduo quadratico de p
p
( ) ( )
b
a
=
se a b mod p. Acabamos de provar o seguinte
Claramente,
p
p
teorema:
Teorema 4.9. Se p e um primo mpar e a n
ao e m
ultiplo de p, entao
( )
p1
a
(p 1)!
a 2
mod p.
p
Os dois casos mais simples deste teorema sao a = 1 e a = 1. Como a
equacao x2 1 mod p tem as solucoes 1 e 1, entao
( )
1
=1
p
para qualquer primo mpar. O proximo teorema e baseado neste exemplo
Teorema 4.10 (Wilson). Seja p primo, entao
(p 1)! 1

mod p

Demonstrac
ao: Se p e mpar entao
( )
1
=1
p
Logo, considerando a = 1 no teorema anterior, obtemos o resultado enunciado. Se p = 2, entao (p 1)! = 1, donde (p 1)! 1 mod 2.
2

Juntando os dois resultados anteriores, obtemos um processo para calcular


o smbolo de Legendre:

59

Teorema 4.11 (Lema de Euler). Sejam p um primo mpar e a um inteiro


tais que p - a. Entao
( )
p1
a
=a 2
mod p.
p
Ao contrario do teorema de Fermat, o recproco do teorema de Wilson
tambem e valido, obtendo-se um teste de primalidade.
Teorema 4.12. Seja m > 1. Entao m e primo se e so se
(m 1)! 1

mod m

Demonstrac
ao: Atendendo ao resultado anterior, basta-nos considerar
m > 1 composto. Entao existe um inteiro 1 < d < m tal que d | m. Mas
entao d | (m 1)!. Logo, d - ((m 1)! + 1). Donde, m - ((m 1)! + 1). 2

Infelizmente, este teorema parece ser in


util para vericar na pratica se
um n
umero e primo ou nao.
Em seguida consideramos o caso a = 1.
Teorema 4.13. O inteiro 1 e um resduo quadratico para os primos da
forma 4k + 1 e um nao-resduo quadratico para os primos da forma 4k + 3,
i. e.
( )
p1
1
= (1) 2 .
p
Demonstrac
ao: Resulta imediatamente do teorema 4.11.
2

Em seguida, vamos introduzir outra caracterizacao do smbolo de Legendre, obtida por Gauss.
Seja p um primo mpar e consideremos o conjunto dos resduos mnimos:
p1 p3
p1
S = {
,
, . . . , 2, 1, 1, 2, . . . ,
}.
2
2
2
Seja (a, p) = 1 e seja o n
umero de resduos mnimos negativos dos inteiros
p1
a, 2a, 3a, dotsa 2 . Por exemplo, seja p = 7 e a = 4. Entao
1 4 3 mod 7
2 4 1 mod 7
3 4 2 mod 7
60

Portanto, neste caso, =(2.) Os valores de irao permitir-nos obter uma


caracterizacao simples de ap .
( )
Lema 4.14 (Lema de Gauss).

a
p

= (1) .

Demonstrac
ao: Seja ml o resduo mnimo de la, onde ml e positivo.
Claramente, e o n
umero de ocorrencias do sinal negativo, quando l toma
valores entre 1 e (p 1)/2. Note que, se 1 l < k (p 1)/2, entao
ml = mk . Suponhamos que ml = mk . Entao
la ka

mod p.

Como p - a, temos l k mod p. Mas esta congruencia e impossvel,


porque l = k e
|l k| l + k p 1.
Portanto, os conjuntos {1, 2, . . . , (p 1)/2} e {m1 , m2 , . . . , m(p1)/2 } coincidem. Multiplicando as congruencias
1a m1 mod p
2a m2 mod p
..
.
p1
a m p1 mod p
2
2
obtemos

)
(
)
p1
p1
p1

!a 2 (1)
! mod p.
2
2

Portanto,
a

p1
2

(1)

mod p.

Pelo teorema 4.11, obtemos o resultado pretendido.

Este resultado, permite-nos, por exemplo, saber para que primos, 2 e um


resduo quadratico.

61

Teorema 4.15. O inteiro 2 e um resduo quadratico para os primos da forma


8k + 1 e 8k 1 e um nao-resduo quadratico para os primos da forma 8k + 3
e 8k + 5, i. e.
( )
p2 1
2
= (1) 8 .
p
Demonstrac
ao: Seja p um primo mpar. Note que e igual ao n
umero
de elementos do conjunto T = {2, 4, 6, 8, . . . , p 1} que sao maiores que p1
.
2
Se p = 8k + 1 entao (p 1)/2 = 4k e ha 2k elementos de T menores ou
iguais a (p 1)/2 e 2k elementos maiores que (p 1)/2. Portanto, e par e
2 e um resduo quadratico de p.
Se p = 8k 1 entao (p1)/2 = 4k 1 e ha 2k 1 elementos de T menores
ou iguais a (p 1)/2 e 2k elementos maiores que (p 1)/2. Portanto, e
par e 2 e um resduo quadratico de p.
Se p = 8k + 3 entao (p 1)/2 = 4k + 1 e ha 2k elementos de T menores
ou iguais a (p 1)/2 e 2k + 1 elementos maiores que (p 1)/2. Portanto,
e mpar e 2 e um nao-resduo quadratico de p.
Se p = 8k +5 entao (p1)/2 = 4k +2 e ha 2k +1 elementos de T menores
ou iguais a (p 1)/2 e 2k + 1 elementos maiores que (p 1)/2. Portanto,
e mpar e 2 e um nao-resduo quadratico de p.
2
(
2

Os n
umeros 1 , 2 , 3 , . . .
se

p1
2

)2
, sao todos incongruentes mod p, pois

r 2 s2

mod p

entao r s mod p ou r s mod p, e a segunda alternativa e impossvel.


Mais,
r2 (p r)2 mod p,
p1
p1
portanto, se p for mpar, ha
resduos quadraticos e
nao-resduos
2
2
quadraticos de p.
Teorema 4.16. Seja p um primo mpar. O produto de dois resduos quadraticos de p ou de dois nao-resduos quadraticos de p e um resduo quadratico
de p, enquanto que o produto de um resduo quadratico com um nao-resduo
quadratico e um nao-resduo quadratico. Isto e,
( )( ) ( )
a
b
ab
=
p
p
p
62

Demonstrac
ao: Pelo teorema 4.11,
( )( )
p1 p1
b
a
a 2 b 2
p
p
p1

= (ab) 2
( )
ab
=
p
Donde,

mod p
mod p
mod p

( )( ) ( )
b
ab
a
=
p
p
p
2

Sejam p e q dois primos mpar distintos. Se q e um resduo quadratico de


p, entao a congruencia
x2 q mod p
e sol
uvel. Analogamente, se p e um resduo quadratico de q, entao a congruencia
x2 p mod q
tambem e sol
uvel. Nao parece haver qualquer conexao obvia entre estas
duas congruencias. Uma das grandes descobertas da matematica efectuadas
no seculo XVIII e que, de facto, ha uma relacao poderosa e subtil entre as
congruencias mencionadas, que depende apenas de p mod 4 e de q mod 4.
Esta e a celebrada lei da reciprocidade quadratica de Gauss. Iremos enunciar este resultado e ver alguns exemplos, no entanto, nao provaremos este
resultado, pois seria demasiado pesada para esta introducao `a Teoria dos
N
umeros.
Teorema 4.17. Sejam p e q primos mpar distintos. Se p 1 mod 4 ou
q 1 mod 4 entao p e um resduo quadratico mod q se e so se q e um
resduo quadratico mod p. Se p q 3 mod 4, entao p e um resduo
quadratico mod q se e so se q e um nao-resduo quadratico mod p. Isto e
( )( )
p1 q1
p
q
= (1) 2 2
q
p

63

Exemplo. A lei da reciprocidade quadratica da-nos um metodo efectivo para


calcular o valor do smbolo de Legendre. Por exemplo, como
7 59 3 mod 4,
e 59 3 mod 7 temos

7
59

)
59
=
7
( )
3
=
7
( )
7
=
3
( )
1
=
3
=1

Portanto, 7 e um resduo quadratico de 59.


Exemplo. Como 51 = 3 17 e 97 17 1 mod 4, temos
( ) ( )( )
51
3
17
=
97
97
97
( )( )
97
97
=
3
17
( )( )
1
12
=
3
17
( )2 ( )
2
3
=
17
17
( )
17
=
3
( )
1
=
3
= (1)
= 1

64

31
2

Exemplo. A lei da reciprocidade quadratica tambem nos permite determinar


todos os primos p para os quais um dado inteiro a e um resduo quadratico.
Por exemplo, se a = 5, entao
( ) ( ) {
5
p
1
se p 1, 4 mod 5
=
=
1 se p 2, 3 mod 5
p
5

4.7

Algoritmo de Tonelli-Shanks

Teorema 4.18. Seja p um n


umero primo tal que p 3 mod 4. Seja a um
inteiro que e um quadrado mod p (i. e., existe b tal que a b2 mod p).
p+1
Entao a 4 e a raiz quadrada de a mod p.
p+1

Demonstrac
ao: Se a 0 mod p entao, claramente, a 4 e a raiz
quadrada de a mod p. Suponhamos que a 0 mod p, entao b 0 mod p.
Como p 3 mod 4, temos que p+1
e um inteiro. Basta-nos provar que o
4
p+1
quadrado de a 4 e congruente com a mod p. Temos
( )
p+1
p1
a
2
4
2
(a ) a a
a
a mod p,
p
2

pelo Lema de Euler.

Embora o teorema anterior mostre que a determinacao de razes quadradas


mod p e muito simples quando p 3 mod 4, estas podem tambem ser calculadas qualquer primo mpar, atraves do seguinte algoritmo, conhecido como
algoritmo de Tonelli-Shanks.
Dado p primo mpar e n um resduo quadratico de p, pretende-se determinar uma solucao da congruencia x2 n mod p.
1. Sejam d e s inteiros positivos tais que m e mpar e p 1 = d2s , isto
e, divida-se p 1 por 2 tantas vezes quantas for possvel (e denotamos
esse n
umero de vezes por s), sendo d o resultado nal.
2. Sejam r n

d+1
2

mod p, t nd mod p e s = s.

3. Determinar um nao-resduo quadratico de p, que denotamos por z. Seja


c z d mod p.
65

4. Se t 1 mod p entao r2 n mod p e, portanto, r e uma das razes


quadradas de n. O algoritmo termina.
5. Caso contrario, determinar o menor i, com 1 i < s , tal que t2 1
mod p.
i

s i1

6. Seja b c2
mod p, r passa a ser rb mod p, t passa a ser tb2
mod p, c passa a ser b2 mod p e s passa a ser i. Voltar ao passo 4.
p1

Nota: Se p 3 mod 4, obtem-se nd n 2 1 mod p, pelo lema de


Euler, portanto o passo 4. da a solucao mencionada no teorema anterior,
n

d+1
2

p+1
4

mod p.

Como n e um resduo quadratico mod p, tem-se


s 1

t2

p1
2

mod p,

o que garante a existencia de i nas condicoes indicadas no passo 5.


Note-se que em cada iteracao do ciclo, tem-se r2 nt mod p, portanto
se t 1 mod p entao r e uma das razes quadradas de n.
Como z e um nao-resduo quadratico entao a ordem de c mod p e 2s o
que implica que a ordem de b2 mod p e 2i . Como a ordem de t tambem
era 2i , o novo t vai ter ordem 2j com j < i. Este facto, garante-nos que o
algoritmo vai ter de parar.
Exemplo. Vamos determinar a raiz quadrada de 143 mod 193. Como 193
3+1
1 = 26 3, temos d = 3 e s = 6. Entao r1 143 2 184 mod 193 e
t1 1433 64 1 mod 193.
Um nao-resduo quadratico de 193 e 5. Assim c1 53 125 mod 193. A
641
ordem de t mod 193 e 24 , portanto, i1 = 4. Obtemos assim, b1 1252

2
185 mod 193, r2 184 185 72 mod 193, c2 185 64 mod 193,
t2 64 64 43 mod 193 e s2 = 4.
Continuando desta forma, obtemos as sequencias (r1 , r2 , r3 , r4 , r5 ) = (184, 72, 169, 126, 23)
e (t1 , t2 , t3 , t4 , t5 ) = (64, 43, 112, 1, 1). Portanto 232 143 mod 193.

4.8

Cifra de Rabin

Ha vantagens em utilizar criptosistemas cuja seguranca seja baseada na diculdade de um problema matematico que tambem tenha interesse fora da
66

criptograa. Qualquer progresso signicante para resolver este problema e


rapidamente tornado p
ublico, porque havera muitos matematicos a trabalhar
neste problema, sem estarem preocupados com a sua relevancia criptograca,
sendo assim difcil manter secreto o progresso que e feito sobre este problema
particular. Assim, evita-se (em princpio) que alguem secretamente quebre o
criptosistema e que tire vantagens de outros ainda usarem um ciptosistema
que nao e mais seguro. Claro que nao ha maneira de saber com certeza absoluta se, por exemplo, alguem ja descobriu um metodo ecaz de atacar o
RSA, talvez mesmo sem saber um algoritmo rapido para factorizar inteiros.
Ate agora nunca foi provado que quebrar o RSA e tao difcil como factorizar inteiros. O sistema de Rabin, tambem e baseado na diculdade que
factorizar inteiros, mas em contraste com o RSA, pode ser mostrado que
alguem que quebre o sistema de Rabin, pode tambem factorizar inteiros de
uma maneira eciente (e portanto, pode tambem quebrar o RSA).
Tal como no RSA, precisamos de dois primos grandes p e q, so que neste
sistema costuma-se impor a condicao adicional p, q 3 mod 4, para simplicar os calculos. Note-se que o sistema funciona mesmo que os primos que
nao veriquem esta condicao. A chave p
ublica da Alice e n = pq, a chave
privada e o par (p, q). O espaco das mensagens originais e {0, 1, . . . , n 1}.
Para cifrar a mensagem m {0, 1, . . . , n 1}, Bob determina
c m2

mod n

Para decifrar a mensagem, Alice so tem que determinar a raiz quadrada


de c.
Para recuperar a mensagem original m da mensagem cifrada c, Alice
determina
p+1
q+1
mp c 4
mod p e mq c 4
mod q.
Assim mp sao as duas razes quadradas de c mod p e mq sao as duas
razes quadradas de c mod q. Usando o teorema chines do resto, obtem-se
quatro inteiros x1 , x2 , x3 e x4 cujo quadrado e congruente com c mod p e um
deles e a mensagem original m.
Ha varios metodos para escolher a mensagem original das quatro razes
quadradas de c mod n. Por exemplo, Alice pode escolher aquela que faz
sentido apos ter sido descodicada. Por vezes este metodo nao funciona: por
exemplo, se a mensagem enviada e uma chave de um sistema criptograco
classico (tambem conhecido por sistema simetrico, i. e. onde nao ha chaves

67

p
ublicas). Se Bob cifrar apenas mensagens com uma certa forma, por exemplo, os primeiros 64 bits sao iguais aos u
ltimos 64 bits, e pouco provavel que
mais de uma das razes quadradas tenha esta forma. Basta entao escolher a
raiz quadrada que tem esta forma. Note-se que se e escolhido este metodo
para recuperar a mensagem original, a equivalencia entre quebrar o sistema
de Rabin e factorizar inteiros, deixa de existir. Depois de ilustrarmos este
sistema com um exemplo simples, provaremos esta equivalencia.
umeros primos p = 11 e q = 23. Entao n = 253.
Exemplo. Alice usa os n
Bob cifra a mensagem m = 158 calculando
c m2

mod n.

Verifica-se que c = 170. Alice calcula


mp c

p+1
4

mod p e mq c

q+1
4

mod q,

obtendo mp = 4 e mq = 3. Usando o teorema chines do resto, Alice obtem


quatro razes quadradas de c mod n, que sao 26, 95, 158, 227, uma delas e a
mensagem original.
Teorema 4.19. Quebrar o sistema Rabin e tao difcil como factorizar inteiros. Por outras palavras, se alguem descobrir um algoritmo que quebre
o sistema de Rabin, ele pode usar este algoritmo para factorizar inteiros de
uma maneira eficiente.
Demonstrac
ao: Claramente, qualquer pessoa que consiga factorizar n ,
consegue tambem quebrar o sistema de Rabin. Suponhamos agora que Olga
descobriu um algoritmo, R, para quebrar o sistema de Rabin. Seja n, o
modulo p
ublico, e sejam p e q, os seus factores primos. Dada uma mensagem
cifrada c mod n, Olga obtem m = R(c). Portanto, dado um quadrado
c mod n, o algoritmo R, permite determinarmos uma raiz quadrada de c
mod n. Vejamos como podemos usar este algoritmo para factorizar n: Olga
escolhe, aleatoriamente, um inteiro 1 x n 1. Se (n, x) = d = 1 entao
d e um factor de n e a factorizacao de n esta encontrada (n = d nd ). Caso
contrario, Olga determina
c = x2

mod n e m = R(c).

Sabemos que m e uma das razes quadradas, mod n, de c, tal como x, mas
nao e necessariamente igual a x. No entanto, m satisfaz um dos seguintes
68

pares de congruencias:
mx
mx
m x
m x

mod
mod
mod
mod

p
p
p
p

e
e
e
e

m x mod q
m x mod q
m x mod q
m x mod q

No primeiro caso, m = x e (m x, n) = n; no segundo caso, (m x, n) = p;


no terceiro caso, (m x, n) = q e no u
ltimo caso, m = n x e, como
(n, x) = 1, obtemos (m x, n) = 1. Portanto, este procedimento factoriza n
com 50% de probabilidade. Depois de aplicarmos este procedimento k vezes,
n e factorizado com probabilidade 1 (1/2)k .
2

Exemplo. Seja n = 253. Suponhamos que Olga consegue determinar razes


quadradas mod 253 com o seu algoritmo R. Ela selecciona, x = 17 e
obtem (17, 253) = 1. Depois calcula c 172 36 mod 253. As razes
quadradas de 36 mod 253 sao 6, 17, 236 e 247. Temos (6 17, 253) = 11
e (247 17, 253) = 23, portanto, se o algoritmo R obteve 6 ou 247 entao
Olga encontrou a factorizac
ao de 253, caso contr
ario, Olga escolhe outro inteiro x e aplica o procedimento outra vez. Depois de poucas aplicac
oes e
muito provavel que Olga tenha encontrado a factorizac
ao de n sem demorar
demasiado tempo.

4.9

Protocolo Die-Hellman

Nesta seccao, e descrito o protocolo de Die e Helman para troca de chaves


secretas atraves de canais inseguros. Este protocolo nao e um sistema criptograco, mas serve de base ao sistema criptograco ElGamal, que descreveremos na proxima seccao.
Temos a seguinte situacao: Alice e Bob pretendem usar um sistema
simetrico para a sua comunicacao atraves de um canal inseguro. Primeiro
tem que trocar uma chave secreta que ambos irao utilizar. O sistema de troca
de chaves Die-Hellman, permite que Alice e Bob troquem as suas chaves e
mesmo que alguem intercepte esta troca de chaves, a informacao obtida nao
pode ser usada para construir a chave secreta.
69

O sistema de troca de chaves Die-Hellman utiliza um outro problema


difcil de teoria dos n
umeros, nomeadamente o problema do logaritmo discreto. Comecemos por descrever este problema:
Seja p um n
umero primo e seja g uma raiz primitiva de p. Entao g gera
o grupo cclico (Z/pZ) . Portanto, para qualquer 1 A p 1, existe
0 a p 2 tal que
A g a mod p
a a chamamos o logaritmo discreto de A na base g. A determinacao de
logaritmos discretos e considerado um problema difcil. Ate agora, nao existe
nenhum algoritmo eciente para resolver este problema.
Voltemos ao protocolo de Die-Hellman. Primeiro, Alice e Bob chegam a
acordo sobre um primo p grande e uma raiz primitiva de p, digamos g. Tanto
p como g podem ser p
ublicos. Em seguida, Alice escolhe aleatoriamente um
inteiro 0 a p 2 e envia A g a mod p para Bob. O expoente a e
mantido secreto. Analogamente, Bob escolhe aleatoriamente 0 b p 2,
e envia B g b mod p para Alice. Tambem b e mantido secreto. Para obter
a chave secreta comum, Alice calcula
B a g ab

mod p

Ab g ab

mod p.

e Bob calcula
A chave secreta e k g ab mod p.
O inimigo Orlando, conhece os inteiros p, g, A e B, mas nao conhece os
logaritmos discretos a de A e b de B na base g. Portanto, ele conhece g a
mod p e g b mod p e gostaria de conhecer g ab mod p. Ate agora, nunca foi
encontrado um algoritmo que permita obter k, sabendo A e B. O u
nico
processo conhecido para quebrar o protocolo de Die-Hellman e conseguir
primeiro determinar os logaritmos discretos de A e de B, e os algoritmos
existentes para resolver este problema sao pouco ecientes (demoram muito).

4.9.1

Ataque do homem no meio

Existe um ataque a este protocolo que explora o facto de Alice nao poder
vericar que as mensagens que recebe vem de facto de Bob. Este ataque
chama-se o ataque do homem no meio. Orlando intercepta todas as mensagens entre Alice e Bob. Faz-se passar por Bob e troca uma chave com
70

Alice e faz-se passar por Alice e troca uma chave com Bob. Sempre que
Bob envia uma mensagem cifrada a Alice, usa a chave que tinha trocado
com Orlando, pensando que esta a usar a chave de Alice. Orlando recebe a
mensagem e decifra-a, depois altera esta mensagem (ou nao) e envia-a para
Alice usando a chave que tinha trocado com ela.
Para prevenir este tipo de ataques, podem ser usadas assinaturas. Este
assunto sera tratado mais tarde.

4.10

Sistema ElGamal

Este sistema usa o facto de ser difcil obter logaritmos discretos, tal como o
protocolo de Die-Hellman.
Alice escolhe um n
umero primo p e uma raiz primitiva g mod p. Depois,
Alice escolhe 0 a p 2 aleatoriamente e calcula
A ga

mod p.

A chave p
ublica de Alice e o terno (p, g, A). A sua chave secreta e o exponente a. O inteiro A e a parte da chave, proveniente do protocolo de DieHellman, que pertence a Alice. O espaco de mensagens originais e o conjunto
{0, 1, . . . , p 1}. Para cifrar uma mensagem e envia-la para Alice, Bob usa
a chave p
ublica de Alice, (p, g, A). Escolhe um inteiro b {1, . . . , p 2} e
calcula
B g b mod p.
O inteiro B e a parte da chave, proveniente do protocolo de Die-Hellman,
que pertence a Bob. Para cifrar a mensagem m, Bob calcula
c Ab m

mod p.

Bob envia a Alice o par (B, c). Note que B depende da chave p
ublica de
Alice (depende de A, g e p escolhidos por Alice) e, portanto nao faz parte da
chave p
ublica de Bob, i. e. da chave que Bob usa para receber mensagens.
Na sua chave p
ublica, Bob tem provavelmente outro primo q e outra raiz
primitiva de q.
Para decifrar a mensagem m, Alice determina x = p 1 a e calcula B x c
mod p que vai ser a mensagem original m pois
B x c g b(p1a) Ab m (g p1 )b (g a )b Ab m Ab Ab m m
71

mod p.

4.10.1

Ataque da repetic
ao da chave efemera

Para cada nova mensagem que envie a Alice, Bob deve escolher um novo
expoente b, caso contrario o seguinte ataque permite decifrar as mensagens:
Se Bob escolher o mesmo expoente b para cifrar as mensagens m e m ,
ele obtem
c Ab m mod p e c Ab m mod p
donde

c c1 m m1

mod p

Um atacante que saiba m pode obter m , usando a formula


m c c1 m

4.11

mod p.

Sistema Merkle-Hellman

Nesta seccao descrevemos outro tipo de criptosistema que e baseado no problema do saco-mochila (em ingles, Knapsack). Dados k inteiros v0 , . . . , vk1
e um inteiro V , o problema Saco-mochila consiste em determinar se existe
um subconjunto dos k inteiros cuja soma seja V , i.e. se existem i {0, 1},
tais que
k1

i vi = V.
i=0

Note que podem haver imensas solucoes, nenhuma solucao, ou uma u


nica
solucao, dependendo dos vi s e de V . Um caso particular do problema sacomochila, e quando os vi s, ordenados de forma crescente, tem a propriedade de
que cada um e maior que a soma dos anteriores. Este caso especial e chamado
super crescente. Por exemplo, a sequencia (2, 3, 7, 15, 31) e supercrescente.
Sabe-se que o problema geral do saco-mochila pertence `a classe de problemas muito difceis conhecidos como NP-completos (i. e. problemas NP
tais que qualquer outro problema NP se pode reduzir a eles). Os problemas
NP-completos tem a extraordinaria propriedade de que se um deles estiver
na classe P (existir um algoritmo que o resolva em tempo polinomial), entao
P=NP.
O problema do saco-mochila super crescente e, no entanto, muito mais
facil de resolver. O seguinte algoritmo (de tempo polinomial) permite-nos
resolver qualquer problema do saco-mochila super crescente:
Seja v0 , . . . , vk1 uma sequencia super crescente e V um inteiro.
72

1. Faca W = V e j = k.
2. Se vi > W para 0 i j 1 ir para o passo 4. Caso contrario,
determine o maior dos vi s, digamos vi0 , tal que vi0 W . Faca i = 0
para i > i0 e i0 = 1.
3. Substitua W por W vi0 e j = i0 . Se W > 0, voltar ao passo 2.
4. Se W = 0 o algoritmo termina e encontrou-se a solucao
= (0 , . . . , k1 ),
(que e u
nica) do problema. Se W > 0, todos os restantes vi s sao
maiores que W , portanto, nao ha solucao do problema.
Exemplo. Considere a sequencia (2, 3, 7, 15, 31) e V = 24. Entao 4 = 0,
3 = 1 (e substituimos 24 por 9), 2 = 1 (e substitui-se 9 por 2), 1 = 0 e
0 = 1. Portanto, a solucao e = (1, 0, 1, 1, 0).
Estamos em condicoes de descrever o criptosistema de Merkle-Hellman
(tambem chamado sistema do saco-mochila), baseado no problema descrito
atras. As mensagens originais vao ser inteiros com k bits. Por exemplo, se
usarmos o alfabeto de 27 letras (com o espaco em branco) e k = 5, temos a
codicacao (letra a letra, neste caso) 2 = (00000)2 , A = (00001), . . . , Z =
(11010). Em seguida, escolhemos uma sequencia super crescente v0 , . . . , vk1 ,
um inteiro n > v0 + v1 + + vk1 e um inteiro 0 < a < n tal que (a, n) = 1
(costuma-se tomar n primo). Calculamos b a1 mod n e a sequencia de
inteiros positivos
wi avi mod n
para qualquer 0 i k 1. A chave secreta de Alice consiste da sequencia
dos vi s e dos inteiros n, a e b. A sua chave p
ublica e (w0 , . . . , wk1 ). Esta e
a chave para cifrar.
Se Bob pretende enviar uma mensagem m = (k1 , 0 )2 a Alice, usa a
chave {wi } e envia
k1

c
i wi .
i=0

Note que para determinar a mensagem original a partir de c um atacante


sotem que resolver um problema do saco-mochila mas, neste caso, este
problema e difcil porque a sequencia {wi } nao e super crescente.
73

Para decifrar c, Alice calcula V bc mod n. Como


bc

k1

i=0

i bwi

k1

i bavi

i=0

k1

i vi

mod n

i=0

k1
Entao V =
encia {vi } e super
i=0 i vi (note que V < n). Como a sequ
crescente, Alice usa o algoritmo descrito atras para obter a solucao =
(0 , . . . , k1 ) e obtem a mensagem m = (k1 , 0 )2 .
Exemplo. Consideremos a codificac
ao em bits do nosso habitual alfabeto de
27 letras. Tomemos a chave secreta
((v0 , . . . , vk1 ), n, a) = ((2, 3, 7, 15, 31), 61, 17)
Entao b = 18 e a chave de cifrar e (34, 51, 58, 11, 39). Queremos enviar
a mensagem SIM. Temos que, S= (10011)2 , I= (01001)2 e M=
(01101)2 . Portanto, enviamos os inteiros 124 = 34 + 51 + 39, 45 = 34 + 11 e
103 = 34+58+11. A mensagem cifrada 124, 45, 103 poderia ser descodificada
usando, neste caso, pares de letras. Como
18 124 36 mod 61, 18 45 17 mod 61 e 18 103 24 mod 61
obtemos os inteiros 36, 17, 24. Em seguida, usamos a nossa sequencia para
resolver o problema do saco-mochila para estes inteiros. Assim 36 = 31+3+2,
obtendo-se a letra (10011) =S, 17 = 15 + 2, obtendo-se (01001) =I, e 24 =
15 + 7 + 2, obtendo-se (01101) =M.
Durante algum tempo, houve algum optimismo acerca do uso deste criptosistema, porque a base da sua seguranca e um problema que se sabe ser
NP-completo (os problemas factorizacao e logaritmo discreto, sao NP, mas
nao se sabe se sao NP completos). Em 1982, Shamir encontrou um algoritmo
que permitia quebrar este sistema em tempo polinomial. Varias variacoes
deste sistema tem sido consideradas, tendo algumas sido tambem quebradas
(e. g. Brickell 1985). Uma das variacoes deste sistema que ainda nao tera
sido quebrado e o sistema de Chor-Rivest, que nao iremos descrever neste
curso.

74

Captulo 5
Primalidade
Existem imensas situacoes em que podemos necessitar de saber se um inteiro enorme e primo. Por exemplo, nos sistemas criptogracos estudados
no captulo anterior, precisamos quase sempre de pelo menos um primo
enorme e aleatorio. Uma interpretacao do que signica primo enorme e
aleatoriopode ser a seguinte: Primeiro geramos um inteiro mpar n0 , usando um gerador de n
umeros aleatorios e depois testar a primalidade de n0 ,
n0 + 2, . . . ate que encontremos o primeiro primo p n0 . Outra situacao
em que se usam testes de primalidade, e quando se quer determinar se inteiros de formas muito especiais sao ou nao primos. Por exemplo, n
umeros
k
de Mersenne (da forma 2p 1) ou n
umeros de Fermat (da forma 22 + 1).
Um teste de primalidade probabilstico e um criterio para um n
umero n
nao ser primo. Se n passa uma aplicacao de um teste de primalidade, entao
pode ser que seja primo. Se n falha um teste de primalidade entao e (obrigatoriamente) composto. Se passar muitas vezes um teste de primalidade entao
tem grande probabilidade de ser primo (podendo por vezes ter-se a certeza
que e realmente primo). No caso de n ser composto camos ainda com o
problema de factorizar n. Com os algoritmos existentes consegue-se vericar
se um n
umero com alguns milhares de algarismos e primo, com grande probabilidade (se n tiver uma forma especial, por exemplo se for um n
umero de
Mersenne ou de Fermat, consegue-se atestar a primalidade de n
umeros com
milhoes de algarismos), enquanto que so se consegue factorizar n
umeros (que
nao tenham nenhuma forma particular) com perto de 200 algarismos.

75

5.1

Teste de Fermat

Antes de descrevermos este teste de primalidade recordemos algumas denicoes


de teoria elementar dos n
umeros.
Denic
ao. Seja a > 1 um inteiro positivo. Chamamos pseudoprimo para a
base a a um composto n tal que (a, n) = 1 e n | (an a).
Denic
ao. Um composto n que e pseudoprimo para qualquer base a, tal
que (a, n) = 1 chama-se n
umero de Carmichael.
Exemplo. Os n
umeros 561, 1105 e 6601 sao n
umeros de Carmichael.
O teste de Fermat e baseado no Pequeno Teorema de Fermat. Dados n e
1 < a < n, o teste consiste vericar se an1 1 mod n. Podemos aplica-lo
usando sucessivas bases a: Dado um inteiro n, comecamos por calcular
a 2n1

mod n

se a = 1 entao n e composto. Se a = 1, calculamos


b 3n1

mod n

Caso b = 1, temos que n e composto. Se b = 1 calculamos 5n1 mod n e


assim sucessivamente.
Infelizmente, ha inteiros que passam este teste para qualquer base, os
chamados n
umeros de Carmichael. Portanto, nao e possvel provar que ne
primo, usando sucessivas aplicacoes deste teste.
Exemplo. Considere n = 341. Temos 2340 1 mod 341. Mas 3340 56
mod 341. Portanto, 341 e composto. De facto, 341 = 11 31. Prov
amos
tambem que 341 e pseudoprimo para a base 2 mas nao e pseudoprimo para
a base 3.
Note que este teste, embora prove que n e composto, nao da qualquer
indicacao sobre os factores de n. So mostra que a n falta uma propriedade
que todos os primos tem.

76

5.2

Teste de Miller-Rabin

Nesta seccao, descrevemos o teste de Miller-Rabin. Contrariamente ao teste


de Fermat, para este teste nao ha inteiros correspondentes aos n
umeros de
Carmichael, i. e. o teste de Miller-Rabin pode provar que e de facto primo
qualquer inteiro que passe o teste um n
umero suciente de vezes.
Teorema 5.1. Seja n um primo mpar e sejam s e d tais que n 1 = 2s d,
com d mpar. Se a e um inteiro tal que (a, n) = 1, entao ou
ad 1 mod n
ou existe 0 r s 1 tal que
rd

a2

mod n

Demonstrac
ao: Seja a tal que (a, n) = 1. Como n e primo temos que
(n) = n1 = 2s d. Donde, k = ordn (ad ) e uma potencia de 2. Se k = 1 = 20 ,
temos que
ad 1 mod n.
Se k > 1 entao existe 1 l s tal que k = 2l e
l

a2 d 1 mod n.
Mas entao a2 d 1 mod n e a2 d tem ordem 2 mod n. Logo a2 d e
solucao da congruencia x2 1 mod n. Como n e primo, as u
nicas solucoes
desta congruencia sao 1 e 1. Portanto,
l1

l1

a2

l1 d

l1

1 mod n
2

Denic
ao. Seja n um composto mpar, e sejam s e d tais que n 1 = 2s d,
com d mpar. Seja a tal que (a, n) = 1. Se n e a satisfazem a condicao
rd

ad 1 mod n ou existe 0 r s 1 tal que a2

1 mod n (5.1)

entao dizemos que n e pseudoprimo forte para a base a.


77

Denic
ao. Dizemos que um inteiro a e uma testemunha de que n e composto
se (a, n) = 1 e a condicao (5.1) nao e vericada.
Dados a e n, o teste de Miller-Rabin, consiste em vericar se a condicao
(5.1) e ou nao vericada por estes inteiros. Se n falhar esta condicao entao
n e composto e a e uma sua testemunha.
Exemplo. Seja n = 561. Ja vimos que n e um n
umero de Carmichael,
portanto o teste de Fermat nao da para provar que n e composto. Temos que
560 = 24 35. Consideremos a = 2. Entao
235 263 mod 561
2235 166 mod 561
22

2 35

23 35

67 mod 561
1 mod 561

Portanto, 561 e composto e o inteiro 2 serve para testemunhar este facto.


Para que o teste de Miller-Rabin seja eciente, e importante que exista um
n
umero suciente de testemunhas para cada composto. O proximo resultado
mostra que ha imensas testemunhas.
Teorema 5.2. Seja n 3 um composto mpar. O conjunto {1, . . . , n 1}
contem no maximo n1
n
umeros que sao primos com n e nao sao testemunhas
4
de que n e composto.
Suponhamos que n e um inteiro mpar enorme que queremos vericar se e
primo ou nao. Seja 1 < a < n 1 escolhido aleatoriamente. A probabilidade
de n ser composto e a nao ser uma testemunha e, no maximo, 0.25. A
probabilidade de escolhermos k inteiros a que nao sejam testemunha e menor
que
1
.
4k
Portanto, se um inteiro n passa o teste de Miller-Rabin k vezes, e muito
provavel que seja primo (com probabilidade pelo menos 1 1/4k ). Para
k = 20, a probabilidade de ser composto tendo passado o teste de MillerRabin k vezes e 1 em um biliao. No entanto, note-se que este teste nao nos
garante que n seja de facto primo.
Ja vimos que, dado um composto n, ha mais de 3(n 1)/4 testemunhas
no intervalo [2, n 2]. Sera que ha um n
umero B, independente de n, tal
78

que ha sempre uma testemunha a < B de que n e composto? Infelizmente, a


resposta a esta pergunta e nao (provado por Alford, Granville e Pomerance).
No entanto, se a Hipotese de Riemann extendida (ERH) for verdade, temos
o seguinte resultado
Teorema 5.3. Seja n um n
umero composto. Admitindo a ERH, ha uma
testemunha a, com a < 2 log2 n de que n e composto.
Portanto, se ERH for verdadeira, existe um algoritmo polinomial para
vericar se n e primo, baseado no teste de Miller-Rabin.

5.3

Teste de Solovay-Strassen

O proximo teste que iremos estudar e baseado no lema de Euler sobre o


smbolo de Legendre, ja estudado. Comecemos por denir o smbolo de
Jacobi, que e uma generalizacao do smbolo de Legendre.

Denic
ao. Seja a um inteiro e n = ki=1 pai i um inteiro mpar. Dene-se o
smbolo de Jacobi, da seguinte maneira
( )a i
(a)
a
k
=
i=1
,
n
pi
( )
onde ap e o smbolo de Legendre.
Para o smbolo de Jacobi tambem e valida a lei da reciprocidade quadratica,
i. e., se m e n sao inteiros impares
(m)
(n)
m1 n1
= (1) 2 2
.
n
m
O lema de Euler diz-nos que se p um primo mpar e a um inteiro tais que
p - a. Entao
( )
p1
a
=a 2
mod p.
p
Dado um inteiro mpar n e a um inteiro, o Teste de Solovay-Strassen
consiste em vericar se
(a)
n1
2

mod n.
a
n
79

Denic
ao. Um inteiro n composto que passe o teste de Solovay-Strassen
para um dado a e chamado pseudoprimo de Euler-Jacobi para a base a
Teorema 5.4. Para qualquer n
umero composto n h
a pelo menos n/2 bases
menores que n tais que n nao e um pseudoprimo de Euler-Jacobi para qualquer uma dessas bases.

5.4

Teste n 1 de Lucas

Nas seccoes anteriores encontramos alguns testes probabilisticos para vericar se n e composto. O proximo teste e determinista, i. e. se n passar o
teste entao n e de facto primo.
Teorema 5.5 (Lucas). Se a e n sao inteiros com n > 1, e
an1 1 mod n, mas a

n1
q

1 mod n para qualquer primo q | n 1

entao n e primo.
Demonstrac
ao: A primeira condicao implica que ordn (a) | n 1. A
segunda condicao, mostra que ordn (a) nao e um divisor proprio de n 1.
Portanto, ordn (a) = n 1. Mas pelo teorema de Euler, ordn (a) | (n),
donde n 1 (n). Mas se n e composto, (n) < n 1, portanto, n e
primo.
2

Para usarmos o teorema de Lucas, e necessario saber a factorizacao em


primos de n 1, e em geral essa factorizacao pode ser difcil de encontrar.
Alem disso, se n e de facto primo, temos que tomar a uma raiz primitiva de
n. Sabemos que ha (n 1) razes primitivas, mas estas podem ser difceis
de encontrar. No entanto, para inteiros com formas especiais, o teorema de
Lucas, permite-nos obter um teste muito eciente.
Teorema 5.6 (Teste de Pepin). Para k 1, o n
umero Fk = 22 + 1 e primo
se e so se
Fk 1
3 2 1 mod Fk .
k

Demonstrac
ao: Seja k 1. Suponhamos que
3

Fk 1
2

1 mod Fk
80

entao o teorema de Lucas diz-nos que Fk e primo. Reciprocamente suponhamos que Fk e primo. Como 2k e par, entao
k

22 1 mod 3,
donde Fk 2 mod 3. Mas Fk 1 mod 4, logo
( )
3
= 1
Fk
Pelo teorema 4.11, obtemos a congruencia desejada.

Teorema 5.7 (Teste de Lucas-Lehmer). Seja s0 = 4 e si = s2i1 2. Entao


Mp = 2p 1 e primo se e so se sp2 0 mod Mp .

81

Captulo 6
Factorizac
ao
Neste captulo, vamos descrever alguns algoritmos importantes de factorizacao. Iremos assumir que n e composto. Este facto pode ser provado
usando, por exemplo, um dos algoritmos do captulo anterior.
Em muitos dos algoritmos de factorizacao, verica-se primeiro, por experimentacao, se n e divisvel por n
umeros primos pequenos, e. g. p B,
com B xo.
Exemplo. Queremos factorizar n = 321 +1 = 10460353204. Experimentando
primeiro todos os primos menores que 50, verifica-se que
n = 22 72 43 1241143.
Seja m = 1241143. Como 2m1 793958 mod m, o pequeno teorema de
Fermat implica que m e composto. Ficamos ainda com a tarefa de factorizar
m.

6.1

M
etodo p 1 de Pollard

Ha algoritmos de factorizacao que funcionam muito bem para inteiros compostos que vericam certas propriedades. O metodo p 1, e um desses
algoritmos e foi inventado por John Pollard. Suponhamos que n e composto
e que tem um factor primo p, tal que p 1 so tem divisores primos pequenos.
Entao e possvel obter um m
ultiplo k de p 1 sem sabermos o valor de p 1.
Basta tomar k como sendo o mnimo m
ultiplo comum de todos os inteiros
ate um limite B. Podemos tambem tomar k como sendo B!.
82

Denamos k = k(B) = [2, 3, 4, . . . , B], onde [a, b] representa o mnimo


m
ultiplo comum de a e b. Se n tiver um divisor primo p tal que todos os
divisores de p 1 que sao potencias de primos forem menores que k, entao
p 1 | k. O pequeno teorema de Fermat, implica que
ak 1 mod p,
para qualquer inteiro a, tal que (a, p) = 1. Portanto, p | (ak 1). Se
n - (ak 1) entao (ak 1, n) e um divisor proprio de n.
O algoritmo consiste em comecar com um limite B e uma base a. Se
k
(a 1, n) nao der um divisor proprio de n (i. e. se (ak 1, n) = 1 ou
(ak 1, n) = n), entao experimenta-se outro limite B ou outra base a.
Exemplo. Continuando o exemplo anterior, vamos agora factorizar m =
1241143. Seja B = 13, entao
k = 8 9 5 7 11 13
e
(2k 1, m) = 547.
Entao p = 547 e um divisor de n. Portanto, m = 547 2269. Facilmente, se
verifica que 547 e 2269 sao primos.

6.2

M
etodo r
o de Pollard

Nesta seccao, vamos analisar outro metodo de factorizacao introduzido por


J. Pollard. Sejam l um inteiro e f uma funcao aleatoria de S = {0, 1, . . . , l}
para S. Seja x0 um elemento aleatorio e considere-se a sequencia
x0 , x1 = f (x0 ), x2 = f (x1 ), . . . .
Como S e nito, a sequencia ira tornar-se cclica ao m de um certo n
umero
de termos. Se zermos um diagrama que mostre este comportamento, ele
assemelhar-se-a a , da a origem do nome do metodo.
Seja n um inteiro composto. O primeiro passo do metodo ro, consiste em
escolher uma funcao f de Z/nZ para Z/nZ que seja facil determinar f (x).
Costuma-se usar polinomios com coecientes inteiros, e. g. f (x) = x2 + 1.
Em seguida, toma-se um inteiro positivo x0 , e. g. x0 = 1 ou x0 = 2.
83

Calculam-se as sucessivas iteracoes xk = f (xk1 ) mod n. Depois fazemse comparacoes entre diferentes xi s, esperando encontrar dois que sejam
diferentes mod n mas que sejam iguais mod l para algum divisor proprio l
de n. Quando encontrarmos xj e xk nestas condicoes (i. e. xj xk mod l),
temos que (xj xk , n) e um divisor proprio de n. Assim como esta, este
metodo ira tornar-se moroso, pois ao m de k iteracoes temos de comparar
aproximadamente k 2 pares de valores. Note que se xj xk mod l e sendo
m 0, temos
xj+m xk+m mod l
Portanto, em vez de efectuar todas as comparacoes possveis podemos apenas
fazer uma comparacao em cada iteracao. Por exemplo, podemos calcular
somente
(x2i xi , n)
em cada iteracao i. Podemos tambem calcular, na iteracao k com 2j k <
2r+1 , o maximo divisor comum
(xk xj , n)
onde j = 2j 1.
Exemplo. Vamos factorizar 4087 usando f (x) = x2 + 1 e x0 = 3. Obtemos
sucessivamente
x1 = 10, x2 = 101 (101 10, 4087) = 1
x2 = 101, x4 = 1263 (1263 101, 4087) = 1
x3 = 2028, x6 = 889 (2028 89, 4087) = 67
Portanto, 67 | 4087. Dividindo, obtem-se 4087 = 67 61.
Exemplo. Sejam n = 845651, f (x) = x2 + x + 1 e x0 = 2. Verifica-se que
(x1 0 x7 , n) = 571. Portanto, n = 571 1481.
Teorema 6.1. O metodo ro permite encontrar um factor de n em

O( 4 n log3 n)
operacoes com uma grande probabilidade. Mais exactamente, existe uma constante C tal que, para qualquer inteiro positivo , aprobabilidade
de o metodo

3
4
oes bit,
ro nao encontrar um factor nao trivial de n em C n log n operac
e menor que exp().
84

O teorema anterior garante-nos que este metodo e, com uma grande probabilidade, signicativamente
mais rapido que irmos experimentando todos os

primos ate n. O resultado mais espectacular, usando este metodo ocorreu


8
em 1981, quando Brent e Pollard factorizaram completamente F8 = 22 + 1.
A seguinte mnemonica de J. Pollard, permite-nos recordar um dos factores
de F8
I am now intirely persuaded to employ rho method, a handy trick,
on gigantic composite numbers

6.3

Factorizac
ao de Fermat

Suponhamos que n e o produto de dois primos p e q proximos um do outro.


Entao n e a diferenca de dois quadrados, um dos quais e pequeno. Neste caso,
ha um processo eciente de factorizar n chamado factorizac
ao de Fermat. Por
este motivo deve-se evitar usar tais inteiros n como chave p
ublica, tanto no
RSA como no sistema de Rabin.
Teorema 6.2. Seja n um inteiro positivo mpar. Ha uma correspondencia
bijectiva entre factorizacoes de n da forma n = ab, com a b > 0, e
representacoes de n na forma t2 s2 , onde t e s sao inteiros nao negativos.
A correspondencia e dada pelas equac
oes
t=

a+b
ab
, s=
a=t+s b=ts
2
2

Demonstrac
ao: Se n = ab entao
(
)2 (
)2
a+b
a b2

n=
2
2
donde n pode ser escrito como a diferenca de dois quadrados. Se n = t2 s2
entao n = (t s)(t + s). Obtemos assim a correspondencia bijectiva.
2

Se n = ab e a e b est
ao proximos um do outro, entao s e pequeno e t e

ligeiramente maior que n. Neste caso,


podemos factorizar n, experimentando valores para t, comecando por [ n] + 1, ate que se encontre um para
o qual t2 n e um quadrado perfeito.
85


Exemplo. Seja n = 200819. Comecamos com [ n] + 1 = 449. Agora,
4492 200819 = 782 que nao e um quadrado perfeito. Em seguida, tentamos
t = 450. Temos 4502 200819 = 1681 = 412 , donde
n = (450 + 41)(450 41) = 491 409.
Note que se a e b nao estiverem proximos, este metodo ainda serve para
factorizar n, mas so apos termos usado imensos valores para t, o que o pode
tornar muito moroso. Ha uma generalizacao do metodo de Fermat que funciona melhor nesta situacao. Comecamos por escolher um multiplicador k
pequeno e tomamos

t = [ kn] + 1, t = [ kn] + 2, . . .
ate que obtenhamos um t para o qual t2 kn = s2 e um quadrado perfeito.
Entao d = (t + s, n) e um factor nao trivial de n.
Exemplo. Seja n = 141467. Se usarmos a factorizac
ao de Fermat directamente, precisamos de experimentar 38 ts ate encontrar
um factor de n. Mas

se tomarmos k = 3 e comecarmos com t = [ 3n] + 1 = 652, rapidamente


vemos que 6552 3n = 682 . Como (655 + 68, n) = 241, conclumos que
n = 241 587. Portanto, com k = 3 so precisamos de experimentar 4 ts.
Mas como sabemos que devamos usar k = 3 no exemplo anterior? Uma
maneira de resolver este problema e utilizando o metodo de Lehman (que e
uma generalizacao do metodo de Fermat).

A ideia deste metodo e experimentarmos todos os k ate [ 3 n] e para cada


um desses ks , experimentar somente
[
]
6
n

4 k
valores
se n tem algum divisor
de t. Mais exactamente, primeiro verica-se

d 3 n. Caso contrario, para cada 1 k [ 3 n], experimenta-se, para cada


t inteiro no intervalo
(
]

n
2 kn 1, 2 kn + ,
4 k
se t2 4kn e um quadrado perfeito s2 . Caso seja, determina-se d = (t + s, n)
que e um factor nao trivial de n. Caso nao se encontre um quadrado perfeito,
podemos concluir que n e primo.
Para provarmos que este algoritmo de facto funciona, necessitamos do
seguinte resultado de Dirichlet:
86

Teorema 6.3 (da Aproximacao de Dirichlet). Para qualquer n


umero real
e qualquer inteiro positivo m, existem inteiros a e b, com 1 a m tais que
|a b|

1
.
m+1

Demonstrac
ao: No que se segue iremos representar a parte inteira e a
parte fraccionaria de um n
umero real x por [x] e {x}, respectivamente.
Suponhamos que m = 1. Se {} 12 , basta tomar a = 1 e b = [], se
{} > 12 , basta tomar a = 1 e b = [] + 1. Suponhamos agora que m > 1 e
consideremos os m + 2 n
umeros reais, 0, 1 e
ra = {a} = a [a],
onde 1 a m. Note que se ri rj e i > j entao ri rj = rij .
Analogamente, se ri rj e j > i entao 1 (ri rj ) = rji . Consideremos
tambem a seguinte particao do intervalo [0, 1],
Ik = [

k
k+1
,
), com 0 k m 1
m+1 m+1

m
e Im = [ m+1
, 1]. Como temos m + 2 n
umeros reais em [0, 1] e a particao de
[0, 1] tem m + 1 subintervalos, entao um desses intervalos, digamos Ik , tem
pelo menos dois dos n
umeros reais considerados. Se k = 0 entao existe um
inteiro 1 a m tal que

ra

1
1
, i.e. |a [a]| <
.
m+1
m+1

Se k = m entao existe um inteiro 1 a m tal que


1 ra

1
1
, i.e. |a [a] 1|
.
m+1
m+1

Se 0 < k < m entao existem dois inteiros 1 i, j m tais que


ri rj

1
.
m+1

Podem acontecer dois casos: Se i > j temos ri rj = rij e


(i j) [(i j)]
87

1
.
m+1

Se j > i temos 1 (ri rj ) = rji e


|(j i) [(j i)] 1|

1
.
m+1
2

Teorema 6.4. O metodo de Lehman esta correcto e demora O( 3 n log2 n)


operacoes bit.
Demonstrac
ao: Suponhamos que o metodo esta correcto, e de facto nos
da um divisor de n ou prova que n e primo. Vejamos quantas operacoes bit
demora.
A parte inicial de
experimentar se n tem algum divisor menor que

3
n demora no maximo O( 3 n log2 n) pois para cada inteiro menor que 3 n
fazemos uma divisao (se experimentassemos so primos teramos um factor
log n a menos). Caso tenhamos que passar `a segunda parte do metodo,
temos que vericar

3 n [
6n]

= O( 3 n)
4 k
k=1
vezes se t2 4kn e um quadrado perfeito (cada um demora O(log2 n)). So
no caso de obtermos um quadrado perfeito
e que precisamos de calcular
(d = t + s, n). Portanto, no total temos O( 3 n log2 n) operacoes bit.
Provemos agora que o metodo
de Lehman esta correcto. Podemos assumir
que n
nao tem factores d 3 n. Se n nao e primo
entao n = pq com

3
3
p, q > n. Vamos provar que existe um inteiro k [ n] , k = uv com

|uq vp| < 3 n


Seja m = [n 6 q 2 p 2 ]. Pelo teorema da aproximacao de Dirichlet, existem
inteiros positivos a e b, com 1 a m, tais que
1

1
p
.
|a b|
q
m+1
Mas entao

q
q
n
|ap qb|
< <
= 3 n.
6
q
6
m+1
n
n p
88

Portanto, tomando u = b, v = a obtemos


|uq vp| <

Falta provar que uv [ 3 n]. Sabemos que


u
p
1
< +
v
q vm
e v m, donde,
uv =

1
u 2 p 2
v
pq 1
v < v +

n 3 + 1 = n 3 + 1.
v
q
m
qp

Consideremos c = uq + vp e e = |uq vp|. Entao 4kn = c2 e2 . Em seguida,


provamos que
1

n6
2 kn c < 2 kn + .
4 k

Como (uq)(vp) = kn, entao c = uq + vp 2 kn. Seja E = c 2 kn, entao

2
4kn + 4E kn (2 kn + E)2 = c2 = 4kn + e2 < 4kn + n 3 ,
logo
1

n6
E< .
4 k
Para terminar, so temos que mostrar que (c + e, n) e um factor nao trivial
de n. Como n | (c + e)(c e), basta mostrar que c + e < n. Temos, para
n 21,
1
1

1
1
n6
n6
1
c + e < 2 kn + + n 3 < 2 (n 3 + 1)n + 1
+ n 3 < n.
4 k
4 n3 + 1

89

6.4

Crivo quadr
atico

Actualmente sao usados essencialmente tres metodos de factorizacao, o crivo


quadratico, o crivo do corpo numerico e o metodo da curva elptica. Nesta
seccao iremos descrever o primeiro destes metodos.
A ideia do crivo quadratico e encontrar inteiros x e y tais que
x2 y 2

mod n

x y

mod n.

e
Entao d = (x y, n) e um divisor proprio de n.
Exemplo. Sejam n = 7429, x = 227, e y = 210. Entao x2 y 2 = n e
x y = 17. Como (n, 17) = 17, temos 17 | n.
O crivo do corpo numerico tambem usa a ideia anterior, a diferenca e na
maneira de determinar x e y. Vejamos como determinar estes inteiros no
crivo quadratico.
Sejam m = [ n] e f (X) = X 2 n. A ideia e encontrar k inteiros si , 1
i k, tais que cada f (si ) so tenha factores primos pequenos (pertencentes a
um conjunto B), e de tal modo que f (s1 ) f (sk ) seja um quadrado mod n,
i. e. os expoentes de cada primo envolvido sao pares. Se k for sucientemente
grande (basta k > #B), os expoentes mod 2 de cada primo, irao formar um
sistema linear com k equacoes e #B incognitas, logo e um sistema resol
uvel.
Para claricar este processo, vejamos outra vez o exemplo anterior.
Exemplo. Temos n = 7429, donde m = 86. Seja B = 8. Neste caso,
f (87) = 872 7429 = 140 = 22 5 7 e f (88) = 882 7429 = 315 = 32 5 7.
Consideremos v1 = (0, 0, 1, 1) e v2 = (0, 0, 1, 1) (neste caso, vi e o (B)-uplo,
que consiste dos expoentes mod 2 dos primos ate B, na decomposic
ao de
f (si )). Como v1 +v2 (0, 0, 0, 0) mod 2, temos que f (1)f (2) e um quadrado
mod n. Portanto, x 87 88 227 mod n e y 2 3 5 7 210 mod n.
Ainda nos falta descrever como escolher B e como escolher os inteiros si .
Ja vimos que os inteiros s tem que vericar uma propriedade que depende
de B. Comecamos por denir essa propriedade.
Denic
ao. Dizemos que um inteiro s e B-suave se p | s p B.
90

O conjunto B e formado pelo n


umero 1 e por primos menores que um
valor maximo B0 (mais tarde veremos que nao e necessario considerar todos
os primos menores que B0 ). Se B0 for grande, este processo pode demorar
mais que o metodo de Fermat (podemos necessitar de demasiados si s para
garantir a solubilidade do sistema linear). Por outro lado, se B0 for demasiado
pequeno, a propriedade de si ser Bsuave pode ser tao especial que podemos
demorar muito a encontrar o primeiro inteiro B suave depois de m. Foi
demonstrado que o valor optimo para B0 e
1
exp(
log n log log n).
2
Este valor de B0 permite que possamos determinar um factor de n em
O(e

log n log log n

operacoes bit. Portanto, muito mais rapido que o metodo de Fermat e suas
variantes.
Em vez de utilizarmos todos os primos menores que B0 (se n for enorme,
podem ser demasiados),
usa-se bases de factores. Queremos encontrar inteiros

si perto de m = [ n] tais que f (si ) seja B-suave. Se p | f (si ), entao (si )2 n


mod p, i. e. n e um resduo quadratico mod p. Portanto, so nos interessam
primos p B0 tais que
( )
n
=1
p
ou p = 2. A base de factores e assim constituda por estes primos e por 1.
Para determinar os inteiros si tais que f (si ) seja B-suave, comeca-se por
considerar um intervalo a crivar, S = {m M, m M + 1, . . . , m 1, m, m +
1, . . . , m + M 1, m + M }, com M sucientemente grande, e calcula-se f (u)
para qualquer u S. Dado p na base de factores, determinamos os inteiros
0 t p1, tais que t2 n mod p. Sabemos que ha duas solucoes, u1 e u2 ,
pois n e um resduo quadratico mod p (se p = 2 ha uma so solucao). Utilizase o algoritmo de Tonelli-Shanks para determinar estas solucoes. Entao p
divide f (u1 ) e f (u2 ), mas tambem divide f (ui + kp), para i = 1, 2 e k inteiro
(e desta parte do algoritmo que resulta o nome crivo quadratico). Assim,
comecando em ui , divide-se cada f (ui + kp) com ui + kp S pela maior
potencia de p possvel, resultado este que passa a substituir f (ui + kp). Fazse o mesmo para os outros primos da base de factores e escolhe-se os valores
que forem iguais a 1. Os ndices destas coordenadas sao os nossos si s, e para
cada um deles, f (si ) e B-suave.
91

i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
25
29
55
83
137
263

f (m + i)
8016
16227
24440
32655
40872
49091
57312
65535
73760
81987
90216
98447
106680
114915
123152
131391
139632
147875
205632
238680
454272
687960
1143072
2227680

2
501

3
167
601

3055
5109

10885
1703

611
2177

13

17

47
311
131
7013

1791

199
21845

2305

4369
461

27329
11277 1253

257

179
5791

13335

445
38305

889
7661

127

7697
8727

14599
2909

1123
1183

3213
29835
3549
85995
35721
69615

119
1105
1183
3185
49
7735

169
17

221
637
1547

169
13
1
221

Tabela 6.1: O crivo quadratico

92

1
17
1
1
17

1
1


Exemplo. Seja n = 16843009. Entao m = [ n] = 4104. Usando o valor
optimo para B0 , obtemos B0 = 30. A base de factores e {2, 3, 5, 7, 13, 17}.
Consideremos S = {m + 1, m + 2, . . . , m + 1000}. A tabela 6.1 mostra como
funciona o crivo. As u
ltimas 7 linhas representam os si s para os quais f (si )
e B-suave. Obtemos os vectores dos expoentes
(0, 0, 3, 1, 2, 0), (6, 3, 0, 1, 0, 1) (3, 3, 1, 0, 1, 1) (7, 1, 0, 1, 2, 0)
(3, 3, 1, 2, 1, 0) (5, 6, 0, 2, 0, 0) (5, 2, 1, 1, 1, 1)
Como so nos interessa a paridade dos expoentes, obtemos
(0, 0, 1, 1, 0, 0), (0, 1, 0, 1, 0, 1) (1, 1, 1, 0, 1, 1) (1, 1, 0, 1, 0, 0)
(1, 1, 1, 0, 1, 0) (1, 0, 0, 0, 0, 0) (1, 0, 1, 1, 1, 1)
Temos (0, 1, 0, 1, 0, 1)+(1, 1, 1, 0, 1, 0)+(1, 0, 1, 1, 1, 1) = (0, 0, 0, 0, 0, 0). Logo,
x 4129 4187 4367 6866803

mod n

e
y 27 34 5 72 13 17 5556063

mod n

donde (x y, n) = 65537. Portanto, 65537 e um factor de n = 16843009.


Em Abril de 1994, foi terminada a factorizacao do RSA-129 usando o
crivo quadratico. O RSA-129 e um n
umero com 129 dgitos com dois factores
primos, um com 64 dgitos e o outro com 65. A base de factores para esta
factorizacao continha 524339 primos. Em 1996, o crivo dos corpos de n
umeros
foi utilizado para factorizar o RSA-130. Desde entao todos os n
umeros RSA
que teem sido factorizados, foram-no usando este u
ltimo crivo.

93

Captulo 7
Logaritmo Discreto
Como ja vimos alguns sistemas criptogracos dependem da complexidade do
problema do logaritmo discreto, neste captulo iremos descrever algoritmos
para resolver este problema. Muitos destes algoritmos sao validos para qualquer inteiro n para o qual (Zn , ) seja um grupo cclico, mas iremos somente
considerar grupos cuja ordem seja um primo.
Seja p um primo mpar e g uma raz primitiva mod p. Dado um inteiro
b, o problema do logaritmo discreto consiste em encontrar a menor solucao
de
b g x mod p.
(7.1)

7.1

Enumerac
ao

O metodo mais simples para resolver a equacao (7.1) e ir testar sucessivamente x = 0, 1, 2, 3 . . . . A este processo chamamos enumerac
ao.
Exemplo. A menor solucao (positiva) de 3 5x mod 2017 e x = 1030.
Portanto, usando a enumerac
ao, temos que experimentar 1031 valores!
Em criptograa usa-se solucoes x, com x 2160 , portanto este metodo e
totalmente impraticavel.

94

7.2

Algoritmo passos de beb


e passos de gigante

Este algoritmo foi desenvolvido por D. Shanks em 1971 e permite-nos me


lhorar consideravelmente o algoritmo anterior. Seja m = [ p] e facamos
x = qm + r, com 0 r < m. O algoritmo passos de bebe passos de gigante
determina q e r. Como g qm+r b mod p, entao
(g m )q bg r

mod p

Primeiro calculamos o conjunto dos passos de bebe


B = {(bg r

mod p, r) : 0 r < m}.

Se B tiver um elemento da forma (1, r), entao b g r mod p e a menor


solucao de (7.1) e x = r. Caso nao exista tal par, determinamos c = g m
mod p. Em seguida, para cada q = 1, 2, 3, . . . , vericamos se cq mod p e
a primeira coordenada de algum elemento de B. Quando isto acontecer,
obtemos
(g m )q cq bg r mod p
donde x = qm + r e solucao de (7.1). Ao calculo dos elementos cq , chamamos
passos de gigante. Para cada q temos que comparar cq com os elementos de
B.
A solucao de 3 5x mod 2017 e x = 1030. Usando o metodo da enumeracao temos que efectuar 1029 multiplicacoes mod 2017. Se usarmos
o algoritmo passos de bebe passos de gigante, obtemos m = 44, r = 18 e
q = 23. Portanto, so necessitamos de 44 multiplicacoes para os passos de
bebe e de 22 multiplicacoes para os passos de gigante. Em contrapartida,
para utilizarmos este algoritmo, temos que guardar todos os pares dos passos
de bebe, enquanto que no algoritmo de enumeracao, so e necessario guardar
os inteiros g, b e p.
Para o algoritmo da enumeracao, o n
umero maximo de multiplicacoes e
p1, mas o n
umero mnimo pode ser muito pequeno. No algoritmo passos de

bebe passos de gigante, temos sempre [ p] + 1 passos de bebe, e no maximo

[ p] passos de gigante. Tambem este algoritmo e impraticavel para resolver


problemas concretos de criptoanalise.

95

7.3

C
alculo de ndices

Nesta seccao descrevemos o algoritmo calculo de ndices que esta relacionado


com os algoritmos de factorizacao subexponenciais mencionados no captulo
anterior. Mais uma vez queremos resolver o problema do logaritmo discreto
b gx

mod p.

Comecamos por escolher um majorante B e consideramos a base de factores


F (B) = {q, primo : q B}. Em seguida, calculamos o logaritmo discreto
dos elementos da base de factores, i. e., para qualquer q F (B), resolvemos
a congruencia
g xq q mod p.
Depois determinamos um expoente y {1, 2, . . . , p 1} tal que bg y mod p
e B-suave e escrevemos

q eq mod p.
bg y
qF (B)

Entao
bg y

g x q eq g

qF (B)

xq eq

mod p

qF (B)

donde
bg

qF (B)

xq eq y

mod p.

Portanto, a solucao do problema do logaritmo discreto e

xq eq y mod p 1.
x
qF (B)

A determinacao do logaritmo discreto dos elementos da base de factores


parece `a primeira vista tao difcil como resolver o problema do logaritmo
discreto original, mas pode ser efectuada de um modo muito mais simples.
Escolhe-se aleatoriamente z {1, 2, . . . , p 1}, tal que g z mod p e B-suave
e escrevemos

gz
q fq,z mod p.
qF (B)

A cada vector (fq,z )qF (B) chamamos uma relac


ao. Deve-se vericar se cada
nova relacao e linearmente dependente das anteriores. Caso seja, esta e
96

eliminada. Precisamos de tantas relacoes como o n


umero de elementos da
base de factores. Como

gz
g xq fq,z g qF (B) xq fq,z mod p
qF (B)

entao obtemos a congruencia linear

z
xq fq,z

mod p 1.

qF (B)

Obtemos assim um sistema linear de congruencias (cujas incognitas sao os


xq ), que pode ser resolvido usando metodos de teoria dos n
umeros.
Note que se B for sucientemente grande, resolvemos o sistema de linear
de congruencias uma u
nica vez e estes xq sao validos para a maioria dos bs.
Exemplo. Vamos determinar x tal que 2x 13 mod 2027. Portanto, b =
13, g = 2 e p = 2027. Consideremos B = 11, entao a base de factores e
F (B) = {2, 3, 5, 7, 11}. Agora, escolhendo aleatoriamente z em {1, 2, . . . , p
1}, obtemos os seguintes n
umeros B-suaves:
3 11
5 7 11
27 11
32 7
26 52

=
=
=
=
=

33
385
1408
63
1600

21593
2983
21318
2293
21918

mod
mod
mod
mod
mod

2027
2027
2027
2027
2027.

As relacoes obtidas sao (0, 1, 0, 0, 1), (0, 0, 1, 1, 1), (7, 0, 0, 0, 1), (0, 2, 0, 1, 0)
e (6, 0, 2, 0, 0), que sao linearmente independentes. Pelo pequeno teorema de
Fermat, obtemos o seguinte sistema com 5 incognitas e 5 congruencias:
x2 + x 5
x3 + x 4 + x5
7x1 + x5
2x2 + x4
6x1 + 2x3

1593
983
1318
293
1918

mod
mod
mod
mod
mod

2026
2026
2026
2026
2026.

Como g = 2, entao x1 = 1. Temos que 2026 = 2 1013, assim devemos


resolver as congruencias mod 2 e mod 1013 e depois utilizamos o teorema
97

chines dos restos para obter as soluc


oes

mod 2026. O resultado final e

x1 = 1, x2 = 282, x3 = 1969, x4 = 1755, x5 = 1311.


Em seguida, escolhemos aleatoriamente y {1, 2, . . . , p1}, ate que 132y
mod 2027 seja B-suave. Encontramos
13 21397 110 = 2 5 11 mod 2027.
Portanto,
x 1 + 1969 + 1311 1397 1884

98

mod 2026.

Captulo 8
Assinaturas digitais
8.1

Introduc
ao

Em documentos em papel utilizam-se assinaturas convencionais, feitas `a


mao para especicar a pessoa responsavel pelo documento. Estas assinaturas sao utilizadas para assinar cartas, levantar dinheiro de um banco, assinar contratos, etc. Uma assinatura digital serve para assinar documentos
electronicos que sao transmitidos atraves de uma rede de computadores.
Neste captulo iremos estudar varias assinaturas digitais, mas comecamos
por observar algumas diferencas fundamentais entre assinaturas digitais e
assinaturas convencionais:
1. Assinatura de um documento: Quando se utiliza uma assinatura
convencional, esta assinatura esta sicamente ligada ao documento que
esta assinado. Quando utilizamos uma assinatura digital, esta nao esta
sicamente ligada `a mensagem, sendo assim necessario que o algoritmo
utilizado deve de alguma maneira ligar a assinatura `a mensagem que
queremos assinar.
2. Vericac
ao da assinatura: Numa assinatura convencional, a vericacao da assinatura e vericada quando esta e comparada com uma
assinatura autenticada (por exemplo, a assinatura do Bilhete de Identidade, do Cartao do Cidadao ou de um cartao de credito). Claramente,
este metodo nao e muito seguro, porque e relativamente simples forjar a
assinatura de uma outra pessoa. As assinaturas digitais sao vericadas
utilizando um algoritmo de vericacao p
ublico. Portanto qualquer pessoa pode vericar se a assinatura digital e autentica.
99

Uma assinatura digital consiste de duas componentes: Um algoritmo para


assinar e um algoritmo de vericacao. Bob assina a mensagem x utilizando
um algoritmo (secreto) para assinar, sig. A assinatura resultante y = sig(x)
e vericada utilizando um algoritmo de vericacao p
ublico, ver. Dado o par
(x, y), entao ver(x, y) = 1 se a assinatura e autentica e ver(x, y) = 0 se a
assinatura nao estiver correcta.
As funcoes sig e ver devem ser de tempo polinomial e forjar uma assinatura por um oponente deve ser computacionalmente impraticavel.

8.2

Assinatura RSA

O sistema criptograco RSA pode ser utilizado para assinaturas digitais,


como passamos a descrever:
Sejam (na , ea ) e (pa , qa , da ) as chaves p
ublica e privada RSA de Alice,
respectivamente; e (nb , eb ) e (pb , qb , db ) as chaves p
ublica e privada RSA de
Bob, respectivamente.
Suponhamos que a Alice pretende enviar uma mensagem cifrada e assinada a Bob. Dada a mensagem original x, primeiro a Alice assina x utilizando
a sua chave de RSA privada, da , obtendo
y = sigda (x) xda

mod na .

Em seguida, cifra x e y utilizando a chave p


ublica RSA de Bob, obtendo a
mensagem cifrada z que transmite a Bob. Quando Bob recebe z, ele primeiro
decifra z utilizando a sua chave privada RSA e obtem (x, y). Para certicar
a autenticidade da assinatura y, Bob utiliza a chave p
ublica RSA de Alice
vericando se a seguinte congruencia e verdadeira
y ea x

mod na .

Se Alice cifrar primeiro x, obtendo z, e so depois assinar z, obtendo y e

enviar o par (z, y) a Bob, entao Oscar


podera criar a sua assinatura y de z e
substituir a assinatura y de Alice, enviando o par (z, y ) a Bob. Neste caso,

Bob cara convencido que quem lhe enviou a mensagem x foi Oscar.
Note

que nesta situacao, Oscar


sabendo ou nao a mensagem x, consegue sempre
assinar z. Por esta razao e recomendado que se assine sempre a mensagem
antes de a cifrar.

100

8.3

Assinatura ElGamal

A assinatura digital ElGamal foi descrita pela primeira vez em 1985 e foi
desenvolvida especicamente para ser uma assinatura, o que contrasta com
o RSA que pode ser usado como um sistema criptograco ou como uma
assinatura. Uma modicacao desta assinatura deu origem `a assinatura digital standard adoptada pelo National Institute of Standards and Technology
(NIST).
Passamos a descrever esta assinatura:
Seja p um primo tal que a resolucao computacional do problema do logaritmo discreto em Zp e impraticavel. Sejam uma raiz primitiva de p,
1 < a < p 1 um valor aleatorio e a mod p. Os valores p, e
sao p
ublicos e a e secreto. Seja K = (p, , a, ) a chave ElGamal de Bob.
Para assinar uma mensagem x, gera-se aleatoriamente k Zp1 (k deve ser
mantido secreto) e dene-se
sigK (x, k) = (, ),
onde
k
e

mod p

(x a)k 1

mod p 1.

A funcao de vericacao e dada por


verK (x, , ) = 1 x

mod p

Esta vericacao esta correcta porque


a k x

mod p,

porque a + k x mod p 1.
Bob calcula a sua assinatura utilizando o valor secreto a, que faz parte
da sua chave e o valor secreto k (que so deve ser alterado sempre que se quer
assinar uma mensagem x). A vericacao e obtida usando somente informacao
p
ublica.
Exemplo. Seja p = 467, = 2 e a = 127. Entao 2127 132 mod 467.
Suponhamos que Bob quer assinar a mensagem x = 100. Primeiro gera o

101

n
umero aleatorio k = 213 que e primo com 466 (como tinha de ser). Entao
2131 431 mod 466. A assinatura de (x, k) passa a ser (29, 51), porque
2213 29

mod 467

e
(100 127 29) 431 51 mod 466.
Para verificar a assinatura basta calcular
13229 2951 189 mod 467
e
2100 189 mod 467.
Portanto, a assinatura e valida.

8.3.1

Forjar assinaturas ElGamal

Vejamos agora a seguranca desta assinatura digital. Suponhamos que Olga


pretende forjar uma assinatura para a mensagem x, sem saber a. Se Olga
escolher um valor e tentar encontrar o valor correspondente, tem que
calcular o logaritmo discreto log (x ) mod p. Por outro lado, se Olga
escolher e tentar encontrar o valor correspondente tem que resolver a
congruencia
x mod p.
Ate agora nao foi encontrada uma maneira pratica (em termos computacionais) para resolver esta congruencia.
Resta ainda a possibilidade de que haja uma maneira de calcular e
simultaneamente de tal modo que (, ) seja uma assinatura de x. Ate agora,
ainda ninguem descobriu uma maneira de efectuar este calculo, mas tambem
ninguem provou que este calculo nao pode ser efectuado.
Se Olga escolher e e depois tentar descobrir x tera mais uma vez que
calcular o logaritmo discreto log ( ) mod p. Portanto, Olga nao pode
assinar uma mensagem aleatoria utilizando este processo.
No entanto, Olga pode assinar uma mensagem aleatoria escolhendo , e
x simultaneamente: Sejam i e j inteiros, com 0 i, j p 2, e (j, p 1) = 1.

102

Em seguida, calcula-se
i j mod p
j 1 mod p 1
x ij 1 mod p 1.
Entao (, ) e uma assinatura valida para a mensagem x porque
(i j )j

ij 1

mod p
mod p

ij 1

mod p
mod p.

Vejamos outro metodo para forjar assinaturas em que Olga utiliza uma
mensagem previamente assinada por Bob. Suponhamos que (, ) e uma
assinatura valida para a mensagem x. Consideremos h, i e j inteiros tais que
0 h, i, j p 2 e (h j, p 1) = 1. Em seguida, calcula-se
h i j mod p
(h j)1 mod p 1
x (hx + i)(h j)1 mod p 1.
Entao
( h i j )(hj)
( jh )

(hj)1

xh(hj)1

(hj)1 (xh+i)

( h )(hj) ( )h(hj) i(hj)

h(hj)1

( )

mod p

i(hj)1

i(hj)1

mod p

mod p

mod p

mod p

mod p.

Portanto, (, ) e uma assinatura valida para x .


Ambos estes metodos servem para forjar assinaturas, mas nao parecem
permitir que um oponente consiga forjar uma assinatura para uma mensagem
que ele proprio escolha, sem resolver o problema do logaritmo discreto. Assim, estes metodos nao parecem ameacar a seguranca da assinatura ElGamal.
103

8.3.2

Falhas de protocolo

Nesta seccao vamos descrever processos para quebrar a assinatura ElGamal,


quando esta e utilizada de uma maneira descuidada.
Primeiro, o valor aleatorio k usado na assinatura nao deve ser revelado,
caso contrario Olga pode obter a chave secreta a, da seguinte maneira:
a (x k) 1

mod p.

Claramente, se Olga conhecer a, pode forjar assinaturas para qualquer mensagem.


Outra falha na utilizacao da assinatura ElGamal ocorre quando o mesmo
valor k e usado para assinar duas mensagens x1 e x2 . Suponhamos que (, 1 )
e uma assinatura de x1 e (, 2 ) e uma assinatura de x2 , onde k mod p.
Entao
1 x1 mod p
e
2 x2
Donde

mod p.

x1 x2 1 2 k(1 2 )

mod p.

Esta u
ltima equacao e equivalente a
x1 x2 k(1 2 ) mod p 1.

(8.1)

Como 1 2 pode nao ter inverso mod p 1, nao podemos calcular k


imediatamente, mas este problema pode ser ultrapassado se dividirmos todos
os termos pelo maximo divisor comum entre 1 2 e p 1: Seja
d = (1 2 , p 1)
entao d | (x1 x2 ). Denimos
x1 x2
d
1 2


d
p1

p
.
d

104

Entao, a congruencia (8.1) ca


x k

mod p

e como ( , p ) = 1, podemos calcular o inverso de mod p . Assim


k x 1

mod p .

A esta solucao mod p correspondem d solucoes da congruencia (8.1), dadas


por k x 1 + ip mod p 1, com 0 i d 1. Para determinar a
solucao correcta basta vericar quando e que k mod p.

8.4

DSS

A assinatura digital standard (digital standard signature - DSS) e uma modicacao da assinatura ElGamal, adoptada em 1 de Dezembro de 1994 pelo
governo federal dos Estados Unidos da America. Comecamos por explicar
porque foi necessario efectuar modicacoes `a assinatura ElGamal e como e
que estas modicacoes foram conseguidas.
Em muitas situacoes, uma mensagem e cifrada e decifrada uma u
nica
vez, portanto basta que o sistema criptograco seja seguro nesta ocasiao.
Por outro lado, uma mensagem assinada pode ser um documento legal como
por exemplo um contracto ou um testamento, sendo assim muito provavel
que seja necessario vericar a assinatura muitos anos apos a mensagem ser
assinada. Por esta razao e necessario tomar mais precaucoes relativamente `a
seguranca de uma assinatura do que relativamente `a seguranca de um sistema
criptograco. Como a assinatura digital ElGamal nao e mais segura que o
problema do logaritmo discreto, temos que usar um primo p grande, com pelo
menos 512 bits, para garantir alguma seguranca, sendo sugerido por muitas
pessoas que p deve ter pelo menos 1024 bits, para manter a assinatura segura
por varios anos. Mas para muitas aplicacoes, varias envolvendo smart cards,
e desejavel ter assinaturas mais pequenas. A assinatura digital standard
modica a assinatura ElGamal de maneira a usar uma assinar uma mensagem
com 160 bits (usando uma assinatura de 320 bits) e onde os calculos sao
efectuados usando um primo com pelo menos 512 bits. A ideia e trabalhar
num subgrupo de Zp com ordem 2160 .
A primeira alteracao e denir da seguinte maneira
(x + a)k 1
105

mod p 1.

A vericacao passa a ser


x

mod p.

Quando existe o inverso de mod p 1 (i. e. se (x + a, p 1) = 1),


podemos modicar a condicao anterior para obter
1

mod p.

(8.2)

Se existir um primo q com 160 bits tal que q | p 1, podemos obter um


elemento em Zp tal que a ordem de mod p e q. Este elemento pode ser
construdo a partir de uma raiz primitiva 0 de p, fazendo
p1

0 q

mod p.

Portanto, no DSS em vez de utilizarmos uma raiz primitiva de p iremos


utilizar um elemento de Zp cuja ordem tem 160 bits. Tal como na assinatura
ElGamal, denimos
a mod p
e
k

mod p,

onde k e gerado aleatoriamente. Entao e tambem tem ordem q. Portanto, os expoentes de e em (8.2) podem ser reduzidos mod q. Mas
se reduzirmos mod q em (8.2) entao todo o lado esquerdo da congruencia
tem tambem de ser reduzido mod q.
Resumindo, a assinatura digital standard e obtida do seguinte modo:
Seja p um primo com pelo menos 512 bits e seja q um primo com 160
bits tal que q | p 1. Seja Zp com ordem q, a Zp e a mod p.
Os valores p, q, e sao p
ublicos e a e secreto. Escolhemos 1 k q 1
aleatoriamente e denimos
sig(x, k) = (, ),
onde x Zq ,
(k
e

mod p) mod q

(x + a)k 1
106

mod q.

Para efectuar a vericacao, calculamos

e1 x 1

mod q

e2 1

mod q

ver(x, , ) = 1 (e1 e2

mod p) mod q.

Precisamos que 0 mod q pois precisamos do inverso de mod q


para vericar a assinatura. Se Bob obtiver um valor 0 mod q deve
escolher um outro valor para k e calcular novos valores para e . Note que
a probabilidade de 0 mod q e aproximadamente 2160 , portanto muito
raramente temos que modicar os valores.
Exemplo. Suponhamos que q = 101 e p = 78q + 1 = 7879. Entao 3 e uma
raiz primitiva de p e 378 170 mod 7879 tem ordem q. Seja a = 75.
Entao 17075 4567 mod 7879. Suponhamos que Bob quer assinar a
mensagem x = 22 e escolhe aleatoriamente k = 50. Entao
k 1 99

mod q.

Assim,
17050

mod 7879 2518 94 mod 101

e
(22 + 75 94) 99 97

mod 101.

A assinatura da mensagem x passa a ser o par (94, 97). Para verificar a


assinatura calculamos
1 25
e1 22 25 45 mod 101
e2 94 25 27 mod 101.

mod 101

Como
17045 456727

mod 7879 2518 94

entao a assinatura e valida.

107

mod 101

Quando DSS foi proposto, o comprimento do primo p foi xado em 512


bits. Apos varias crticas, foi permitido ter primos cujo n
umero de bits e
divisvel por 64 e que tenham entre 512 e 1024 bits. Em 2000 o n
umero de
bits do primo p foi xado em 1024 bits. Em 2006 foi sugerido o uso de primos
com 2048 bits para assinaturas cujo tempo de vida se prolongue para alem de
2010. Para mais informacoes consultar os documentos publicados pelo NIST
(National Institute of Standards and Technology).

108

Captulo 9
Func
oes de sntese
As assinaturas que estudamos no captulo anterior so nos permitem assinar
mensagens pequenas. Por exemplo, se utilizarmos o DSS, uma mensagem
com 160 bits e assinada com uma assinatura de 320 bits. Em geral, precisamos de assinar mensagens muito maiores, e. g. documentos legais. Uma
maneira de resolver este problema e dividir a mensagem em partes e assinar
cada parte. Este processo levanta varios problemas: Uma mensagem enorme
tera uma assinatura (de facto, a uniao de varias assinaturas) enorme. Outra
desvantagem deste processo e que a integridade da mensagem original e perdida.
A maneira mais utilizada para resolver os problemas descritos e recorrer
a funcoes hash (ou funcoes de sntese). Estas funcoes reduzem a mensagem
original a uma mensagem de tamanho aceitavel (e. g. 160 bits no caso do
DSS). So a mensagem reduzida e que e assinada.
Denic
ao. Seja h uma funcao de sntese. Temos uma colis
ao se dadas duas
mensagens x e y, tivermos h(x) = h(y).
Denic
ao. Seja x uma mensagem. Uma funcao de sntese h e fracamente
livre de colisoes se for computacionalmente impraticavel encontrar uma mensagem x = x tal que h(x) = h(x ).
Denic
ao. Uma funcao de sntese h e fortemente livre de colis
oes se for

computacionalmente impraticavel encontrar duas mensagens x e x diferentes


tais que h(x) = h(x ).

109

9.1

Ataque do Anivers
ario

Nesta seccao vamos determinar uma condicao necessaria para a seguranca de


funcoes de sntese que apenas depende do tamanho das mensagens reduzidas.
Esta condicao resulta de um metodo para encontrar colisoes conhecido como
o ataque do aniversario e que esta relacionado com o famoso paradoxo dos
aniversarios. O paradoxo dos aniversarios diz que se tivermos um grupo de
23 pessoas entao ha duas pessoas que nasceram no mesmo dia, com mais
de 0.5 de probabilidade e nao e realmente um paradoxo, mas simplesmente
contra-intuitivo.
Seja h : X Z uma funcao de sntese, com X e Z nitos e tais que
|X| 2|Z|. Suponhamos que |X| = m e |Z| = n. Claramente, ha pelo
menos n colisoes, o problema e como encontra-las. Uma maneira e escolher
aleatoriamente k elementos x1 , . . . , xk X distintos, calcular h(xi ), para
1 i k e depois determinar se houve colisoes. Este processo corresponde a
atirar aleatoriamente k bolas para n caixas e depois vericar se alguma caixa
tem mais de uma bola. Vamos calcular um minorante da probabilidade de
encontrar uma colisao por este metodo. Comecamos por assumir que
|h1 (z)|

m
,
n

para qualquer z Z. Esta hipotese e razoavel, pois se a funcao h nao


distribuir os elementos de X pelos elementos de Z de maneira aproximadamente igual, entao a probabilidade de encontrar colisoes aumentara, e nos so
queremos um minorante desta probabilidade.
Sejam z1 , . . . , zk os elementos que vao sendo obtidos atraves da funcao de
sntese h. O valor z1 pode ser qualquer, mas a probabilidade de z2 = z1 e
11/n, a probabilidade de z3 = z1 e z3 = z2 e 12/n, e assim sucessivamente.
Portanto, uma estimativa de que nao haja qualquer colisao apos k valores e

1
2
k1
i
(1 )(1 ) (1
)=
(1 ).
n
n
n
n
i=1
k1

A serie de Taylor da funcao exponencial da-nos a seguinte expansao


ex = 1 x +

x2 x3

,
2!
3!

o que implica que 1 x ex quando x e pequeno. Entao a nossa estimativa


110

para a probabilidade de colisoes e


k1

i
k(k1)
i
(1 )
e n = e 2n .
n
i=1
i=1
k1

Portanto, estimamos a probabilidade de haver pelo menos uma colisao como


sendo
k(k1)
= 1 e 2n .
Entao
k(k1)

e 2n 1
k(k 1)
log(1 )

2n
k 2 k 2n log(1 )

donde
k
Se tomarmos = 0.5 obtemos

2n log

1
.
1

k 1.177 n.

Portanto, se aplicarmos a funcao de sntese a pouco mais de n elementos


de X obtemos uma colisao com probabilidade 50%.
Se considerarmos X o conjunto de todos os humanos, Y o conjunto dos
365 dias
de um ano comum e h(x) a data de aniversario da pessoa x entao
1.177 365 22.49 e ha mais de 0.5 de probabilidade de que se encontre
duas pessoas que comemorem o aniversario no mesmo dia num grupo de pelo
menos 23 pessoas.
Se as mensagens reduzidas apos a aplicacao de uma funcao de sntese
tiverem 40 bits entao o ataque do aniversario diz-nos que iremos ter uma
colisao com probabilidade 0.5 se efectuarmos aproximadamente 220 (pouco
mais de um milhao) de reducoes.

9.2

Funco
es de sntese comprovadamente seguras

Ha dois tipos de funcoes de sntese: Por um lado temos funcoes de sntese


baseadas em problemas matematicos, e portanto a sua seguranca resulta
111

de provas matematicas rigorosas. Estas funcoes de sntese nao sao muito


utilizadas na pratica devido `a sua complexidade e por serem muito lentas. A
estas funcoes, chamamos func
oes de sntese comprovadamente seguras. Como
exemplos temos
1. Funcao de sntese de Chaum-van Heijst-Ptzmann baseada no problema do logaritmo discreto;
2. VSH (very smooth hash function) baseada no problema de determinar
razes quadradas modulares;
3. ECOH (elliptic curve only hash function) baseada em curvas elpticas
e no problema do saco-mochila;
4. FSB (fast syndrome based hash function) baseada em teoria dos codigos
e relacionada com os sistemas criptogracos de McEliece e de Niederreiter;
5. SWIFFT baseada na transformada de Fourier rapida (fast Fourier transform).
A outra categoria de funcoes de sntese inclui funcoes que tem como base
nao um problema matematico difcil mas sim sao denidas de uma maneira
ad hoc, onde os bits da mensagem sao misturados de modo a obter uma
funcao de sntese. Pretende-se que sejam difceis de quebrar, mas nao ha
demonstracoes formais deste facto. Como exemplos temos MD4, MD5, MD6,
SHA1, SHA2 e WHIRLPOOL.
O SHA2 esta implementado em varios protocolos e aplicacoes de seguranca, como por exemplo TLS, SSL, PGP, SSH, S/MIME e IPsec. Veremos alguns destes protocolos mais tarde. O MD5 e muito utilizado para
armazenar passwords.
O NIST (National Institute of Standards and Technology) criou uma
competicao para encontrar uma nova funcao de sntese para substituir o
SHA2, que se passara a chamar SHA3. Esta competicao ira terminar em
2012. As funcoes ECOH, FSB, SWIFFT e MD6 foram eliminadas na primeira
ronda. As funcoes nalistas sao
1. BLAKE;
2. Grstl, que usa uma S-box, como o AES;
112

3. JH;
4. Keccak;
5. Skein.

9.2.1

Fun
c
ao de sntese Chaum-van Heijst-Ptzmann

Nesta seccao descrevemos a funcao de sntese de Chaum, van Heijst e Ptzmann que e baseada no problema do logaritmo discreto.
Seja q um primo grande tal que 2q + 1 = p e primo (os primos que
vericam esta condicao chamam-se primos de Sophie Germain). Sejam e
raizes primitivas de p. A funcao de sntese h : Zq Zq Zp e denida por
h(x1 , x2 ) x1 x2

mod p.

O seguinte resultado descreve como e que uma so colisao pode afectar a


esta funcao de sntese.
Teorema 9.1. Uma colisao da func
ao de sntese de Chaum-van HeijstPfitzmann permite calcular o logaritmo discreto log de uma maneira eficiente.
Demonstrac
ao: Suponhamos que temos uma colisao
h(x1 , x2 ) = h(x3 , x4 ),
onde (x1 , x2 ) = (x3 , x4 ). Entao

ou seja

x1 x2 x3 x4

mod p,

x1 x3 x4 x2

mod p.

Seja d = (x4 x2 , p1). Como p1 = 2q e q e primo entao d {1, 2, q, p1}.


Vamos considerar cada um destes valores para d.
Suponhamos que d = 1 e seja y (x4 x2 )1 mod p 1. Entao
(x4 x2 )y (x1 x3 )y
Portanto,

log (x1 x3 )(x4 x2 )1


113

mod p.
mod p 1.

Em seguida, consideramos d = 2. Como q e mpar, temos (x4 x2 , q) = 1.


Seja y (x4 x2 )1 mod q. Entao (x4 x2 )y = kq + 1, para algum inteiro
k, donde
(x4 x2 )y kq+1 (1)k mod p.
Portanto,
log (x1 x3 )y

mod p 1

ou
log (x1 x3 )y + q

mod p 1,

onde a u
ltima congruencia resulta de
q 1

mod p.

Como e facil determinar qual daquelas congruencias e a correcta, conseguimos


tambem determinar o logaritmo discreto log .
Agora, consideramos d = q. Como 0 x2 , x4 q 1 entao q so divide
x4 x2 se x4 x2 = 0. Mas se x4 = x2 entao p 1 tambem divide x4 x2 .
Portanto, o caso d = q nunca acontece.
Como vimos atras, se d = p 1 entao x4 = x2 . Neste caso obtemos
x1 x2 x3 x2

mod p,

isto e
x1 x3

mod p,

o que implica que x1 = x3 . Mas como (x1 , x2 ) = (x3 , x4 ), isto nao pode
acontecer.
Portanto, so podemos ter dois casos e em cada um deles e possvel calcular
o logaritmo discreto de na base .
2

Podemos assim concluir que alguem que consiga descobrir colisoes para
esta funcao de sntese, conseguira calcular um logaritmo discreto considerado
difcil.
O teorema anterior mostra que se for computacionalmente impraticavel
calcular log em Zp entao a funcao de sntese Chaun-van Heijst-Ptzmann
e fortemente livre de colisoes.

114

9.2.2

VSH

Seja n uma chave p


ublica RSA (n = pq). Sejam p1 = 2, p2 = 3, . . . . Seja k,
o comprimento dos blocos, o maior inteiro tal que
k

pi < n.

i=1

Seja m = (m1 , m2 , . . . , ml ) uma mensagem de l bits, com mi {0, 1} e


assuma-se que l < 2k . Para calcular h(m) procede-se da seguinte maneira:
1. x0 = 1;
2. Seja L = [ kl ], L e o n
umero de blocos.Tome-se mi = 0 para l < i Lk.
Neste passo estamos a completar a mensagem com zeros.
3. Represente-se l em binario, isto e
l=

li 2i1 ,

i=1

com li {0, 1}. Dena-se mLk+i = li , com 1 i k.


4. Para j = 0, 1, . . . , L, calcule-se
xj+1

x2j

pikj+i

mod n.

i=1

5. Devolva xL+1 .
Esta funcao de sntese e fortemente resistente a colisoes.

115

Bibliograa
[1] F. L. Bauer, Decrypted Secrets, Springer, 2007.
[2] J. A. Buchmann, Introduction to cryptography, Springer, 2001.
[3] R. Crandall e C. Pomerance, Prime Numbers - A Computacional Perspective, Springer, 2001.
[4] G. H. Hardy e E. M. Wright, An Introduction to the Theory of Numbers,
Oxford, 1979.
[5] J. Hostein, J. Pipher & J. H. Silverman, An Introduction to Mathematical Cryprography, Springer, 2008.
[6] N. Koblitz, A Course in Number Theory and Cryptography, Springer,
1987.
[7] R. E. Smith, Internet Cryptography, Addison-Wesley, 1997.
[8] W. Stallings, Cryptography and network security, 5th Edition, Prentice
Hall, 2010.
[9] D. R. Stinson, Cryptography, Theory and Practice, 3rd Edition, CRC
Press, 2006.

116