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 4
1.1 Introduc ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Vocabulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Complexidade 12
2.1 Estimativas de tempo . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 P versus NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Criptograa Simetrica 18
3.1 Introduc ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 Cifra de Substituicao . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Criptoanalise classica . . . . . . . . . . . . . . . . . . . . . . . 20
3.4 Criptoanalise da Cifra de Substituicao . . . . . . . . . . . . . 22
3.5 Cifra de Deslocamento . . . . . . . . . . . . . . . . . . . . . . 25
3.6 Algoritmo de Euclides e inversos mod n . . . . . . . . . . . . 26
3.7 Cifra Am . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.8 Funcao de Euler . . . . . . . . . . . . . . . . . . . . . . . . 33
3.9 Criptoanalise da Cifra Am . . . . . . . . . . . . . . . . . . . 34
3.10 Cifra de Vigen`ere . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.11 Criptoanalise da cifra de Vigenere . . . . . . . . . . . . . . . . 37
3.12 Cifra de Hill . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.13 Ataque `a cifra de Hill . . . . . . . . . . . . . . . . . . . . . . . 43
3.14 Cifra de Permutacao . . . . . . . . . . . . . . . . . . . . . . . 43
3.15 Cifras de Fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.16 Cifra de Fluxo baseada no LFSR . . . . . . . . . . . . . . . . 45
3.17 Criptoanalise da cifra de uxo baseada no LFSR . . . . . . . . 46
1
4 Criptograa de chave p ublica 49
4.1 Teorema Chines dos Restos . . . . . . . . . . . . . . . . . . . 49
4.2 Lagrange, Euler e Fermat . . . . . . . . . . . . . . . . . . . . 53
4.3 Razes primitivas . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.4 Exponenciacao modular rapida . . . . . . . . . . . . . . . . . 54
4.5 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5.1 Ataque do expoente p ublico pequeno . . . . . . . . . . 56
4.6 Resduos quadraticos . . . . . . . . . . . . . . . . . . . . . . . 57
4.7 Algoritmo de Tonelli-Shanks . . . . . . . . . . . . . . . . . . . 65
4.8 Cifra de Rabin . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.9 Protocolo Die-Hellman . . . . . . . . . . . . . . . . . . . . . 69
4.9.1 Ataque do homem no meio . . . . . . . . . . . . . . . . 70
4.10 Sistema ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.10.1 Ataque da repeticao da chave efemera . . . . . . . . . . 72
4.11 Sistema Merkle-Hellman . . . . . . . . . . . . . . . . . . . . . 72
5 Primalidade 75
5.1 Teste de Fermat . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2 Teste de Miller-Rabin . . . . . . . . . . . . . . . . . . . . . . . 77
5.3 Teste de Solovay-Strassen . . . . . . . . . . . . . . . . . . . . 79
5.4 Teste n 1 de Lucas . . . . . . . . . . . . . . . . . . . . . . . 80
6 Factorizacao 82
6.1 Metodo p 1 de Pollard . . . . . . . . . . . . . . . . . . . . . 82
6.2 Metodo ro de Pollard . . . . . . . . . . . . . . . . . . . . . . . 83
6.3 Factorizacao de Fermat . . . . . . . . . . . . . . . . . . . . . . 85
6.4 Crivo quadratico . . . . . . . . . . . . . . . . . . . . . . . . . 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 99
8.1 Introduc ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2 Assinatura RSA . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.3 Assinatura ElGamal . . . . . . . . . . . . . . . . . . . . . . . 101
8.3.1 Forjar assinaturas ElGamal . . . . . . . . . . . . . . . 102
2
8.3.2 Falhas de protocolo . . . . . . . . . . . . . . . . . . . . 104
8.4 DSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9 Funcoes de sntese 109
9.1 Ataque do Aniversario . . . . . . . . . . . . . . . . . . . . . . 110
9.2 Funcoes de sntese comprovadamente seguras . . . . . . . . . . 111
9.2.1 Funcao de sntese Chaum-van Heijst-Ptzmann . . . . 113
9.2.2 VSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3
Captulo 1
Preliminares
1.1 Introducao
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.
Critograa e a ciencia que estuda estas duas accoes. Se Carla intercepta
a mensagem cifrada, pode tentar quebrar a cifra e ler a mensagem. Crip-
toanalise 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, al-
guns dos quais sao correntemente usados nas diversas comunicacoes de men-
sagens (militares, espionagem, n umeros de PIN, conversacoes telefonicas,
transaccoes bancarias, Internet, e-mail, etc.). Ao mesmo tempo, Estudare-
mos metodos para quebrar certos cifras e a razao pela qual alguns dos sis-
temas criptogracos sao considerados inquebraveis. Iremos tambem estudar
funcoes de sntese (que sao uma especie de impressao digital), assinaturas
e identica cao digital e diversos protocolos de seguranca. As ferramentas
essenciais deste curso serao Teoria dos N umeros e algumas nocoes de

