Escolar Documentos
Profissional Documentos
Cultura Documentos
equações
Resumo
O trabalho consiste em fazer um algoritmo que primeiro faça o ciframento de uma
mensagem em português, utilizando como método criptográfico a substituição
monoalfabética, e que depois faça a criptoanálise, usando as características da Língua
Portuguesa, para se chegar à mensagem original.
Palavras-chave: mensagem, cifrar, criptografia e criptoanálise.
1. Introdução à Criptografia
A criptografia é a ciência que estuda sistemas matemáticos capazes de prover proteção aos
dados, armazenados ou em trânsito, que trafegam pelas redes de computadores, ou por
qualquer outro meio de comunicação. Em linhas gerais, um algoritmo criptográfico
transforma uma mensagem M (texto claro) em um criptograma C (texto cifrado), por meio de
uma chave k. Somente o conhecedor da chave k é capaz, em princípio, de recuperar a
mensagem M, a partir do criptograma C, aplicando-se o processo inverso.
A criptografia visa, basicamente, proporcionar serviços de segurança aos sistemas de
informações, tais como confidencialidade, autenticidade, não-repúdio, controle de acesso e
disponibilidade.
2
Criptoanálise da Substituição Monoalfabética
São alguns tipos de sistemas de substituição monoalfabética: Cifra de César (sistema mais
antigo que se tem notícia e mais simples, onde cada letra do alfabeto-claro é substituída por
uma outra letra correspondente a n posições adiante no alfabeto normal), substituição baseada
em dizimações da seqüência normal (utiliza uma chave que em vez de fazer uma soma, faz
uma multiplicação), substituição monoalfabética baseada em transformações lineares
(engloba os dois modelos citados anteriormente, isto é, combina a adição e a multiplicação
uma constante a ser somada (b) e um multiplicador (a), tal que: C = aM + b) e a substituição
monoalfabética geral (que não utiliza nenhum deslocamento, cada letra é substituída por uma
outra letra aleatoriamente, sem seguir um determinado padrão. Existe ainda, a substituição
que além de não seguir nenhuma regra, coloca as mensagens cifradas do mesmo tamanho,
confundindo ainda mais o criptoanalista).
Para fazer a criptoanálise, o criptoanalista deverá conhecer alguns aspectos fundamentais para
poder decifrar um criptograma, tais como:
Conhecer a Língua usada para o ciframento (neste trabalho será a Língua Portuguesa);
Conhecer a tabela de freqüência de cada letra (mostrada abaixo);
Saber a freqüência dos digramas (combinações de duas letras – tabela mostrada abaixo) ;
Saber os digramas invertidos mais usados (ex. DA, AD, ER, RE);
Saber a freqüência dos trigramas (combinações de três letras);
Saber quais são as letras que podem terminar uma palavra (A, E, I, L, M, O, R, S, U e Z);
Saber as palavras mais usadas (normalmente isto é utilizado quando o criptoanalista
conhece algumas características do transmissor e do tipo da linguagem do texto, por
exemplo, um texto técnico), entre outros;
Para que o resultado seja mais exato, devemos sempre trabalhar com textos grandes, pois
assim a característica da Língua será mantida.
3
Criptoanálise da Substituição Monoalfabética
A E O R S D N T
A x 0,036 0,7 1,13 1,7 1 0,91 15
E 0,09 x 0,05 1,13 1,8 0,21 0,21 0,46
O 0,036 0,27 x 1,16 1,97 0,20 0,50 0,20
R 1,9 1,18 0,93 0,05 0,089 0,036 0,107 0,36
S 0,41 0,82 0,29 x 0,41 x x 0,75
D 1,05 2,02 1,4 0,036 x x x x
N 0,79 0,21 0,59 x 0,27 0,43 x 1,48
T 1,2 1,5 0,73 0,89 x x x x
4
Criptoanálise da Substituição Monoalfabética
RA – AR
RE – ER
DA – AD
RO – OR
AO – 39...0,7%
OE – 15. 0,27%
EA – 5....0,09%
EO – 3. . .0,05%
OA – 1. 0,036%
AE – 1..0,036%
5
Criptoanálise da Substituição Monoalfabética
FB – 3 – 0,97% FK – 0
KF – 1 – 0,325% KB – 0
BK – 1 – 0,325% BF – 0
6
Criptoanálise da Substituição Monoalfabética
Devemos fazer também, uma tabela e uma matriz com os digramas mais freqüentes do
texto para futuras comparações; por exemplo, olhando na matriz abaixo vemos que o Q
aparece junto com outro Q, isto nos mostra que ele deverá ser ou o R (RR) ou o S (SS),
afinal, já sabemos que as vogais A, E e O devem ser as letras F, K e B (não
necessariamente nesta mesma ordem) que aparecem sozinhas no criptograma.
Se olharmos a tabela de freqüência veremos que o Q é uma das letras que possui
freqüência alta, e comparando com a tabela de freqüência da Língua Portuguesa, vemos
que o S e o R também possuem alta freqüência, o que torna a nossa suposição coerente.
F Q K V B T
F x 3,26 x 1,95 0,98 0,98 FQ – 10 – 3,26% VK – 6 – 1,95%
Q 1,3 0,32 0,65 x x 0,98 VF – 9 – 2,93% FV – 6 – 1,95%
KQ – 9 – 2,93% IZ – 5 – 1,63%
K x 9 x 0,98 x 0,98 BQ – 8 – 2,60% XB – 5 – 1,63%
V 2,93 x 1,95 x 0,32 0,98 XF – 7 – 2,28% TQ – 5 – 1,63%
B x 2,6 0,32 0,32 x x AK – 7 – 2,28% QE – 5 – 1,63%
T 1,3 1,63 x 0,65 0,32 x
Devemos fazer também, uma lista com os digramas e seus inversos, pois de acordo com
os digramas inversos mostrados na página 4, podemos observar que uma dessas letras será
vogal, confirmando a suposição feita acima; por exemplo, na tabela temos o VF – FV,
consideramos então que uma dessas letras é vogal, e supomos que o F seja uma vogal..
Resumindo:
Já sabemos que as letras: F, K e B são vogais. Como o F tem uma freqüência mais alta,
podemos sugerir que ele seja a vogal A;
Sabemos também que o Q poderá ser o S ou o R;
Sobram, portanto, as letras de alta freqüência V e T, que podem ser: R, S, I.
7
Criptoanálise da Substituição Monoalfabética
FKB = AEO
(FK – AE)2 + (FB – AO)2 + (KF – EA)2 + (KB – EO)2 + (BF – OA)2 + (BK – OE)2 =
(0 – 0,036)2 + (0,97 – 0,7)2 + (0,325 – 0,09)2 + (0 – 0,05)2 + (0 – 0,036)2 + (0,325 – 0,27)2 =
1,296 x 10-3 + 0,0729 + 0,055225 + 2,5 x 10-3 + 1,296 x 10-3 + 3,025 x 10-3 = 0,136242
FBK = AEO
(FB – AE)2 + (FK – AO)2 + (BF – EA)2 + (BK – EO)2 + (KF – OA)2 + (KB – OE)2 =
(0,97 – 0,036)2 + (0 – 0,7)2 + (0 – 0,09)2 + (0,325 – 0,05)2 + (0,325 – 0,036)2 + (0 – 0,27)2 =
0,872356 + 0,49 + 8,1 x 10-3 + 0,075625 + 0,083521 + 0,0729 = 1,602502
BFK = AEO
(BF – AE)2 + (BK – AO)2 + (FB – EA)2 + (FK – EO)2 + (KB – OA)2 + (KF – OE)2 =
(0 – 0,036)2 + (0,325 – 0,7)2 + (0,97 – 0,09)2 + (0 – 0,05)2 + (0 – 0,036)2 + (0,325 – 0,27)2 =
1,296 x 10-3 + 0,140625 + 0,07744 + 2,5 x 10-3 + 1,296 x 10-3 + 3,025 x 10-3 = 0,226182
BKF = AEO
(BK – AE)2 + (BF – AO)2 + (KB – EA)2 + (KF – EO)2 + (FB – OA)2 + (FK – OE)2 =
(0,325 – 0,036)2 + (0 – 0,7)2 + (0 – 0,09)2 + (0,325 – 0,05)2 + (0,97 – 0,036)2 + (0 – 0,27)2 =
0,083521 + 0,49 + 8,1 x 10-3 + 0,075625 + 0,872356 + 0,0729 = 1,602502
KFB = AEO
(KF – AE)2 + (KB – AO)2 + (FK – EA)2 + (FB – EO)2 + (BK – OA)2 + (BF – OE)2 =
(0,325 – 0,036)2 + (0 – 0,7)2 + (0 – 0,09)2 + (0,97 – 0,05)2 + (0,325 – 0,036)2 + (0 – 0,27)2 =
0,083521 + 0,49 + 8,1 x 10-3 + 0,8464 + 0,083521 + 0,0729 = 1,584442
KBF = AEO
(KB – AE)2 + (KF – AO)2 + (BK – EA)2 + (BF – EO)2 + (FK – OA)2 + (FB – OE)2 =
(0 – 0,036)2 + (0,325 – 0,7)2 + (0,325 – 0,09)2 + (0 – 0,05)2 + (0 – 0,036)2 + (0,97 – 0,27)2 =
1,296 x 10-3 + 0,140625 + 0,055225 + 2,5 x 10-3 + 1,296 x 10-3 + 0,49 = 0,690942
8
Criptoanálise da Substituição Monoalfabética
Olhando os digramas e alguns trigamas, temos: AO, AE, AOS, podemos supor então, que o
A, seja o D. Se fizermos uma melhor observação, substituindo o A pelo D nas palavras
encontradas no criptograma, veremos que ele se encaixa perfeitamente. Por exemplo, AESSA
será DESSA. Fazendo as susbtituições, teremos:
Como você já deve ter notado, é sempre mais fácil observar os digramas e os trigramas para
fazer as substituições. Continuando então, esse processo, temos um trigrama que termina com
E. Provavelmente, deverá ser o QUE. Se fizermos esta substituição, estaremos falando que o
P é o Q e que o E é o U. Observando novamente o criptograma, e substituindo numa outra
palavra, por exemplo: SEAS, será SUAS. Como podemos notar, esta substituição é correta.
9
Criptoanálise da Substituição Monoalfabética
Como já fizemos as principais substituições das letras de maior freqüência, temos ainda o T e
o V, que são letras de freqüência alta e que ainda não foram substituídos. Se trocarmos o V
pelo R, teremos, por exemplo: VEDES por REDES.
Seguindo esse processo, o T deverá ser substituído por uma letra que também tenha
freqüência alta, como foi sugerido na página 6, as letras V e T poderiam ser o R, S ou I, e
como as letras R e S já foram substituídas, então, o T deverá ser o I: Por exemplo, as
palavras: AZRATU, SUNSTDTARTAS seriam: AZRAIU, SUNSIDIARIAS. É uma boa
substituição, e olhando para elas, podemos agora, até mesmo chutar, dizendo que AZRAIU é
ATRAIU e que a palavra SUNSIDIARIAS é SUBSIDIARIAS. Com isto temos: Z sendo T
e N sendo B. Fazendo todas essas susbtituições:
10
Criptoanálise da Substituição Monoalfabética
Agora fica mais fácil descobrir o restante das palavras. Basta ler o texto, e pelo conhecimento
da Língua e pela intuição, poderemos fazer as últimas substituições. Por exemplo, WOCAIS
deve ser LOCAIS, UARA, dever ser PARA, e assim por diante. Fazendo o restante das
trocas, chegaremos na mensagem original:
Mensagem original:
O FINAL DOS ANOS NOVENTA APRESENTOU UM MARCO PARA AS
TELECOMUNICACOES BRASILEIRAS A ABERTURA DO MERCADO ATRAIU
INVESTIMENTOS ESTRANGEIROS E ABRIU NOVAS OPORTUNIDADES DE
NEGOCIOS PARA AS EMPRESAS USUARIAS DE SERVICOS DE
COMUNICACAO QUE PRECISAM INTEGRAR SUAS SUBSIDIARIAS E FILIAIS
PELA INTEGRACAO DE SUAS REDES LOCAIS OS RESULTADOS DESSA
MUDANCA SAO VISIVEIS
4. Conclusão
Como foi visto, para fazer a criptoanálise de uma mensagem cifrada através do sistema de
substituição monoalfabética, deve-se conhecer a Língua, que no trabalho foi a Portuguesa, e
saber as suas principais características, por exemplo, as letras de maior e de menor freqüência,
os principais digramas e trigramas, entre outros.
Outro aspecto importante, é lembrar que para utilizar este tipo de criptoanálise, deve-se
trabalhar com textos grandes, pois assim, a característica da Língua provavelmente será
mantida.
O exemplo que foi dado para criptoanalisar, era um texto de 307 letras e que continha
praticamente as mesmas características da Língua Portuguesa, pois tinha as vogais isoladas no
texto e os principais digramas (AS, OS, DE). É claro, que determinados passos executados
para a realizar o seu deciframento, não será idêntico se for utilizado um outro texto,
principalmente quando a mensagem já tiver com a maioria das letras de alta freqüência
substituídas. Mas como a criptoanálise é feita com a ajuda do usuário, então pode-se trabalhar
com a sua intuição e com o seu conhecimento, afinal olhando para as palavras do texto a
gente sempre consegue identificar qual é a letra que deverá ser substituída.
11
Criptoanálise da Substituição Monoalfabética
O algoritmo descrito a seguir, está fazendo exatamente isto, ele vai percorrendo os vetores
(Palavra1, Palavra2, Palavra3 e Palavra4 – decritos no Anexo) a procura de digramas,
trigramas e palavras com tamanho igual a quatro, e a partir daí vai dando as sugestões. Por
exemplo, se encontrar no digrama AQ e OQ, ele dará a dica de que o Q poderá ser a letra S, e
o usuário observando o texto e fazendo a sua substituição mentalmente em outras palavras
onde o Q se encontra poderá tomar a decisão se deseja ou não fazer a substituição. A medida
que as sugestões vão sendo dadas, o usuário vai podendo escolher e ir modificando o texto,
até que ele mesmo possa fazer os últimos ajustes e “chutar” as letras que estão faltando. Com
isto, ao final, chega-se a mensagem original.
12
Criptoanálise da Substituição Monoalfabética
ANEXO I
ALGORITMO
Variáveis principais:
FreqCript = vetor que possui a contagem de cada letra do criptograma. Assim poderemos
saber quais são as letras mais freqüentes e quais são as menos freqüentes.
DigramaTotal = vetor que contém todos os digramas do texto. Exemplo, se tiver no texto a
palavra EXEMPLO DO VETOR, neste vetor ficará contido os seguintes digramas: EX, XE,
EM, MP, PL, LO, DO, VE, ET, TO e OR.
FreqDigrama = vetor que contém as freqüências dos digramas, ou seja, faz a contagem dos
digramas do texto e as armazena.
FAlfa = vetor que tem armazenado todas as 26 letras do alfabeto. Quando é feita a ordenação
do vetor FreqCript, isto é, quando ele é colocado em ordem decrescente, este vetor também
sofre mudanças, ou seja, as suas letras são reordenadas de forma que a sua freqüência contida
no vetor FreqCript fique na mesma posição da sua letra.
Palavra1 = vetor que contém todas as palavras de tamanho igual a 1 encontradas no texto, ou
seja, as vogais A, E e O, pois na Língua Portuguesa, somente elas podem aparecer sozinhas.
Palavra3 = vetor que contém todas as palavras de tamanho igual a 3 encontradas no texto.
Exemplo: QUE, UNS.
Palavra4 = vetor que contém todas as palavras de tamanho igual a 4 encontradas no texto.
Exemplo: COMO, PARA, UMAS entre outras.
Palavra5 = vetor que armazena todas as palavras de tamanho maior que 4 encontradas no
texto.
DigramaVogal = Digrama formado somente por vogais. Através do vetor Palavra1, monto
este vetor fazendo as combinações. Exemplo: AO, OA, AE, EA, EO e OE.
FreqVogal = Vetor que armazena as freqüências dos digramas formados pelas vogais e que
estão armazenadas no vetor DigramaVogal.
13
Criptoanálise da Substituição Monoalfabética
// Abre um arquivo (*.txt) que nao tenha pontuacao, acentuacao, cedilha etc; e nem qualquer
outro simbolo que seja diferente das 26 vogais.
Procedimento AbrirArquivo;
início
abrir arquivo;
mostrar o arquivo (mensagem) na tela;
fechar arquivo;
fim-procedimento
// Faz o ciframento do texto, ou seja substitui cada letra do texto por uma outra letra
diferente, previamente definida. Exemplo: A por F; B por N; C por X ... Z por H. Chamamos
esta mensagem de criptograma. //
Procedimento Cifrar;
início
substituir cada letra do texto por uma outra letra diferente, previamente definida;
mostrar o criptograma na tela;
fim-procedimento
DistribuicaoFrequencia;
TabelaDigrama;
ProvavelVogal;
fim-procedimento
procedimento ProvavelVogal;
inicio
MontaDigramaVogal;
PegaFrequenciaDigramaVogal;
fim-procedimento
14
Criptoanálise da Substituição Monoalfabética
procedimento Substituicao;
inicio
SubstituirVogal;
Sugestao;
fim-procedimento
texto:= criptograma;
para i de 1 até tamanho do texto faca
caso texto[i] faca
'A': contA:= contA + 1;
'B': contB:= contB + 1;
'C': contC:= contC + 1;
'D': contD:= contD + 1;
'E': contE:= contE + 1;
'F': contF:= contF + 1;
'G': contG:= contG + 1;
'H': contH:= contH + 1;
'I': contI:= contI + 1;
'J': contJ:= contJ + 1;
'K': contK:= contK + 1;
'L': contL:= contL + 1;
'M': contM:= contM + 1;
'N': contN:= contN + 1;
'O': contO:= contO + 1;
'P': contP:= contP + 1;
'Q': contQ:= contQ + 1;
'R': contR:= contR + 1;
'S': contS:= contS + 1;
'T': contT:= contT + 1;
'U': contU:= contU + 1;
'V': contV:= contV + 1;
'W': contW:= contW + 1;
'X': contX:= contX + 1;
'Y': contY:= contY + 1;
'Z': contZ:= contZ + 1;
fim-caso
fim-para
15
Criptoanálise da Substituição Monoalfabética
freqcript[1]:= contA;
freqcript[2]:= contB;
freqcript[3]:= contC;
freqcript[4]:= contD;
freqcript[5]:= contE;
freqcript[6]:= contF;
freqcript[7]:= contG;
freqcript[8]:= contH;
freqcript[9]:= contI;
freqcript[10]:= contJ;
freqcript[11]:= contK;
freqcript[12]:= contL;
freqcript[13]:= contM;
freqcript[14]:= contN;
freqcript[15]:= contO;
freqcript[16]:= contP;
freqcript[17]:= contQ;
freqcript[18]:= contR;
freqcript[19]:= contS;
freqcript[20]:= contT;
freqcript[21]:= contU;
freqcript[22]:= contV;
freqcript[23]:= contW;
freqcript[24]:= contX;
freqcript[25]:= contY;
freqcript[26]:= contZ;
16
Criptoanálise da Substituição Monoalfabética
{Neste procedimento é gerado uma tabela de digramas. A seguir, são construidos vetores,
cada um com um tamanho diferente, onde são colocadas, de acordo com o seu tamanho, as
palavas.}
procedure TabelaDigrama;
inicio
se tdigrama = 2 entao
n:= 1;
enquanto DigramaTotal[n] <> ' ' faca
se DigramaTotal[n] = pdigrama entao // O vetor DigramaTotal possui todos
os digramas formados no texto.
FreqDigrama[n]:= FreqDigrama[n] + 1;
pdigrama:= texto[posicao - 1];
tdigrama:= 1;
senao
n:= n + 1;
fim-se
fim-enquanto
se tdigrama = 2 entao {Este teste foi colocado aqui, para evitar que palavras
de uma unica letra sejam adicionadas no vetor
DigramaTotal; e para preencher a primeira posicao.
DigramaTotal[n]:= pdigrama;
FreqDigrama[n]:= 1;
tdigrama:= 1;
pdigrama:= texto[posicao - 1];
fim-se
fim-se
fim-enquanto
17
Criptoanálise da Substituição Monoalfabética
18
Criptoanálise da Substituição Monoalfabética
fim-se
fim-enquanto
palavra4[k]:= palavra;
senao
se tamanho > 4 entao // Restante das palavras encontradas no texto.
w:= 1;
enquanto palavra5[w] <> ' ' faca
se palavra5[w] = palavra entao
w:= w + 1;
palavra:= ' ';
senao
w:= w + 1;
fim-se
fim-enquanto
palavra5[w]:= palavra;
fim-se
tamanho:= 0; //Para as letras iguais a vazio.
tdigrama:= 0;
palavra:= ' ';
pdigrama:= ' ';
posicao:= posicao + 1;
letra:= texto[posicao];
fim-enquanto
fim-procedimento
procedimento MontaDigramaVogal;
inicio
19
Criptoanálise da Substituição Monoalfabética
k:= 1;
para i de 1 ate 3 faca
para j de1 ate 3 faca
se palavra1[i] <> palavra1[j] entao
DigramaVogal[k] := palavra1[i] + palavra1[j];
k:= k + 1;
fim-se
fim-para
fim-para
fim-procedimento
procedimento PegaFrequenciaDigramaVogal;
inicio
20
Criptoanálise da Substituição Monoalfabética
21
Criptoanálise da Substituição Monoalfabética
fim-para
22
Criptoanálise da Substituição Monoalfabética
fim-procedimento
procedimento Sugestao;
inicio
SugestaoDigramaFrequente;
SugestaoTrigrama;
SugestaoGeral;
fim-procedimento
23
Criptoanálise da Substituição Monoalfabética
fazer substituicao;
fim-procedimento
Procedimento SugestaoTrigrama;
inicio
24
Criptoanálise da Substituição Monoalfabética
Procedimento SugestaoGeral;
inicio
percorrer vetor palavra4;
se encontrar a letra O na segunda e quarta posicao entao
sugerir que a letra da primeira posicao seja o C e que da terceira posicao seja o M
fim-se
fazer substituicao;
fim-procedimento
25
Bibliografia