Algebra.
1.2 Vocabulario
Mensagem original (ou texto plano) - Mensagem que se pretende tornar se-
creta, 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;
Codicacao simples - Transformar a mensagem original em n umeros ou
bits
1
. 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, a01100001, 0 00110000, ? 00111111, etc;
Descodicar - Transformar n umeros ou bits em mensagens;
Monogramica (ou monograca) - Uma cifra que traduz um a um os
smbolos do texto original em texto cifrado;
Poligramica (ou poligraca - Uma cifra que traduz varios smbolos do
texto original, em grupo e ao mesmo tempo, em texto cifrado;
Cifra de transposicao ou permutacao - 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 criptograco - 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 criptograco 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 criptograco 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
5
Criptoanalise -

E o processo pelo qual o inimigo (quem nao esta autorizado
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 Historia
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 docu-
mentos 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 men-
sagens 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
6
para evitar a sua falsicacao. Apesar da sua aparente semelhanca com crip-
tograa, 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 con-
siste 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, por-
tanto, 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 trans-
posicao. Esta e ainda a ideia de muitas tecnicas populares actuais.
Na India, por volta de 300 a. C., apareceu um livro intitulado Artha-
sastra, 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 signi-
ca O livro das mensagens criptogracas). Infelizmente este livro desa-
pareceu. 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 aju-
dar 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 (Es-
critos 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 poli-
alfabetico a que actualmente se chama cifra de Vigen`ere, por ter sido fal-
7
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 de-
cifrava 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 sis-
temas 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 A L M E
R S T O N
B C D F G
H IJ K Q U
V W X 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.
8
A D F G V X
A K Z W R 1 F
D 9 B 6 C L 5
F K 7 J P G X
G E V Y 3 A N
V 8 O D H 0 2
X U 4 I S 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 le-
tras 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 cor-
respondente `a ordem alfabetica de cada letra da primeira linha e, nas linhas
seguintes e escrita a mensagem que resultou do processo de substituicao efec-
tuado 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 ori-
ginal 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-
9
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 sis-
tema 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 apre-
senta 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 Di-
rections 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 di-
culdade 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 pro-
teger 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-
quebraveis.

E mais razoavel e suciente para o uso concreto, requerer que
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 (d
k1
d
k2
d
1
d
0
)
b
para signicar que
n = d
k1
b
k1
+ d
k2
b
k2
+ d
1
b + d
0
,
onde os algarismos d
i
sao smbolos que podem tomar valores entre 0 e b
1 e d
k1
e nao nulo. Esta representacao e unica dependendo apenas da
base escolhida. Quando a base e 10 escreve-se apenas d
k1
d
k2
d
1
d
0
, sem
indicacao da base, para representar n. Por exemplo,
5476 = 5 10
3
+ 4 10
2
+ 7 10 + 6,
12
(10110)
2
= 1 2
4
+ 0 2
3
+ 1 2
2
+ 1 2 + 0 = 22.
As fraccoes podem tambem ser representadas em qualquer base, usando-
se neste caso o ponto utuante para distinguir a parte inteira da parte frac-
cionaria, i. e.
n = (d
k1
d
k2
d
1
d
0
.d
1
d
2
d
m
)
b
,
se
n =
k1

j=m
d
j
b
j
.
Diz-se que um inteiro n tem k algarismos, quando escrito na base b, se
n = (d
k1
d
k2
d
1
d
0
)
b
. Note-se que
n umero de algarismos = [log
b
n] + 1 =
_
log n
log b
_
.
Estamos em condicoes de calcular o tempo necessario para fazer certas
operacoes aritmeticas. Comecaremos com a adicao. Os computadores tra-
balham 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 ar-
itmeticas. 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 com-
putador demora a fazer uma operacao bit) depende do computador em par-
ticular. 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
Denicao. 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 n
0
tal que
f(n) Cg(n)
para qualquer n n
0
. Mais geralmente, se existe C > 0, tal que
f(n
1
, . . . , n
k
) Cg(n
1
, . . . , n
k
)
para n
i
s sucientemente grandes, escrevemos
f = O(g).
Exemplo. Se f = a
0
+ a
1
d + + a
d
n
d
e um polinomio de grau d, com
a
d
> 0 entao f = O(n
d
).
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 adicao 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(log
2
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, m1 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
log 10
_
+ 1
divisoes (tantas quantos os dgitos na base 10 de n). Obtemos assim
tempo(converter n para decimal) = O(k
2
) = O(log
2
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
log b
_
+ 1
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(log
2
n).
Exemplo. Tempo requerido para obter n!. Temos que efectuar O(n) (mais
exactamente n 2) multiplicacoes, cada uma entre um n umero com, no
maximo, nk bits e outro, com, no maximo, k bits. Portanto, cada multi-
plicacao demora O(nk
2
) operacoes bit. Assim,
tempo(calcular n!) = O(n
2
k
2
) = O(n
2
log
2
n).
2.2 P versus NP
Denicao. Um algoritmo para efectuar uma computacao (ou responder a
uma questao), envolvendo inteiros n
1
, . . . , n
r
de k
1
, . . . , k
r
bits, respectiva-
mente, e um algoritmo de tempo polinomial se existirem inteiros d
1
, . . . , d
r
tais que
n umero de operacoes bit = O(k
d
1
1
k
d
r
r
)
Denicao. Uma operacao (questao, computacao, tarefa) e de tempo polino-
mial se existir um algoritmo de tempo polinomial para a efectuar (resolver).
Dizemos que estas operacoes estao na classe P.
Denicao. Se a prova de uma resposta, dada a uma questao, pode ser efec-
tuada 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 factorizacao n = m
1
m
t
. Para vericarmos
se a resposta esta correcta, basta multiplicarmos os inteiros m
1
, . . . , m
t
. Esta
vericacao pode ser efectuada em tempo polinomial (t 1 multiplicacoes,
onde t e muito pequeno). Portanto, a factorizacao esta na classe NP. No
entanto, ainda nao foram descobertos algoritmos para efectuar factorizacoes
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 = NP.
17
Captulo 3
Criptograa Simetrica
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 men-
sagem 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 Introducao
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 x
i
entao o n-uplo
1

n
corresponde
a inteiro
26
n1
x
1
+ 26x
n1
+ x
n
.
Durante este curso, usaremos essencialmente as codicacoes
1. A0, ..., Z25;
2. 2 0, A1, . . . , Z26;
3. 2 0, A1, . . . , Z26, 0 27, . . . 9 36;
4. O codigo ASCII.
Denicao. 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 e
K
E e uma regra para
decifrar correspondente d
K
D, tais que e
K
: P C, d
K
: C P
e d
K
(e
K
(x)) = x, para qualquer x P.
3.2 Cifra de Substituicao
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 = Z
m
.
O conjunto das chaves K consiste de todas as permutacoes dos n umeros
0, 1, . . . , m 1. Sejam x P e y C. Para cada permutacao K,
denimos
e

(x) = (x)
19
e
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 10
26
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 sub-
stituicao, decifre a seguinte mensagem na lngua inglesa.
MGZVYZLGHCMHJMYXSSFMNHAHYCDLMHA
3.3 Criptoanalise classica
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 de-
scobrir 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
So mensagem cifrada(ciphertext-only): O oponente possui uma men-
sagem 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 tem-
porario `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 E T A O I N S
Probabilidade 0.127 0.091 0.082 0.075 0.070 0.067 0.063
Letra H R D L C U M
Probabilidade 0.061 0.060 0.043 0.040 0.028 0.028 0.024
Letra W F G Y P B V
Probabilidade 0.023 0.022 0.020 0.020 0.019 0.015 0.010
Letra K J X Q Z
Probabilidade 0.008 0.002 0.001 0.001 0.001
Figura 3.1: Distribuicao de Frequencias na Lngua Inglesa
Letra A E O S R I N
Probabilidade 0.146 0.126 0.107 0.078 0.065 0.062 0.051
Letra D M T U C L P
Probabilidade 0.050 0.047 0.047 0.046 0.039 0.028 0.025
Letra H G Q B F V J
Probabilidade 0.013 0.013 0.012 0.010 0.010 0.009 0.004
Letra J X K W Y
Probabilidade 0.004 0.002 0.001 0.001 0.001
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 Criptoanalise da Cifra de Substituicao
Vamos complicar um pouco e analisar como se pode quebrar a cifra de sub-
stituicao. 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 A B C D E F G H I
Frequencia 0 1 15 13 7 11 1 4 5
Letra J K L M N O P Q R
Frequencia 11 1 0 16 9 0 1 4 10
Letra S T U V W X Y Z
Frequencia 3 2 5 5 8 6 10 20
Como o Z aparece signicativamente mais vezes que qualquer outra letra,
podemos conjecturar que d
K
(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 digra-
mas 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 d
K
(W) = d. Como DZ aparece quatro
vezes e ZD aparece duas vezes, podemos esperar que d
K
(D) {r, s, t}, mas
nao conseguimos, de uma maneira clara, prever qual das tres possibilidades
e a correcta.
22
Assumindo d
K
(W) = d, verica-se que os unicos digramas com W no
m, que aparecem mais que uma vez sao ZW e RW. Entre os digramas mais
frequentes na lngua inglesa, os unicos que terminam em d sao ed e nd, donde
somos levados a conjecturar que d
K
(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 d
K
(M) {a, i, n, o, s} e d
K
(R)
{n, r, s, t}. Mais, como NM e NZ sao frequentes, entao provavelmente temos
d
K
(NM) {ha, hi}.
A ultima armacao permite-nos conjecturar que d
K
(N) = h e d
K
(M)
{a, i}.
Vejamos como ca a frase se efectuarmos as substituicoes conjecturadas:
- - - - - - end - - - - - - - - - e - - - - n edh - - e - - - - - -
YIFQFM ZRWQFY VECFMD ZPCVMR ZWNMDZ VEJBTX
- - - - - - h - - - - - - - e - - - - e - - - - - - - - - n h - d - - -
CDDUMJ NDIFEF MDZCDM QZKCEY FCJMYR NCWJCS
en - - - - e - h - - e he - - - n - - - - - - n - - - - - - ed - - -
ZREXCH ZUNMXZ NZUCDR JXYYSM RTMEYI FZWDYV
e - - - e - - ne - nd he - e - - - ed - - - - - nh - -
ZVYFZU MRZCRW NZDZJJ XZWGCH SMRNMD
- h - - - - - - e - - - - ed - - - - - - - d - - he - - n
HNCMFQ CHZJMX JZWIEJ YUCFWD JNZDIR
A sequencia ne - nd sugere que devemos substituir C por a o que implica
que d
K
(M) = i. Donde
23
- - - - - i end - - - - - a - i - e - a - in edhi - e - - - - - -
YIFQFM ZRWQFY VECFMD ZPCVMR ZWNMDZ VEJBTX
a - - - i - h - - - - - i - ea - i - e - a - - - a - i - n had - a -
CDDUMJ NDIFEF MDZCDM QZKCEY FCJMYR NCWJCS
en - - a - e - hi - e he - a - n - - - - - i n - i - - - - ed - - -
ZREXCH ZUNMXZ NZUCDR JXYYSM RTMEYI FZWDYV
e - - - e - ineand he - e - - - ed - a - - inhi -
ZVYFZU MRZCRW NZDZJJ XZWGCH SMRNMD
- hai - - a - e - i - - ed - - - - - a - d - - he - - n
HNCMFQ CHZJMX JZWIEJ YUCFWD JNZDIR
Das vogais mais frequentes so nos falta determinar a letra que corre-
sponde 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 elimi-
nadas senao provocavam sequencias de muitas vogais no texto plano. Con-
jecturamos entao que d
K
(Y ) = o. Quando se faz esta substituicao, obtem-se
as sequencias a-ion o que sugere a terminacao ation muito comum em ingles.
Assim, d
K
(J) = t.
o - - - - i end - - o - - a - i - e - a - in edhi - e - - t - - -
YIFQFM ZRWQFY VECFMD ZPCVMR ZWNMDZ VEJBTX
a - - - it h - - - - - i - ea - i - e - a - o - ation hadta -
CDDUMJ NDIFEF MDZCDM QZKCEY FCJMYR NCWJCS
en - - a - e - hi - e he - a - n t - oo - i n - i - o - - ed - o -
ZREXCH ZUNMXZ NZUCDR JXYYSM RTMEYI FZWDYV
e - o - e - ineand he - ett - ed - a - - inhi -
ZVYFZU MRZCRW NZDZJJ XZWGCH SMRNMD
- hai - - a - eti - ted - - t o - a - d - the - - n
HNCMFQ CHZJMX JZWIEJ YUCFWD JNZDIR
Ja tnhamos reparado que d
K
(D) {r, s, t}. Atendendo `a sequencia d-
the, faz sentido considerar que d
K
(D) = s. Das letras mais frequentes so nos
sobram F e r. Donde d
K
(F) = r.
24
o - r - ri end - ro - - aris e - a - in edhise - - t - - -
YIFQFM ZRWQFY VECFMD ZPCVMR ZWNMDZ VEJBTX
ass - it hs - r - r iseasi - e - a - o ration hadta -
CDDUMJ NDIFEF MDZCDM QZKCEY FCJMYR NCWJCS
en - - a - e - hi - e he - asn t - oo - i n - i - o - redso -
ZREXCH ZUNMXZ NZUCDR JXYYSM RTMEYI FZWDYV
e - ore - ineand hesett - ed - a - - inhis
ZVYFZU MRZCRW NZDZJJ XZWGCH SMRNMD
- hair - a - eti - ted - - t o - a - ds thes - n
HNCMFQ CHZJMX JZWIEJ YUCFWD 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.
Denicao. Sejam a e b inteiros e n um inteiro positivo. Se n | (a b),
dizemos que a e congruente com b e escrevemos
a b mod n
Cifra (Deslocamento). Seja m um inteiro positivo. Sejam P = C = K = Z
m
.
Para 0 K m1, x P e y C denimos
e
K
(x) x + K mod m
e
d
K
(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
e
K
(e
K
(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 deslocacao
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 resul-
tados elementares da Teoria dos N umeros.
Denicao. 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 q
0
e r
0
, tais que
a = q
0
b + r
0
, com 0 r
0
< b
Se r
0
= 0 podemos utilizar o algoritmo da divisao para os inteiros b por r
0
.
Entao existem q
1
e r
1
tais que
b = q
1
r
0
+ r
1
, com 0 r
1
< r
0
Procedendo desta forma obtemos uma sequencia de inteiros nao negativos
r
0
, r
1
, . . . , r
n
, tais que r
0
> r
1
> > r
n
0. Note que este processo tem
de terminar ao m de um n umero nito de passos e que o ultimo resto, que
denotamos por r
k+1
, e nulo.
26
Teorema 3.1. Se a e b sao dois inteiros positivos e r
k
e o ultimo resto nao
nulo obtido pelo algoritmo de Euclides, entao r
k
= (a, b). Mais, o algoritmo
de Euclides permite encontrar inteiros u e v tais que
au + bv = (a, b)
Demonstracao: O algoritmo de Euclides pode ser esquematizado pelo
seguinte sistema de equacoes:
_

_
a = bq
0
+ r
0
b = r
0
q
1
+ r
1
r
0
= r
1
q
2
+ r
2
.
.
.
r
k2
= r
k1
q
k
+ r
k
r
k1
= r
k
q
k+1
(3.1)
Seja d = (a, b). Vamos provar por inducao que d|r
i
e d|r
i+1
, para todo
o 0 i k 1. Como d|a e d|b, temos d|(a bq
0
), i.e., d|r
0
. Como
d|b e d|r
0
entao d|(b r
0
q
1
) = r
1
. Agora, suponhamos que d|r
i
e d|r
i+1
,
queremos provar que d|r
i+1
e d|r
i+2
. Usando a hipotese de inducao, obtemos
que d|(r
i
r
i+1
q
i+2
). Mas r
i
r
i+1
q
i+2
= r
i+2
. Portanto d|r
i+2
.
Acabamos de provar que d|r
i
para todo 0 i k. Em particular, d|r
k
.
Como d, r
k
> 0, temos d r
k
.
Reciprocamente, a ultima equacao em (3.1) e o facto de r
k
= 0, diz-nos
que r
k
|r
k1
. Usando a pen ultima equacao, obtemos r
k
|r
k2
. Por inducao,
conclumos que r
k
|r
i
, para qualquer 0 i k. Usando a segunda equacao,
temos r
k
|b e usando a primeira, r
k
|a. Logo, r
k
|d. Portanto, r
k
= d.
Agora, provamos a segunda parte do teorema. Seja r
2
= a e r
1
= b.
Sabemos que
r
i
= r
i2
r
i1
q
i
, (3.2)
para qualquer 0 i k. Vamos provar por inducao que, para qualquer
0 i k, existem inteiros u
i
e v
i
tais que r
i
= u
i
a +v
i
b. Como r
0
= a bq
0
,
o resultado e valido para i = 0. Suponhamos, por hipotese de inducao que o
resultado e verdadeiro para i e para i 1. Entao
r
i+1
= r
i1
r
i
q
i+1
= u
i1
a + v
i1
b (u
i
a + v
i
b)q
i+1
= (u
i1
u
i
q
i+1
)a + (v
i1
v
i
q
i+1
)b
= u
i+1
a + v
i+1
b
27
Portanto, para qualquer 0 i k, r
i
= u
i
a + v
i
b. Em particular, existem
inteiros u e v, tais que r
k
= ua + vb. 2
Exemplo. Seja a = 543 e b = 431. A seguinte tabela esquematiza o al-
goritmo de Euclides para calcular d = (a, b) e descobrir u e v tais que
au + bv = 1.
i 2 1 0 1 2 3 4 5 6
q
i
1 3 1 5 1 1 2
r
i
543 431 112 95 17 10 7 3 1
u
i
1 0 1 3 4 23 27 50 127
v
i
0 1 1 4 5 29 34 63 160
Entao (a, b) = 1 e 127a 160b = 1. Mais, para cada 2 i k
r
i
= au
i
+ bv
i
.
Teorema 3.2. Suponhamos que a > b. Entao
tempo(determinar (a, b) usando o algoritmo de Euclides) = O(log
3
a).
Demonstracao: O algoritmo de Euclides consiste em efectuar sucessi-
vas 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
r
i+2
<
1
2
r
i
:
Se r
i+1

1
2
r
i
, entao como r
i+2
< r
i+1
, obtemos r
i+2
<
1
2
r
i
.
Se r
i+1
>
1
2
r
i
, entao a divisao seguinte, no algoritmo de Euclides, e
r
i
= r
i+1
+ r
i+2
.
Portanto, r
i+2
= r
i
r
i+1
<
1
2
r
i
.
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[log
2
a]
divisoes. Como cada divisao envolve n umeros menores ou iguais a a, o n umero
de operacoes bit por divisao e O(log
2
a). Portanto, o algoritmo de Euclides
demora
O(log
3
a)
28
operacoes bit. 2
Denicao. 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.
Demonstracao: 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 entao
b c mod
n
d
.
Demonstracao: Suponhamos que (a, n) = d e ab ac mod n. Entao
existe um inteiro k tal que ab = ac + kn. Sejam
a
1
=
a
d
, n
1
=
n
d
.
Claramente, a
1
e n
1
sao inteiros e (a
1
, n
1
) = 1. Dividindo ambos os membros
de ab = ac + kn por d, obtem-se a
1
(b c) = kn
1
. Donde, a
1
| kn
1
. Como
(a
1
, n
1
) = 1, temos a
1
| k. Portanto, k = a
1
k
1
, para algum inteiro k
1
. Assim,
b c = k
1
n
1
, ou seja n
1
| (b c). Portanto, b c mod
n
d
. 2
Teorema 3.5. Sejam a e b inteiros nao nulos e d = (a, b). Se d c entao a
equacao
ax + by = c (3.3)
nao tem solucoes inteiras. Se d|c, a equacao tem uma innidade de solucoes
inteiras. Se x = x
0
, y = y
0
e uma solucao de (3.3), entao todas as solucoes
de (3.3) sao dadas por
x = x
0
+ t
b
d
y = y
0
t
a
d
29
onde t e um inteiro.
Demonstracao: Como d|a e d|b, temos d|(ax + by) para quaisquer in-
teiros 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 (x
0
, y
0
) uma solucao de (3.3) e t um
inteiro qualquer. Entao
a
_
x
0
+ t
b
d
_
+ b
_
y
0
t
a
d
_
= ax
0
+ by
0
= c.
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 (x
1
, y
1
) e outra solucao. Entao
a(x
1
x
0
) + b(y
1
y
0
) = c c = 0.
Donde
a
d
(x
1
x
0
) =
b
d
(y
1
y
0
), (3.4)
o que implica que
b
d
|
a
d
(x
1
x
0
).
Como
_
a
d
,
b
d
_
= 1, temos
b
d
| (x
1
x
0
). Portanto, existe um inteiro t, tal
que
x
1
= x
0
+ t
b
d
.
Substituindo em (3.4), obtemos
a
d
t
b
d
=
b
d
(y
1
y
0
),
donde
y
1
= y
0
t
a
d
.
Portanto, qualquer solucao de (3.3) e forma acima descrita. 2
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 solucao e unica
mod
n
d
. Se (a, n) = 1 entao (3.5) tem uma solucao que e unica mod n.
Demonstracao: Se x
0
e uma solucao da equacao (3.5) entao existe um
inteiro y
0
tal que
ax
0
= b + ny
0
,
donde a equacao
ax ny = b (3.6)
tem solucao. Reciprocamente, se (x
0
, y
0
) e uma solucao de (3.6) entao
ax
0
ax
0
ny
0
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 (x
0
, y
0
) uma solucao.
Pelo teorema 3.5 qualquer solucao de (3.6) e da forma
x = x
0
+ t
n
d
, y = y
0
t
a
d
,
onde t e um inteiro. Portanto, qualquer solucao de (3.5) e da forma
x = x
0
+ t
n
d
Como
x
0
+ t
n
d
x
0
mod
n
d
,
entao todas as solucoes de (3.5) sao congruentes com x
0
mod
n
d
, e portanto,
a solucao de (3.5) e unica mod
n
d
.
A ultima parte do teorema resulta imediatamente das duas primeiras
partes. 2
31
Denicao. Sejam a e n inteiros tais que (a, n) = 1. Ao unico inteiro, que e
solucao da equacao
ax 1 mod n
chamamos inverso de a mod n e denota-mo-lo por a
1
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(log
3
a)
operacoes bit. Em particular obtemos:
Corolario 3.7. Dado a, n inteiros, com n > 1 e (a, n) = 1. Entao
tempo(determinar a
1
) = O(log
3
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
Z
m
, 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 = Z
m
e K =
{(a, b) Z
2
m
| (a, m) = 1}. Sejam x P e y C entao denimos
e
a,b
(x) ax + b mod m
e
d
a,b
(y) a
1
(y b) mod m
32
3.8 Funcao de Euler
Denicao. 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.
Demonstracao: 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 2 . . . m
m+1 m+2 . . . m+m
2m+1 2m+2 . . . 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) el-
ementos primos com n. Mais, estes sao os unicos elementos que sao ao mesmo
tempo primos com m e primos com n. Isto e, ha exactamente (m)(n), el-
ementos 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)
e a funcao de Euler e multiplicativa. 2
33
Teorema 3.9. Suponhamos que a factorizacao de n em primos e a seguinte
n = p
a
1
1
p
a
2
2
p
a
k
k
Entao
(n) = n(1
1
p
1
)(1
1
p
2
) (1
1
p
k
) =
k

i=1
(p
a
i
i
p
a
i
1
i
)
Demonstracao: Vamos comecar por calcular (p
a
), para p primo e a
1. Um inteiro e primo com p
a
excepto se for divisvel por p. Os n umeros de
1 a p
a
que sao divisveis por p, sao 1 p, 2 p, . . . , p
a1
p. Portanto,
(p
a
) = p
a
p
a1
= p
a
(1
1
p
).
Mas como a funcao (n) e multiplicativa, temos
(n) = (p
a
1
1
)(p
a
2
2
) (p
a
k
k
)
= p
a
1
1
(1
1
p
1
)p
a
2
2
(1
1
p
2
) p
a
k
k
(1
1
p
k
)
= p
a
1
1
p
a
2
2
p
a
k
k
(1
1
p
1
)(1
1
p
2
) (1
1
p
k
)
= n(1
1
p
1
)(1
1
p
2
) (1
1
p
k
)
2
3.9 Criptoanalise 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 am 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 =
(Z
m
)
n
. Dada uma chave K = (k
1
, . . . , k
n
) e x P e y C, denimos
e
K
(x
1
, . . . , x
n
) (x
1
+ k
1
, . . . , x
n
+ k
n
) mod m
e
d
K
(y
1
, . . . , y
n
) (y
1
k
1
, . . . , y
n
k
n
) mod m.
O n umero de chaves possveis, dados m e n e m
n
.
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 codicamos 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 19 14 18 8 18 19 4
15 14 17 19 20 6 0 11 15 14 17 19 20 6 0
19 6 10 23 22 23 8 3 6 2 9 1 12 25 4
12 0 13 0 14 4 18 4 6 20 17 14
11 15 14 17 19 20 6 0 11 15 14 17
23 15 1 17 7 24 24 4 17 9 5 5
A mensagem cifrada ca
TGKXWXIDGCJBMZEXPBRHYYERJFF
36
3.11 Criptoanalise 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 d
1
, d
2
, . . . 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.
Denicao. Seja x = x
1
x
2
. . . x
m
uma lista de m letras. O ndice de coin-
cidencia de x, que denotamos por I
c
(x) e a probabilidade de que dois elemen-
tos de x sejam iguais. Denotemos as frequencias de A, B, C, . . . , Z em x por
f
0
, f
1
, . . . , f
25
. Como podemos escolher dois elementos de x de
_
m
2
_
maneiras
e, para cada 0 i 25, ha
_
f
i
2
_
maneiras de escolher dois elementos e ambos
serem i entao,
I
c
(x) =

25
i=0
f
i
(f
i
1)
m(m1)
.
Se x e parte de um texto em ingles ou e um texto cifrado atraves de uma
cifra mono-alfabetica, e p
i
sao as probabilidades indicadas na gura 3.1 sera
de esperar que
I
c
(x)
25

i=0
p
2
i
= 0.065.
A gura 3.3 apresenta os ndices de coincidencia de varias lnguas.
37
Portugues 0.0738
Ingles 0.0661
Frances 0.0778
Italiano 0.0738
Alemao 0.0762
Japones 0.0819
Russo 0.0529
Texto aleatorio 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 = y
1
y
2
. . . y
m
foi obtido atraves de uma cifra de Vi-
genere 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 y
i
a linha i, desta matriz, com 1 i r. Se r = n entao e de esperar
que I
c
(y
i
) seja aproximadamente 0.0661, para qualquer 1 i r. Se r = n
entao as listas y
i
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 y
i
e obtido
atraves de uma cifra de deslocamento de um texto plano na lngua consider-
ada 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 su-
ciente para conjecturar com grande convic cao o valor da chave. Neste caso,
usamos o ndice de coincidencia m utua entre duas listas.
Denicao. Sejam x = x
1
x
2
. . . x
m
e y = y
1
y
2
. . . y
t
listas com m e t letras,
respectivamente. O ndice de coincidencia m utua de x e y, que denotamos
por MI
c
(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 f
0
, f
1
, . . . , f
25
e g
0
, g
1
, . . . , g
25
, respectivamente, entao
MI
c
(x, y) =

25
i=0
f
i
g
i
mt
.
Ja vimos que cada y
i
e obtido atraves de uma cifra de deslocamento.
38
Seja K = (k
1
, . . . , k
n
) a palavra passe, entao y
i
obtem-se somando k
i
a cada
i-esima letra do texto plano. Vamos primeiro estimar MI
c
(y
i
, y
j
). Tirando
uma letra de y
i
e outra de y
j
, a probabilidade de serem ambas A e p
k
i
p
k
j
,
a probabilidade de ambas serem B e p
1k
i
p
1k
j
, etc. (note que os ndices sao
reduzidos mod 26). Portanto,
MI
c
(y
i
, y
j
)
25

h=0
p
hk
i
p
hk
j
=
25

h=0
p
h
p
h+k
i
k
j
.
Esta estimativa depende apenas da diferenca k
i
k
j
mod 26 `a qual
chamamos deslocamento relativo de y
i
e y
j
. Mais, como
25

h=0
p
h
p
h+l
=
25

h=0
p
hl
p
h
,
um deslocamento relativo de u da a mesma estimativa para MI
c
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 MI
c
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 coin-
cidencia m utua (MI
c
) muito distinto do MI
c
correspondente a qualquer outro
deslocamento relativo. Podemos usar esta informacao para tentar descobrir
u = k
i
k
j
. Primeiro xamos y
i
e vamos cifrar y
j
usando cada uma das
chaves g com 0 g 25 e denotamos a mensagem cifrada obtida, por y
g
j
.
Em seguida, calculamos os ndices MI
c
(y
i
, y
g
j
), para cada 0 g 25,
39
MI
c
(y
i
, y
g
i
) =

25
h=0
f
h,i
f
hg,j
mt
,
onde f
h,i
e f
h,j
sao as frequencias da letra correspondente a h em y
i
e y
j
,
respectivamente. Quando g = u o ndice MI
c
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:
Exemplo. Sabemos que a seguinte mensagem foi cifrada utilizando um crip-
tosistema 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 out-
ras 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
I
c
(y
1
) = 0.046 e I
c
(y
2
) = 0.041. Se r = 3 obtemos I
c
(y
1
) = 0.043, I
c
(y
2
) =
0.050 e I
c
(y
3
) = 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 de-
scobrir a palavra passe. Utilizando um programa no computador, calcula-se
todos os 260 valores de MI
c
(y
i
, y
g
j
), 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 unico valor perto de 0.065, conjecturamos que esse e o valor do
deslocamento relativo.
Verica-se haver grande evidencia que o deslocamento relativo entre y
1
e y
2
seja 9; o deslocamento relativo entre y
2
e y
3
seja 13; o deslocamento
relativo entre y
2
e y
5
seja 7; o deslocamento relativo entre y
3
e y
5
seja 20;
o deslocamento relativo entre y
4
e y
5
seja 11. Obtemos assim as seguintes
equacoes nas cinco incognitas k
1
, . . . , k
5
(todos os calculos sao efectuados
mod 26):
k
1
k
2
= 9
k
1
k
5
= 16
k
2
k
3
= 13
k
2
k
5
= 7
k
3
k
5
= 20
k
4
k
5
= 11.
Donde
k
2
= k
1
+ 17
k
3
= k
1
+ 4
k
4
= k
1
+ 21
k
5
= k
1
+ 10
Assim, a chave deve ser (k
1
, k
1
+17, k
1
+4, k
1
+21, k
1
+10), para algum
0 k
1
25, ou seja, a chave e uma das sequencias AREVK ou BSFWL ou
CTGXM. . . . A unica destas sequencias que faz sentido e JANET. Note-se
que a palavra passe nao tem que fazer sentido. Nesse caso, podemos experi-
mentar qualquer das possveis chaves ate que uma de um texto com sentido,
ou, se quisermos utilizar o computador, vericar 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 = (Z
m
)
n
e
K = {K M
n
(Z
m
) : Ke invertvel}. Dada uma chave
K =
_
_
_
_
_
k
1,1
k
1,2
. . . k
1,n
k
2,1
k
2,2
. . . k
2,n
.
.
.
.
.
.
.
.
.
k
n,1
k
n,2
. . . k
n,n
_
_
_
_
_
e x P e y C, denimos
e
K
(x
1
, x
2
, . . . , x
n
) (x
1
x
2
. . . x
n
)K mod m
e
d
K
(y
1
, y
2
. . . , y
n
) (y
1
y
2
. . . y
n
)K
1
mod m.
Exemplo. Sejam m = 26, n = 2 e
K =
_
11 8
3 7
_
Neste caso
K
1
=
_
7 18
23 11
_
Para cifrar o texto plano hill, dividimos primeiro nos dois grupos hi e ll e
efectuamos os produtos
_
7 8
_
_
11 8
3 7
_
=
_
23 8
_
e
_
11 11
_
_
11 8
3 7
_
=
_
24 9
_
A mensagem cifrada ca XIYJ.
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 x
j
=
(x
j,1
, x
j,2
, . . . , x
j,n
) e y
j
= (y
j,1
, y
j,2
, . . . , y
j,n
), tais que y
j
= e
K
(x
j
), com 1
j n. Sejam X = [x
i,j
] e Y = [y
i,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 e
K
(5, 17) = (15, 16),
e
K
(8, 3) = (2, 5) e e
K
(0, 24) = (10, 20). Utilizando os dois primeiros pares,
obtemos a equacao matricial
_
15 16
2 5
_
=
_
5 17
8 3
_
K.
Como
_
5 17
8 3
_
1
=
_
9 1
2 15
_
a chave K e
K =
_
9 1
2 15
__
15 16
2 5
_
=
_
7 19
8 3
_
.
Podemos utilizar o terceiro par para conrmar 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 Permutacao
Ate agora todas as cifras estudadas envolveram substituicoes das letras do
texto plano por letras da mensagem cifrada. A ideia da cifra de permuta cao
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 = (Z
m
)
n
e K consiste de todas as permutacoes de {1, . . . , n}. Dada uma chave e
x P e y C, denimos
e

(x
1
, x
2
, . . . , x
n
) (x
(1)
, x
(2)
, . . . , x
(n)
)
e
d

(y
1
, y
2
, . . . , y
n
) (y

1
(1)
, x

1
(2)
, . . . , x

1
(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 = y
1
y
2
= e
K
(x
1
)e
K
(x
2
) .
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 x
1
x
2
, e gerado um uxo de chaves, digamos z = z
1
z
2
,
denido por
z
i
= f
i
(K, x
1
, . . . , x
i1
)
e a mensagem cifrada e obtida da seguinte forma:
y = y
1
y
2
= e
z
1
(x
1
)e
z
2
(x
2
) .
44
Assim, para cifrar o texto plano x
1
x
2
, calcula-se sucessivamente os valores
z
1
, y
1
, z
2
, y
2
, . . . . Para decifrar y
1
y
2
, calcula-se sucessivamente os valores
z
1
, x
1
, z
2
, x
2
, . . . .
A formulacao matematica e apresentada a seguir:
Denicao. Uma cifra de uxo e um heptuplo (P, C, K, L, F, E, D) satis-
fazendo 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 = (f
1
, f
2
, . . . ) e o gerador de uxos de chaves. Para cada i 1,
f
i
: K P
i1
L.
6. Para cada z L existe uma regra para cifrar e
z
E e uma regra para
decifrar correspondente d
z
D, tais que e
z
: P C, d
z
: C P e
d
z
(e
z
(x)) = x, para qualquer x P.
As cifras de bloco sao um caso particular das cifras de uxo, onde z
i
= k,
para qualquer i 1. Quando as funcoes f
i
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 z
1
z
2
.
Uma cifra de uxo e periodica com perodo d se z
i+d
= z
i
, para qualquer
i 1. A cifra de Vegenere pode ser interpretada como uma cifra de uxo
sincronizada e periodica, com perodo n. Neste caso, z
i
= k
i
, para 1 i n.
Em muitos criptosistemas de uxo, utiliza-se P = C = L = (Z
2
)
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 = (k
1
, . . . , k
n
, c
0
, . . . , c
n1
) K.
Denimos z
j
= k
j
, para 1 j n, e geramos o uxo de chaves atraves da
seguinte recorrencia linear de grau n
z
i+n

n1

j=0
c
j
z
i+j
mod 2,
para i 1.
Note que so estamos realmente a cifrar quando (k
1
, . . . , k
n
) = (0, . . . , 0).
Se esta hipotese se vericar e se os valores c
0
, c
1
, . . . , c
m1
tambem nao sao
todos nulos, entao vamos obter uma cifra de uxo periodica de perodo 2
n
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, uti-
lizada no Bluetooth, sao cifras do tipo LFSR.
Exemplo. Sejam n = 4, K = (1, 0, 0, 0) e o uxo de chaves gerado por
z
i+4
z
i
+ z
i+1
mod 2.
Entao o uxo 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 = 2
4
1.
Este metodo pode ser ecientemente implementado em Hardware uti-
lizando um Linear feedback shift register (LFSR).
3.17 Criptoanalise 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. y
i
= x
i
+z
i
. O uxo de chaves e produzido a partir da
chave secreta z
1
, . . . , z
m
e as relacoes de recorrencia linear
46
z
m+i

m1

j=0
c
j
z
i+j
mod 2,
onde c
0
, . . . , c
m1
Z
2
e c
0
= 1.
Suponha que o oponente conhece o texto plano x
1
, x
2
, . . . , x
n
e a men-
sagem cifrada correspondente y
1
, y
2
, . . . , y
n
, entao pode obter os valores z
i

x
i
+ y
i
mod 2, para 1 i n. Suponhamos que o oponente tambem con-
hece o comprimento da chave secreta m. Entao precisa apenas de determinar
c
0
, c
1
, . . . , c
m1
. Como para cada i 1, temos
z
m+i

m1

j=0
c
j
z
i+j
mod 2,
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
(z
m+1
, z
m+2
, . . . , z
2m
) = (c
0
, c
1
, . . . , c
m1
)
_

_
z
1
z
2
. . . z
m
z
2
z
3
. . . z
m+1
.
.
.
.
.
.
.
.
.
z
m
z
m+1
. . . z
2m1
_

_
.
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
(c
0
, c
1
, . . . , c
m1
) = (z
m+1
, z
m+2
, . . . , z
2m
)
_

_
z
1
z
2
. . . z
m
z
2
z
3
. . . z
m+1
.
.
.
.
.
.
.
.
.
z
m
z
m+1
. . . z
2m1
_

_
1
.
Vejamos um exemplo:
Exemplo. Suponhamos que Oscar obtem a mensagem cifrada
101101011110010
47
correspondente ao texto plano
011001111111000.
Entao o uxo de chaves pode ser obtido somando bit a bit mod 2 os valores
anteriores. Portanto o uxo de chaves sera
110100100001010.
Entao
(0, 1, 0, 0, 0) = (c
1
, c
2
, c
3
, c
4
, c
5
)
_

_
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 (c
1
, c
2
, c
3
, c
4
, c
5
) = (1, 0, 0, 1, 0). Portanto, a recorrencia para gerar
o uxo de chaves e
z
i+5
z
i
+ z
i+3
mod 2.
48
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 Chines 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.
Demonstracao: 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 mod n. (4.2)
49
Como (m, n) = 1, esta ultima equacao tem uma unica 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 unica mod mn. 2
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 m
1
, . . . , m
k
inteiros posi-
tivos que sao primos entre si dois a dois. Entao o sistema
_

_
x a
1
mod m
1
x a
2
mod m
2
.
.
.
x a
k
mod m
k
tem uma unica solucao mod (m
1
m
2
m
k
).
Demonstracao: Iremos usar o teorema 4.1 (k 1) vezes. Pelo teorema
4.1 as duas primeiras equacoes tem uma unica solucao mod (m
1
m
2
). Seja
b
2
esta solucao, i. e.
x b
2
mod m
1
m
2
(4.3)
A terceira equacao e
x a
3
mod m
3
. (4.4)
Como, por hipotese (m
1
, m
3
) = (m
2
, m
3
) = 1, entao temos (m
1
m
2
, m
3
) = 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 unica
solucao de (4.3) e (4.4) mod ((m
1
m
2
)m
3
), i. e., ha uma unica solucao
das tres primeiras equacoes mod (m
1
m
2
m
3
). Continuando desta maneira,
50
depois de (k 1) aplicacoes do teorema 4.1, obtemos uma unica solucao
mod (m
1
m
2
m
k
) do sistema
_
x b
k1
mod (m
1
m
2
m
k1
)
x a
k
mod m
k
Esta solucao, digamos x b
k
mod (m
1
m
2
m
k
), e tambem a unica solucao
do sistema inicial mod (m
1
m
2
m
k
). 2
O proximo teorema permitir-nos-a encontrar uma solucao do sistema
_

_
x a
1
mod m
1
x a
2
mod m
2
.
.
.
x a
k
mod m
k
sem ter que utilizar diversas vezes o teorema 4.1.
Teorema 4.3. Sejam m
1
, . . . , m
k
inteiros positivos que sao primos entre
si dois a dois. Sejam M = m
1
m
2
m
k
, M
i
=
M
m
i
e y
i
o inverso de M
i
mod m
i
, para qualquer 1 i k. Entao
N = a
1
M
1
y
1
+ a
2
M
2
y
2
+ a
k
M
k
y
k
e a unica solucao mod M do sistema
_

_
x a
1
mod m
1
x a
2
mod m
2
.
.
.
x a
k
mod m
k
Demonstracao: Pelo teorema do resto chines, sabemos que ha uma
solucao unica mod M do sistema anterior. Portanto, basta-nos provar que
N e essa solucao. Seja 1 i k. Como (M
i
, m
i
) = 1, entao, pelo teorema
3.6, existe y
i
tal que M
i
y
i
1 mod m
i
. Mais, M
i
0 mod m
j
, para
qualquer j = i. Entao
N a
1
M
1
y
1
+ a
2
M
2
y
2
+ a
k
M
k
y
k
mod m
i
a
i
M
i
y
i
mod m
i
a
i
M
i
(M
i
)
1
mod m
i
a
i
mod m
i
51
Portanto, N e solucao da equacao x a
i
mod m
i
, para qualquer 1 i k.
Donde, N e a unica solucao do sistema mod M. 2
Exemplo. A primeira mencao conhecida do teorema chines do resto e o
seguinte problema extrado do livro Sun Tzu Suan Ching (O Manual Matema-
tico 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 resolver o sistema
_
_
_
x 2 mod 3
x 3 mod 5
x 2 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 equacao, 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 solucao do sistema e da forma 23 + 105s, para s
inteiro, e a unica solucao mod (3 5 7) e 23.
Agora usamos o metodo descrito no teorema anterior. Aqui M = 105,
M
1
= 35, M
2
= 21 e M
3
= 15. O inverso de 35 mod 3 e y
1
= 1, o inverso
de 21 mod 5 e y
2
= 1 e o inverso de 15 mod 7 e y
3
= 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 = (Z

n
, ) entao
G tem (n) elementos e, neste caso, denimos ordem de um elemento da
seguinte maneira:
Denicao. Suponhamos que (a, n) = 1. Denimos a ordem de a mod n
como sendo o menor inteiro positivo, digamos b, para o qual
a
b
1 mod n
e denota-mo-lo por ord
n
(a).
Por exemplo, ord
13
(5) = 4, pois
5
1
5 mod 13
5
2
1 mod 13
5
3
5 mod 13
5
4
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 b
p
b mod p
Teorema 4.6 (Euler). Se (b, n) = 1 entao
b
(n)
1 mod n.
4.3 Razes primitivas
Quando p e primo, o grupo (Z

n
, ) 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.
Denicao. Se (a, n) = 1 e ord
n
(a) = (n) dizemos que a e uma raz primi-
tiva 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 exac-
tamente (p 1) razes primitivas de p.
53
4.4 Exponenciacao modular rapida
Antes de passar ao sistema RSA e outros sistemas de chave p ublica necessita-
mos 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(b
n
mod m) = O(log nlog
2
m)
Por um exerccio, calcular b
n
demora O(n
2
log
2
b) operacoes bit. Pode-
mos determinar b
n
mod m dividindo b
n
por m o que nos da O(nlog b log m)
operacoes bit. Portanto, no total teramos
O(n
2
log
2
b) + O(nlog b log m)
operacoes bit. Este valor e exageradamente superior a O(log nlog
2
m) se m
nao for muito superior a n, portanto temos que utilizar um algoritmo muito
mais rapido que o indicado para calcular b
n
. 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 m
2
.
Demonstracao: Denotamos por a o produto parcial. Quando o algo-
ritmo terminar, teremos a b
n
mod m. Comecamos por tomar a = 1 e seja
n = (n
k1
n
1
n
0
)
2
a representacao de n na base 2, onde k e o n umero de
bits de n.
Se n
0
= 1, entao tomar a = b, caso contrario a = 1. A seguir calculamos
b
2
e seja b
1
= b
2
mod m.
Se n
1
= 1, a passa a ser ab
1
mod m, caso contrario a nao e alterado.
Seja b
2
= b
2
1
mod m.
Se n
2
= 1, a passa a ser ab
2
mod m, caso contrario a nao e alterado.
Continuando desta maneira, temos, no passo j, b
j
b
2
j
mod m, com
b
j
< m. Se n
j
= 1, i. e. se 2
j
aparece na expansao binaria de n, entao
inclumos b
j
no produto para a, caso contrario, nao inclumos b
j
. Depois de
k 1 passos, obtemos
a b
n
0
+n
1
2+n
k1
2
k1
b
n
mod m.
Em cada passo temos uma multiplicacao e uma divisao, se n
j
= 0, ou duas
multiplica coes e duas divisoes se n
j
= 1, de n umeros menores que m
2
. Por-
tanto, cada passo demora O(log
2
m
2
) = O(log
2
m) operacoes bit. Como
54
temos O(log n) passos, obtemos
tempo(b
n
mod m) = O(log nlog
2
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 unico inteiro
0 < C < n tal que
C P
e
mod n.

E importante notar que p, q e (n) sao mantidos secretos. Como sabemos


(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
C
d
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
_
C
d
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 conheci-
mentos 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 n
i
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 c
i
= n
e
mod n
i
, 1 i e as correspondentes mensagens
cifradas. Entao o inimigo usa o seguinte algoritmo:
1. Calcular um inteiro c tal que c c
i
mod n
i
, onde 1 i e e 1 c
n
1
n
2
n
e
, 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 n
1
n
2
n
e
(porque M < n
i
) e que claramente
verica as congruencias u c
i
mod n
i
. Donde c = u, pelo teorema chines
dos restos (ha unicidade de solucao mod (n
1
n
e
)), e portanto
e

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 = 2
16
+ 1.
4.6 Resduos quadraticos
Sejam p primo mpar e a um inteiro, tais que p a. Seja 1 x p 1
entao so um dos inteiros x, 2x, . . . , (p1)x e congruente com a mod p. Ha,
portanto, um unico x

tal que
xx

a mod p
com 1 x

p 1. Dizemos que x

esta associado a x. Ha duas possibili-


dades, ou existe pelo menos um 1 x p1, que esta associado a si mesmo
ou nao existe tal inteiro. Vamos analisar cada caso.
1. Suponhamos que ha um inteiro x
1
que esta associado a si mesmo. Entao
a congruencia
x
2
a mod p (4.5)
57
tem a solucao x = x
1
. Neste caso, dizemos que a e um resduo
quadratico de p. Claramente, p x
1
e outra solucao de (4.5). Mais, se
x
2
e outra solucao de (4.5), entao
x
2
1
x
2
2
0 mod p
donde,
(x
1
x
2
)(x
1
+ x
2
) 0 mod p.
Logo, x
1
x
2
mod p ou x
1
x
2
p x
2
mod p. Portanto, a
equacao (4.5) so tem duas solucoes, que sao x
1
e p x
1
. Podemos
entao agrupar os inteiros
1, 2, . . . , p 1
em
p 3
2
pares de inteiros associados e diferentes, sobrando x
1
e px
1
que estao associados a si proprios. Temos
x
1
(p x
1
) x
2
1
a mod p
e, para cada par de associados x e x

,
xx

a mod p.
Entao
(p 1)! =
p1

i=1
i a a
p3
2
a
p1
2
mod p.
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
p 1
2
pares de inteiros associados diferentes.
Portanto,
(p 1)! =
p1

i=1
i a
p1
2
mod p.
58
Seja p um primompar e a um qualquer inteiro nao divisvel por p. Denimos
o smbolo de Legendre
_
a
p
_
, da seguinte maneira
_
a
p
_
=
_
1 se a e um resduo quadratico de p
1 se a e um nao-resduo quadratico de p
Claramente,
_
a
p
_
=
_
b
p
_
se a b mod p. Acabamos de provar o seguinte
teorema:
Teorema 4.9. Se p e um primo mpar e a nao e m ultiplo de p, entao
(p 1)!
_
a
p
_
a
p1
2
mod p.
Os dois casos mais simples deste teorema sao a = 1 e a = 1. Como a
equacao x
2
1 mod p tem as solucoes 1 e 1, entao
_
1
p
_
= 1
para qualquer primo mpar. O proximo teorema e baseado neste exemplo
Teorema 4.10 (Wilson). Seja p primo, entao
(p 1)! 1 mod p
Demonstracao: Se p e mpar entao
_
1
p
_
= 1
Logo, considerando a = 1 no teorema anterior, obtemos o resultado enunci-
ado. 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
_
a
p
_
= a
p1
2
mod 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
(m1)! 1 mod m
Demonstracao: Atendendo ao resultado anterior, basta-nos considerar
m > 1 composto. Entao existe um inteiro 1 < d < m tal que d | m. Mas
entao d | (m1)!. Logo, d ((m1)! + 1). Donde, m ((m1)! + 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.
_
1
p
_
= (1)
p1
2
.
Demonstracao: Resulta imediatamente do teorema 4.11. 2
Em seguida, vamos introduzir outra caracterizacao do smbolo de Legen-
dre, obtida por Gauss.
Seja p um primo mpar e consideremos o conjunto dos resduos mnimos:
S = {
p 1
2
,
p 3
2
, . . . , 2, 1, 1, 2, . . . ,
p 1
2
}.
Seja (a, p) = 1 e seja o n umero de resduos mnimos negativos dos inteiros
a, 2a, 3a, dotsa
p1
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
_
a
p
_
.
Lema 4.14 (Lema de Gauss).
_
a
p
_
= (1)

.
Demonstracao: Seja m
l
o resduo mnimo de la, onde m
l
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
m
l
= m
k
. Suponhamos que m
l
= m
k
. 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 {m
1
, m
2
, . . . , m
(p1)/2
} coinci-
dem. Multiplicando as congruencias
1a m
1
mod p
2a m
2
mod p
.
.
.
p 1
2
a mp1
2
mod p
obtemos
_
p 1
2
_
!a
p1
2
(1)

_
p 1
2
_
! mod p.
Portanto,
a
p1
2
(1)

mod p.
Pelo teorema 4.11, obtemos o resultado pretendido. 2
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.
_
2
p
_
= (1)
p
2
1
8
.
Demonstracao: 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 = 8k1 entao (p1)/2 = 4k1 e ha 2k1 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
Os n umeros 1
2
, 2
2
, 3
2
, . . .
_
p 1
2
_
2
, sao todos incongruentes mod p, pois
se
r
2
s
2
mod p
entao r s mod p ou r s mod p, e a segunda alternativa e impossvel.
Mais,
r
2
(p r)
2
mod p,
portanto, se p for mpar, ha
p 1
2
resduos quadraticos e
p 1
2
nao-resduos
quadraticos de p.
Teorema 4.16. Seja p um primo mpar. O produto de dois resduos quadra-
ticos 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
p
__
b
p
_
=
_
ab
p
_
62
Demonstracao: Pelo teorema 4.11,
_
a
p
__
b
p
_
a
p1
2
b
p1
2
mod p
= (ab)
p1
2
mod p
=
_
ab
p
_
mod p
Donde,
_
a
p
__
b
p
_
=
_
ab
p
_
2
Sejam p e q dois primos mpar distintos. Se q e um resduo quadratico de
p, entao a congruencia
x
2
q mod p
e sol uvel. Analogamente, se p e um resduo quadratico de q, entao a con-
gruencia
x
2
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 enun-
ciar 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
_
p
q
__
q
p
_
= (1)
p1
2
q1
2
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
97
_
=
_
3
97
__
17
97
_
=
_
97
3
__
97
17
_
=
_
1
3
__
12
17
_
=
_
2
17
_
2
_
3
17
_
=
_
17
3
_
=
_
1
3
_
= (1)
31
2
= 1
64
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
_
=
_
p
5
_
=
_
1 se p 1, 4 mod 5
1 se p 2, 3 mod 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 b
2
mod p).
Entao a
p+1
4
e a raiz quadrada de a mod p.
Demonstracao: Se a 0 mod p entao, claramente, a
p+1
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
4
e um inteiro. Basta-nos provar que o
quadrado de a
p+1
4
e congruente com a mod p. Temos
(a
p+1
4
)
2
a a
p1
2
a
_
a
p
_
a mod p,
pelo Lema de Euler. 2
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 calcu-
ladas 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 deter-
minar uma solucao da congruencia x
2
n mod p.
1. Sejam d e s inteiros positivos tais que m e mpar e p 1 = d2
s
, 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 n
d
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 r
2
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 t
2
i
1
mod p.
6. Seja b c
2
s

i1
mod p, r passa a ser rb mod p, t passa a ser tb
2
mod p, c passa a ser b
2
mod p e s

passa a ser i. Voltar ao passo 4.


Nota: Se p 3 mod 4, obtem-se n
d
n
p1
2
1 mod p, pelo lema de
Euler, portanto o passo 4. da a solucao mencionada no teorema anterior,
n
d+1
2
n
p+1
4
mod p.
Como n e um resduo quadratico mod p, tem-se
t
2
s

1
n
p1
2
1 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 r
2
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 2
s
o
que implica que a ordem de b
2
mod p e 2
i
. Como a ordem de t tambem
era 2
i
, o novo t vai ter ordem 2
j
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
1 = 2
6
3, temos d = 3 e s = 6. Entao r
1
143
3+1
2
184 mod 193 e
t
1
143
3
64 1 mod 193.
Um nao-resduo quadratico de 193 e 5. Assim c
1
5
3
125 mod 193. A
ordem de t mod 193 e 2
4
, portanto, i
1
= 4. Obtemos assim, b
1
125
2
641

185 mod 193, r


2
184 185 72 mod 193, c
2
185
2
64 mod 193,
t
2
64 64 43 mod 193 e s

2
= 4.
Continuando desta forma, obtemos as sequencias (r
1
, r
2
, r
3
, r
4
, r
5
) = (184, 72, 169, 126, 23)
e (t
1
, t
2
, t
3
, t
4
, t
5
) = (64, 43, 112, 1, 1). Portanto 23
2
143 mod 193.
4.8 Cifra de Rabin
Ha vantagens em utilizar criptosistemas cuja seguranca seja baseada na di-
culdade 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 ab-
soluta 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 fac-
torizar 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 simpli-
car 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 m
2
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
m
p
c
p+1
4
mod p e m
q
c
q+1
4
mod q.
Assim m
p
sao as duas razes quadradas de c mod p e m
q
sao as duas
razes quadradas de c mod q. Usando o teorema chines do resto, obtem-se
quatro inteiros x
1
, x
2
, x
3
e x
4
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 exem-
plo, os primeiros 64 bits sao iguais aos ultimos 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.
Exemplo. Alice usa os n umeros primos p = 11 e q = 23. Entao n = 253.
Bob cifra a mensagem m = 158 calculando
c m
2
mod n.
Verica-se que c = 170. Alice calcula
m
p
c
p+1
4
mod p e m
q
c
q+1
4
mod q,
obtendo m
p
= 4 e m
q
= 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 in-
teiros. 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 eciente.
Demonstracao: 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
n
d
). Caso
contrario, Olga determina
c = x
2
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:
m x mod p e m x mod q
m x mod p e m x mod q
m x mod p e m x mod q
m x mod p e m x mod q
No primeiro caso, m = x e (mx, n) = n; no segundo caso, (mx, n) = p;
no terceiro caso, (m x, n) = q e no ultimo caso, m = n x e, como
(n, x) = 1, obtemos (mx, 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 17
2
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 factorizacao de 253, caso contrario, Olga escolhe outro in-
teiro x e aplica o procedimento outra vez. Depois de poucas aplicacoes e
muito provavel que Olga tenha encontrado a factorizacao 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 crip-
tograco, mas serve de base ao sistema criptograco ElGamal, que descrever-
emos 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 dis-
creto. 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
e Bob calcula
A
b
g
ab
mod p.
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 unico
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 men-
sagens 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 g
a
mod p.
A chave p ublica de Alice e o terno (p, g, A). A sua chave secreta e o expo-
nente a. O inteiro A e a parte da chave, proveniente do protocolo de Die-
Hellman, 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 A
b
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 = p1a e calcula B
x
c
mod p que vai ser a mensagem original m pois
B
x
c g
b(p1a)
A
b
m (g
p1
)
b
(g
a
)
b
A
b
m A
b
A
b
m m mod p.
71
4.10.1 Ataque da repeticao 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 A
b
m mod p e c

A
b
m

mod p
donde
c

c
1
m

m
1
mod p
Um atacante que saiba m pode obter m

, usando a formula
m

c
1
m mod p.
4.11 Sistema Merkle-Hellman
Nesta seccao descrevemos outro tipo de criptosistema que e baseado no pro-
blema do saco-mochila (em ingles, Knapsack). Dados k inteiros v
0
, . . . , v
k1
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=0

i
v
i
= V.
Note que podem haver imensas solucoes, nenhuma solucao, ou uma unica
solucao, dependendo dos v
i
s e de V . Um caso particular do problema saco-
mochila, e quando os v
i
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 pro-
blemas 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 v
0
, . . . , v
k1
uma sequencia super crescente e V um inteiro.
72
1. Faca W = V e j = k.
2. Se v
i
> W para 0 i j 1 ir para o passo 4. Caso contrario,
determine o maior dos v
i
s, digamos v
i
0
, tal que v
i
0
W. Faca
i
= 0
para i > i
0
e
i
0
= 1.
3. Substitua W por W v
i
0
e j = i
0
. Se W > 0, voltar ao passo 2.
4. Se W = 0 o algoritmo termina e encontrou-se a solucao
= (
0
, . . . ,
k1
),
(que e unica) do problema. Se W > 0, todos os restantes v
i
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 v
0
, . . . , v
k1
,
um inteiro n > v
0
+v
1
+ +v
k1
e um inteiro 0 < a < n tal que (a, n) = 1
(costuma-se tomar n primo). Calculamos b a
1
mod n e a sequencia de
inteiros positivos
w
i
av
i
mod n
para qualquer 0 i k 1. A chave secreta de Alice consiste da sequencia
dos v
i
s e dos inteiros n, a e b. A sua chave p ublica e (w
0
, . . . , w
k1
). Esta e
a chave para cifrar.
Se Bob pretende enviar uma mensagem m = (
k1
,
0
)
2
a Alice, usa a
chave {w
i
} e envia
c
k1

i=0

i
w
i
.
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 {w
i
} nao e super crescente.
73
Para decifrar c, Alice calcula V bc mod n. Como
bc
k1

i=0

i
bw
i

k1

i=0

i
bav
i

k1

i=0

i
v
i
mod n
Entao V =

k1
i=0

i
v
i
(note que V < n). Como a sequencia {v
i
} e super
crescente, Alice usa o algoritmo descrito atras para obter a solucao =
(
0
, . . . ,
k1
) e obtem a mensagem m = (
k1
,
0
)
2
.
Exemplo. Consideremos a codicacao em bits do nosso habitual alfabeto de
27 letras. Tomemos a chave secreta
((v
0
, . . . , v
k1
), 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 descodicada
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 crip-
tosistema, 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 varia coes
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 in-
teiro 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 n
0
, us-
ando um gerador de n umeros aleatorios e depois testar a primalidade de n
0
,
n
0
+ 2, . . . ate que encontremos o primeiro primo p n
0
. Outra situacao
em que se usam testes de primalidade, e quando se quer determinar se in-
teiros de formas muito especiais sao ou nao primos. Por exemplo, n umeros
de Mersenne (da forma 2
p
1) ou n umeros de Fermat (da forma 2
2
k
+ 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 (obriga-
toriamente) 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 prob-
abilidade (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.
Denicao. Seja a > 1 um inteiro positivo. Chamamos pseudoprimo para a
base a a um composto n tal que (a, n) = 1 e n | (a
n
a).
Denicao. 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 a
n1
1 mod n. Podemos aplica-lo
usando sucessivas bases a: Dado um inteiro n, comecamos por calcular
a 2
n1
mod n
se a = 1 entao n e composto. Se a = 1, calculamos
b 3
n1
mod n
Caso b = 1, temos que n e composto. Se b = 1 calculamos 5
n1
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 2
340
1 mod 341. Mas 3
340
56
mod 341. Portanto, 341 e composto. De facto, 341 = 11 31. Provamos
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 = 2
s
d,
com d mpar. Se a e um inteiro tal que (a, n) = 1, entao ou
a
d
1 mod n
ou existe 0 r s 1 tal que
a
2
r
d
1 mod n
Demonstracao: Seja a tal que (a, n) = 1. Como n e primo temos que
(n) = n1 = 2
s
d. Donde, k = ord
n
(a
d
) e uma potencia de 2. Se k = 1 = 2
0
,
temos que
a
d
1 mod n.
Se k > 1 entao existe 1 l s tal que k = 2
l
e
a
2
l
d
1 mod n.
Mas entao a
2
l1
d
1 mod n e a
2
l1
d
tem ordem 2 mod n. Logo a
2
l1
d
e
solucao da congruencia x
2
1 mod n. Como n e primo, as unicas solucoes
desta congruencia sao 1 e 1. Portanto,
a
2
l1
d
1 mod n
2
Denicao. Seja n um composto mpar, e sejam s e d tais que n 1 = 2
s
d,
com d mpar. Seja a tal que (a, n) = 1. Se n e a satisfazem a condicao
a
d
1 mod n ou existe 0 r s 1 tal que a
2
r
d
1 mod n (5.1)
entao dizemos que n e pseudoprimo forte para a base a.
77
Denicao. 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 = 2
4
35. Consideremos a = 2. Entao
2
35
263 mod 561
2
235
166 mod 561
2
2
2
35
67 mod 561
2
2
3
35
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
4
n umeros que sao primos com n e nao sao testemunhas
de que n e composto.
Suponhamos que n e um inteiro mpar enorme que queremos vericar se e
primo ou nao. Seja 1 < a < n1 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
4
k
.
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/4
k
). Para
k = 20, a probabilidade de ser composto tendo passado o teste de Miller-
Rabin 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 log
2
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.
Denicao. Seja a um inteiro e n =

k
i=1
p
a
i
i
um inteiro mpar. Dene-se o
smbolo de Jacobi, da seguinte maneira
_
a
n
_
=

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

_
a
n
_
mod n.
79
Denicao. 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 ha pelo menos n/2 bases
menores que n tais que n nao e um pseudoprimo de Euler-Jacobi para qual-
quer uma dessas bases.
5.4 Teste n 1 de Lucas
Nas seccoes anteriores encontramos alguns testes probabilisticos para veri-
car 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
a
n1
1 mod n, mas a
n1
q
1 mod n para qualquer primo q | n 1
entao n e primo.
Demonstracao: A primeira condicao implica que ord
n
(a) | n 1. A
segunda condicao, mostra que ord
n
(a) nao e um divisor proprio de n 1.
Portanto, ord
n
(a) = n 1. Mas pelo teorema de Euler, ord
n
(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 F
k
= 2
2
k
+1 e primo
se e so se
3
F
k
1
2
1 mod F
k
.
Demonstracao: Seja k 1. Suponhamos que
3
F
k
1
2
1 mod F
k
80
entao o teorema de Lucas diz-nos que F
k
e primo. Reciprocamente supon-
hamos que F
k
e primo. Como 2
k
e par, entao
2
2
k
1 mod 3,
donde F
k
2 mod 3. Mas F
k
1 mod 4, logo
_
3
F
k
_
= 1
Pelo teorema 4.11, obtemos a congruencia desejada. 2
Teorema 5.7 (Teste de Lucas-Lehmer). Seja s
0
= 4 e s
i
= s
2
i1
2. Entao
M
p
= 2
p
1 e primo se e so se s
p2
0 mod M
p
.
81
Captulo 6
Factorizacao
Neste captulo, vamos descrever alguns algoritmos importantes de factor-
izacao. 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 ex-
perimentacao, se n e divisvel por n umeros primos pequenos, e. g. p B,
com B xo.
Exemplo. Queremos factorizar n = 3
21
+1 = 10460353204. Experimentando
primeiro todos os primos menores que 50, verica-se que
n = 2
2
7
2
43 1241143.
Seja m = 1241143. Como 2
m1
793958 mod m, o pequeno teorema de
Fermat implica que m e composto. Ficamos ainda com a tarefa de factorizar
m.
6.1 Metodo p 1 de Pollard
Ha algoritmos de factorizacao que funcionam muito bem para inteiros com-
postos 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 p1 so tem divisores primos pequenos.
Entao e possvel obter um m ultiplo k de p1 sem sabermos o valor de p1.
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
a
k
1 mod p,
para qualquer inteiro a, tal que (a, p) = 1. Portanto, p | (a
k
1). Se
n (a
k
1) entao (a
k
1, n) e um divisor proprio de n.
O algoritmo consiste em comecar com um limite B e uma base a. Se
(a
k
1, n) nao der um divisor proprio de n (i. e. se (a
k
1, n) = 1 ou
(a
k
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
(2
k
1, m) = 547.
Entao p = 547 e um divisor de n. Portanto, m = 547 2269. Facilmente, se
verica que 547 e 2269 sao primos.
6.2 Metodo ro 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 x
0
um elemento aleatorio e considere-se a sequencia
x
0
, x
1
= f(x
0
), x
2
= f(x
1
), . . . .
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) = x
2
+ 1.
Em seguida, toma-se um inteiro positivo x
0
, e. g. x
0
= 1 ou x
0
= 2.
83
Calculam-se as sucessivas iteracoes x
k
= f(x
k1
) mod n. Depois fazem-
se comparacoes entre diferentes x
i
s, esperando encontrar dois que sejam
diferentes mod n mas que sejam iguais mod l para algum divisor proprio l
de n. Quando encontrarmos x
j
e x
k
nestas condicoes (i. e. x
j
x
k
mod l),
temos que (x
j
x
k
, 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 x
j
x
k
mod l e sendo
m 0, temos
x
j+m
x
k+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
(x
2i
x
i
, n)
em cada iteracao i. Podemos tambem calcular, na iteracao k com 2
j
k <
2
r+1
, o maximo divisor comum
(x
k
x
j
, n)
onde j = 2
j
1.
Exemplo. Vamos factorizar 4087 usando f(x) = x
2
+ 1 e x
0
= 3. Obtemos
sucessivamente
x
1
= 10, x
2
= 101 (101 10, 4087) = 1
x
2
= 101, x
4
= 1263 (1263 101, 4087) = 1
x
3
= 2028, x
6
= 889 (2028 89, 4087) = 67
Portanto, 67 | 4087. Dividindo, obtem-se 4087 = 67 61.
Exemplo. Sejam n = 845651, f(x) = x
2
+ x + 1 e x
0
= 2. Verica-se que
(x
1
0 x
7
, n) = 571. Portanto, n = 571 1481.
Teorema 6.1. O metodo ro permite encontrar um factor de n em
O(
4

nlog
3
n)
operacoes com uma grande probabilidade. Mais exactamente, existe uma con-
stante C tal que, para qualquer inteiro positivo , a probabilidade de o metodo
ro nao encontrar um factor nao trivial de n em C

nlog
3
n operacoes bit,
e menor que exp().
84
O teorema anterior garante-nos que este metodo e, com uma grande prob-
abilidade, signicativamente mais rapido que irmos experimentando todos os
primos ate

n. O resultado mais espectacular, usando este metodo ocorreu
em 1981, quando Brent e Pollard factorizaram completamente F
8
= 2
2
8
+ 1.
A seguinte mnemonica de J. Pollard, permite-nos recordar um dos factores
de F
8
I am now intirely persuaded to employ rho method, a handy trick,
on gigantic composite numbers
6.3 Factorizacao 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 factorizacao 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 t
2
s
2
, onde t e s sao inteiros nao negativos.
A correspondencia e dada pelas equacoes
t =
a + b
2
, s =
a b
2
a = t + s b = t s
Demonstracao: Se n = ab entao
n =
_
a + b
2
_
2

_
a b
2
2
_
2
donde n pode ser escrito como a diferenca de dois quadrados. Se n = t
2
s
2
entao n = (t s)(t + s). Obtemos assim a correspondencia bijectiva. 2
Se n = ab e a e b estao proximos um do outro, entao s e pequeno e t e
ligeiramente maior que

n. Neste caso, podemos factorizar n, experimen-
tando valores para t, comecando por [

n] + 1, ate que se encontre um para


o qual t
2
n e um quadrado perfeito.
85
Exemplo. Seja n = 200819. Comecamos com [

n] + 1 = 449. Agora,
449
2
200819 = 782 que nao e um quadrado perfeito. Em seguida, tentamos
t = 450. Temos 450
2
200819 = 1681 = 41
2
, 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 fun-
ciona 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 t
2
kn = s
2
e um quadrado perfeito.
Entao d = (t + s, n) e um factor nao trivial de n.
Exemplo. Seja n = 141467. Se usarmos a factorizacao de Fermat directa-
mente, 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 655
2
3n = 68
2
. 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 de t. Mais exactamente, primeiro verica-se se n tem algum divisor
d
3

n. Caso contrario, para cada 1 k [


3

n], experimenta-se, para cada


t inteiro no intervalo
_
2

kn 1, 2

kn +
6

n
4

k
_
,
se t
2
4kn e um quadrado perfeito s
2
. 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
.
Demonstracao: 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 {}
1
2
, basta tomar a = 1 e b = [], se
{} >
1
2
, basta tomar a = 1 e b = [] + 1. Suponhamos agora que m > 1 e
consideremos os m + 2 n umeros reais, 0, 1 e
r
a
= {a} = a [a],
onde 1 a m. Note que se r
i
r
j
e i > j entao r
i
r
j
= r
ij
.
Analogamente, se r
i
r
j
e j > i entao 1 (r
i
r
j
) = r
ji
. Consideremos
tambem a seguinte particao do intervalo [0, 1],
I
k
= [
k
m+ 1
,
k + 1
m + 1
), com 0 k m1
e I
m
= [
m
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 I
k
, tem
pelo menos dois dos n umeros reais considerados. Se k = 0 entao existe um
inteiro 1 a m tal que
r
a

1
m+ 1
, i.e. |a [a]| <
1
m + 1
.
Se k = m entao existe um inteiro 1 a m tal que
1 r
a

1
m + 1
, i.e. |a [a] 1|
1
m + 1
.
Se 0 < k < m entao existem dois inteiros 1 i, j m tais que
r
i
r
j

1
m+ 1
.
Podem acontecer dois casos: Se i > j temos r
i
r
j
= r
ij
e
(i j) [(i j)]
1
m+ 1
.
87
Se j > i temos 1 (r
i
r
j
) = r
ji
e
|(j i) [(j i)] 1|
1
m + 1
.
2
Teorema 6.4. O metodo de Lehman esta correcto e demora O(
3

nlog
2
n)
operacoes bit.
Demonstracao: 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

nlog
2
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

k=1
_
6

n
4

k
_
= O(
3

n)
vezes se t
2
4kn e um quadrado perfeito (cada um demora O(log
2
n)). So
no caso de obtermos um quadrado perfeito e que precisamos de calcular
(d = t + s, n). Portanto, no total temos O(
3

nlog
2
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


p, q >
3

n. Vamos provar que existe um inteiro k [


3

n] , k = uv com
|uq vp| <
3

n
Seja m = [n
1
6
q
1
2
p

1
2
]. Pelo teorema da aproximacao de Dirichlet, existem
inteiros positivos a e b, com 1 a m, tais que
|a
p
q
b|
1
m+ 1
.
Mas entao
|ap qb|
q
m + 1
<
q
6

q
p
<

n
6

n
=
3

n.
88
Portanto, tomando u = b, v = a obtemos
|uq vp| <
3

n
Falta provar que uv [
3

n]. Sabemos que


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

p
q
q
p
n
1
3
+ 1 = n
1
3
+ 1.
Consideremos c = uq +vp e e = |uq vp|. Entao 4kn = c
2
e
2
. Em seguida,
provamos que
2

kn c < 2

kn +
n
1
6
4

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

kn. Seja E = c 2

kn, entao
4kn + 4E

kn (2

kn + E)
2
= c
2
= 4kn + e
2
< 4kn + n
2
3
,
logo
E <
n
1
6
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,
c + e < 2

kn +
n
1
6
4

k
+ n
1
3
< 2

(n
1
3
+ 1)n +
n
1
6
4

n
1
3
+ 1
+ n
1
3
< n.
2
89
6.4 Crivo quadratico
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
x
2
y
2
mod n
e
x y mod n.
Entao d = (x y, n) e um divisor proprio de n.
Exemplo. Sejam n = 7429, x = 227, e y = 210. Entao x
2
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 s
i
, 1
i k, tais que cada f(s
i
) so tenha factores primos pequenos (pertencentes a
um conjunto B), e de tal modo que f(s
1
) f(s
k
) 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) = 87
2
7429 = 140 = 2
2
5 7 e f(88) = 88
2
7429 = 315 = 3
2
5 7.
Consideremos v
1
= (0, 0, 1, 1) e v
2
= (0, 0, 1, 1) (neste caso, v
i
e o (B)-uplo,
que consiste dos expoentes mod 2 dos primos ate B, na decomposicao de
f(s
i
)). Como v
1
+v
2
(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 s
i
.
Ja vimos que os inteiros s tem que vericar uma propriedade que depende
de B. Comecamos por denir essa propriedade.
Denicao. 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 B
0
(mais tarde veremos que nao e necessario considerar todos
os primos menores que B
0
). Se B
0
for grande, este processo pode demorar
mais que o metodo de Fermat (podemos necessitar de demasiados s

i
s para
garantir a solubilidade do sistema linear). Por outro lado, se B
0
for demasiado
pequeno, a propriedade de s
i
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 B
0
e
exp(
1
2

log nlog log n).


Este valor de B
0
permite que possamos determinar um factor de n em
O(e

log nlog 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 B
0
(se n for enorme,
podem ser demasiados), usa-se bases de factores. Queremos encontrar inteiros
s
i
perto de m = [

n] tais que f(s


i
) seja B-suave. Se p | f(s
i
), entao (s
i
)
2
n
mod p, i. e. n e um resduo quadratico mod p. Portanto, so nos interessam
primos p B
0
tais que
_
n
p
_
= 1
ou p = 2. A base de factores e assim constituda por estes primos e por 1.
Para determinar os inteiros s
i
tais que f(s
i
) seja B-suave, comeca-se por
considerar um intervalo a crivar, S = {mM, mM +1, . . . , m1, m, m+
1, . . . , m+M1, 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 t
2
n mod p. Sabemos que ha duas solucoes, u
1
e u
2
,
pois n e um resduo quadratico mod p (se p = 2 ha uma so solucao). Utiliza-
se o algoritmo de Tonelli-Shanks para determinar estas solucoes. Entao p
divide f(u
1
) e f(u
2
), mas tambem divide f(u
i
+kp), para i = 1, 2 e k inteiro
(e desta parte do algoritmo que resulta o nome crivo quadratico). Assim,
comecando em u
i
, divide-se cada f(u
i
+ kp) com u
i
+ kp S pela maior
potencia de p possvel, resultado este que passa a substituir f(u
i
+kp). Faz-
se 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 s
i
s, e para
cada um deles, f(s
i
) e B-suave.
91
i f(m+ i) 2 3 5 7 13 17
1 8016 501 167
2 16227 601
3 24440 3055 611 47
4 32655 10885 2177 311
5 40872 5109 1703 131
6 49091 7013
7 57312 1791 199
8 65535 21845 4369 257
9 73760 2305 461
10 81987 27329
11 90216 11277 1253 179
12 98447 5791
13 106680 13335 445 889 127
14 114915 38305 7661
15 123152 7697
16 131391 14599 1123
17 139632 8727 2909
18 147875 1183 169 1
25 205632 3213 119 17 1
29 238680 29835 1105 221 17 1
55 454272 3549 1183 169 1
83 687960 85995 3185 637 13 1
137 1143072 35721 49 1
263 2227680 69615 7735 1547 221 17 1
Tabela 6.1: O crivo quadratico
92
Exemplo. Seja n = 16843009. Entao m = [

n] = 4104. Usando o valor


optimo para B
0
, obtemos B
0
= 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 ultimas 7 linhas representam os s
i
s para os quais f(s
i
)
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 2
7
3
4
5 7
2
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 ultimo 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 qual-
quer inteiro n para o qual (Z

n
, ) 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 Enumeracao
O metodo mais simples para resolver a equacao (7.1) e ir testar sucessiva-
mente x = 0, 1, 2, 3 . . . . A este processo chamamos enumeracao.
Exemplo. A menor solucao (positiva) de 3 5
x
mod 2017 e x = 1030.
Portanto, usando a enumeracao, temos que experimentar 1031 valores!
Em criptograa usa-se solucoes x, com x 2
160
, portanto este metodo e
totalmente impraticavel.
94
7.2 Algoritmo passos de bebe passos de gi-
gante
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 c
q
mod p e
a primeira coordenada de algum elemento de B. Quando isto acontecer,
obtemos
(g
m
)
q
c
q
bg
r
mod p
donde x = qm+r e solucao de (7.1). Ao calculo dos elementos c
q
, chamamos
passos de gigante. Para cada q temos que comparar c
q
com os elementos de
B.
A solucao de 3 5
x
mod 2017 e x = 1030. Usando o metodo da enu-
meracao temos que efectuar 1029 multiplica coes 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 multiplica coes 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 enumera cao, so e necessario guardar
os inteiros g, b e p.
Para o algoritmo da enumera cao, 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 Calculo 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 g
x
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
x
q
q mod p.
Depois determinamos um expoente y {1, 2, . . . , p 1} tal que bg
y
mod p
e B-suave e escrevemos
bg
y

qF(B)
q
e
q
mod p.
Entao
bg
y

qF(B)
g
x
q
e
q
g

qF(B)
x
q
e
q
mod p
donde
b g

qF(B)
x
q
e
q
y
mod p.
Portanto, a soluc ao do problema do logaritmo discreto e
x

qF(B)
x
q
e
q
y mod p 1.
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
g
z

qF(B)
q
f
q,z
mod p.
A cada vector (f
q,z
)
qF(B)
chamamos uma relacao. 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
g
z

qF(B)
g
x
q
f
q,z
g

qF(B)
x
q
f
q,z
mod p
entao obtemos a congruencia linear
z

qF(B)
x
q
f
q,z
mod p 1.
Obtemos assim um sistema linear de congruencias (cujas incognitas sao os
x
q
), 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 unica vez e estes x
q
sao validos para a maioria dos bs.
Exemplo. Vamos determinar x tal que 2
x
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 = 33 2
1593
mod 2027
5 7 11 = 385 2
983
mod 2027
2
7
11 = 1408 2
1318
mod 2027
3
2
7 = 63 2
293
mod 2027
2
6
5
2
= 1600 2
1918
mod 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:
x
2
+ x
5
1593 mod 2026
x
3
+ x
4
+ x
5
983 mod 2026
7x
1
+ x
5
1318 mod 2026
2x
2
+ x
4
293 mod 2026
6x
1
+ 2x
3
1918 mod 2026.
Como g = 2, entao x
1
= 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 solucoes mod 2026. O resultado nal e
x
1
= 1, x
2
= 282, x
3
= 1969, x
4
= 1755, x
5
= 1311.
Em seguida, escolhemos aleatoriamente y {1, 2, . . . , p1}, ate que 132
y
mod 2027 seja B-suave. Encontramos
13 2
1397
110 = 2 5 11 mod 2027.
Portanto,
x 1 + 1969 + 1311 1397 1884 mod 2026.
98
Captulo 8
Assinaturas digitais
8.1 Introducao
Em documentos em papel utilizam-se assinaturas convencionais, feitas `a
mao para especicar a pessoa responsavel pelo documento. Estas assinat-
uras sao utilizadas para assinar cartas, levantar dinheiro de um banco, assi-
nar 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. Vericacao da assinatura: Numa assinatura convencional, a veri-
cacao da assinatura e vericada quando esta e comparada com uma
assinatura autenticada (por exemplo, a assinatura do Bilhete de Identi-
dade, 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 pes-
soa 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 assi-
natura 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 (n
a
, e
a
) e (p
a
, q
a
, d
a
) as chaves p ublica e privada RSA de Alice,
respectivamente; e (n
b
, e
b
) e (p
b
, q
b
, d
b
) as chaves p ublica e privada RSA de
Bob, respectivamente.
Suponhamos que a Alice pretende enviar uma mensagem cifrada e assi-
nada a Bob. Dada a mensagem original x, primeiro a Alice assina x utilizando
a sua chave de RSA privada, d
a
, obtendo
y = sig
d
a
(x) x
d
a
mod n
a
.
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
e
a
x mod n
a
.
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 digi-
tal 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 log-
aritmo discreto em Z
p
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 Z

p1
(k deve ser
mantido secreto) e dene-se
sig
K
(x, k) = (, ),
onde

k
mod p
e
(x a)k
1
mod p 1.
A funcao de vericacao e dada por
ver
K
(x, , ) = 1


x
mod p
Esta vericacao esta correcta porque

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 2
127
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
213
1
431 mod 466. A assinatura de (x, k) passa a ser (29, 51), porque
2
213
29 mod 467
e
(100 127 29) 431 51 mod 466.
Para vericar a assinatura basta calcular
132
29
29
51
189 mod 467
e
2
100
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 computa-
cionais) 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 p2, e (j, p1) = 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
1
mod p

ij
1

mod p

ij
1
mod p

x
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

j
mod p
(h j)
1
mod p 1
x

(hx + i)(h j)
1
mod p 1.
Entao

(
h

j
)
(hj)
1
mod p

(
jh
)
(hj)
1
(
h
)
(hj)
1
(

)
h(hj)
1

i(hj)
1
mod p

)
h(hj)
1

i(hj)
1
mod p

xh(hj)
1

i(hj)
1
mod p

(hj)
1
(xh+i)
mod p

x

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. As-
sim, 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 men-
sagem.
Outra falha na utilizacao da assinatura ElGamal ocorre quando o mesmo
valor k e usado para assinar duas mensagens x
1
e x
2
. Suponhamos que (,
1
)
e uma assinatura de x
1
e (,
2
) e uma assinatura de x
2
, onde
k
mod p.
Entao

1

x
1
mod p
e

2

x
2
mod p.
Donde

x
1
x
2

2

k(
1

2
)
mod p.
Esta ultima equacao e equivalente a
x
1
x
2
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 | (x
1
x
2
). Denimos
x


x
1
x
2
d

2
d
p


p 1
d
.
104
Entao, a congruencia (8.1) ca
x

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 mod-
icacao 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 unica
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 Z

p
com ordem 2
160
.
A primeira alteracao e denir da seguinte maneira
(x + a)k
1
mod p 1.
105
A vericacao passa a ser

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

x
1

1
mod p. (8.2)
Se existir um primo q com 160 bits tal que q | p 1, podemos obter um
elemento em Z

p
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
q
0
mod p.
Portanto, no DSS em vez de utilizarmos uma raiz primitiva de p iremos
utilizar um elemento de Z

p
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. Por-
tanto, 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 Z

p
com ordem q, a Z

p
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 Z

q
,
(
k
mod p) mod q
e
(x + a)k
1
mod q.
106
Para efectuar a verica cao, calculamos
e
1
x
1
mod q
e
e
2

1
mod q
ver(x, , ) = 1 (
e
1

e
2
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 2
160
, 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 3
78
170 mod 7879 tem ordem q. Seja a = 75.
Entao 170
75
4567 mod 7879. Suponhamos que Bob quer assinar a
mensagem x = 22 e escolhe aleatoriamente k = 50. Entao
k
1
99 mod q.
Assim,
170
50
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 vericar a
assinatura calculamos

1
25 mod 101
e
1
22 25 45 mod 101
e
2
94 25 27 mod 101.
Como
170
45
4567
27
mod 7879 2518 94 mod 101
entao a assinatura e valida.
107
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
Funcoes 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, pre-
cisamos 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 per-
dida.
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.
Denicao. Seja h uma funcao de sntese. Temos uma colisao se dadas duas
mensagens x e y, tivermos h(x) = h(y).
Denicao. Seja x uma mensagem. Uma funcao de sntese h e fracamente
livre de colisoes se for computacionalmente impraticavel encontrar uma men-
sagem x

= x tal que h(x) = h(x

).
Denicao. Uma funcao de sntese h e fortemente livre de colisoes se for
computacionalmente impraticavel encontrar duas mensagens x e x

diferentes
tais que h(x) = h(x

).
109
9.1 Ataque do Aniversario
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 x
1
, . . . , x
k
X distintos, calcular h(x
i
), 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
|h
1
(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 aproximada-
mente igual, entao a probabilidade de encontrar colisoes aumentara, e nos so
queremos um minorante desta probabilidade.
Sejam z
1
, . . . , z
k
os elementos que vao sendo obtidos atraves da funcao de
sntese h. O valor z
1
pode ser qualquer, mas a probabilidade de z
2
= z
1
e
11/n, a probabilidade de z
3
= z
1
e z
3
= z
2
e 12/n, e assim sucessivamente.
Portanto, uma estimativa de que nao haja qualquer colisao apos k valores e
(1
1
n
)(1
2
n
) (1
k 1
n
) =
k1

i=1
(1
i
n
).
A serie de Taylor da funcao exponencial da-nos a seguinte expansao
e
x
= 1 x +
x
2
2!

x
3
3!
,
o que implica que 1x e
x
quando x e pequeno. Entao a nossa estimativa
110
para a probabilidade de colisoes e
k1

i=1
(1
i
n
)
k1

i=1
e

i
n
= e

k(k1)
2n
.
Portanto, estimamos a probabilidade de haver pelo menos uma colisao como
sendo
= 1 e

k(k1)
2n
.
Entao
e

k(k1)
2n
1

k(k 1)
2n
log(1 )
k
2
k 2nlog(1 )
donde
k

2nlog
1
1
.
Se tomarmos = 0.5 obtemos
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 2
20
(pouco
mais de um milhao) de reducoes.
9.2 Func oes de sntese comprovadamente se-
guras
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 funcoes de sntese comprovadamente seguras. Como
exemplos temos
1. Funcao de sntese de Chaum-van Heijst-Ptzmann baseada no pro-
blema 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 Nieder-
reiter;
5. SWIFFT baseada na transformada de Fourier rapida (fast Fourier trans-
form).
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 segu-
ranca, como por exemplo TLS, SSL, PGP, SSH, S/MIME e IPsec. Vere-
mos 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 Funcao de sntese Chaum-van Heijst-Ptzmann
Nesta seccao descrevemos a funcao de sntese de Chaum, van Heijst e Ptz-
mann 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 : Z
q
Z
q
Z

p
e denida por
h(x
1
, x
2
)
x
1

x
2
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 funcao de sntese de Chaum-van Heijst-
Ptzmann permite calcular o logaritmo discreto log

de uma maneira e-
ciente.
Demonstracao: Suponhamos que temos uma colisao
h(x
1
, x
2
) = h(x
3
, x
4
),
onde (x
1
, x
2
) = (x
3
, x
4
). Entao

x
1

x
2

x
3

x
4
mod p,
ou seja

x
1
x
3

x
4
x
2
mod p.
Seja d = (x
4
x
2
, 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 (x
4
x
2
)
1
mod p 1. Entao

(x
4
x
2
)y

(x
1
x
3
)y
mod p.
Portanto,
log

(x
1
x
3
)(x
4
x
2
)
1
mod p 1.
113
Em seguida, consideramos d = 2. Como q e mpar, temos (x
4
x
2
, q) = 1.
Seja y (x
4
x
2
)
1
mod q. Entao (x
4
x
2
)y = kq + 1, para algum inteiro
k, donde

(x
4
x
2
)y

kq+1
(1)
k
mod p.
Portanto,
log

(x
1
x
3
)y mod p 1
ou
log

(x
1
x
3
)y + q mod p 1,
onde a ultima 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 x
2
, x
4
q 1 entao q so divide
x
4
x
2
se x
4
x
2
= 0. Mas se x
4
= x
2
entao p 1 tambem divide x
4
x
2
.
Portanto, o caso d = q nunca acontece.
Como vimos atras, se d = p 1 entao x
4
= x
2
. Neste caso obtemos

x
1

x
2

x
3

x
2
mod p,
isto e

x
1

x
3
mod p,
o que implica que x
1
= x
3
. Mas como (x
1
, x
2
) = (x
3
, x
4
), 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 Z
p
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 p
1
= 2, p
2
= 3, . . . . Seja k,
o comprimento dos blocos, o maior inteiro tal que
k

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

i=1
l
i
2
i1
,
com l
i
{0, 1}. Dena-se m
Lk+i
= l
i
, com 1 i k.
4. Para j = 0, 1, . . . , L, calcule-se
x
j+1
x
2
j
k

i=1
p
kj+i
i
mod n.
5. Devolva x
L+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 Per-
spective, 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 Mathe-
matical 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