Você está na página 1de 26

CRIPTOANÁLISE DA SUBSTITUIÇÃO MONOALFABÉTICA

equações

Myrna Cecília M. dos Santos


IME - Instituto Militar de Engenharia

DE/9 – MESTRADO EM SISTEMAS E COMPUTAÇÃO

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.

A confiabilidade garante que a informação esteja disponível, em um sistema, somente para as


pessoas autorizadas. Isto inclui, além da exibição da informação, a própria revelação de sua
existência. A autenticidade garante a correta identificação da origem da informação. O não-
repúdio garante, tanto à origem quanto ao destinatário, a impossibilidade de se negar a
emissão e o respectivo recebimento de uma informação, que efetivamente tenha tramitado por
ambas as partes. O controle de acesso permite que diferentes usuários tenham acesso a
diferentes informações, dentro de um mesmo sistema. A disponibilidade garante o acesso às
informações de um sistema, para usuários autorizados, sempre que necessário.
Criptoanálise da Substituição Monoalfabética

1.1. O que é criptoanálise?

A criptoanálise é a ciência que estuda formas de se quebrarem os sistemas criptográficos. O


criptoanalista é, portanto, o indivíduo que tenta recuperar uma mensagem, que esteja
codificada em um criptograma, sem o conhecimento da chave utilizada no processo. Para
tanto, ele pode tentar descobrir a mensagem diretamente do criptograma, ou tentar descobrir a
chave, e a partir daí, obter a mensagem.

A maneira como a criptoanálise atua depende basicamente de dois fatores: da natureza do


sistema criptográfico e das informações disponíveis. Usualmente, considera-se que o
criptoanalista conheça o algoritmo criptográfico utilizado. Desta forma, a partir das
informações disponíveis, poder-se-á proceder a um dos seguintes níveis de ataques:
 Ataque ao texto cifrado – quando dispuser apenas do texto cifrado. É o pior caso para o
criptoanalista. Não resta muito a fazer, senão tentar aplicar alguns testes estatísticos, a
partir do conhecimento de algumas características da mensagem (exemplo: idioma que o
texto está escrito);
 Ataque ao texto conhecido – quando dispuser de um ou mais textos cifrados, com as
respectivas mensagens. Com este conhecimento, o criptoanalista pode tentar deduzir a
chave empregada, a partir das transformações produzidas na mensagem pelo sistema
criptográfico;
 Ataque ao texto escolhido – quando dispuser de um ou mais textos cifrados,
correspondentes a mensagens escolhidas. Neste caso, o criptoanalista escolhe certos
padrões da mensagem para serem cifradas, esperando conseguir revelar, com o
conhecimento dos respectivos textos cifrados, a estrutura da chave utilizada. Um exemplo
deste tipo de ataque é a criptoanálise diferencial.
Qualquer algoritmo que se proponha a oferecer segurança criptográfica deve resistir a um
ataque ao texto escolhido.

Este trabalho possui a seguinte organização: na seção 2, é apresentado o conceito de sistemas


de substituição monoalfabética e os tipos mais conhecidos; na seção 3, é mostrado como é
feito a criptoanálise da substituição monoalfabética, utilizando uma mensagem em português.
São mostrados também exemplos em cada passo do processo e na seção 4 é feita a conclusão.
O algoritmo está no final como anexo.

2
Criptoanálise da Substituição Monoalfabética

2. Sistemas de Substituição Monoalfabética

Os sistemas de substituição monoalfabéticas, são aqueles em que cada letra da mensagem é


substituída, sempre, por uma mesma letra do alfabeto-cifra, segundo uma chave bem definida.
Estas substituições irão compor o que chamamos de criptograma (mensagem cifrada).

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

3. Criptoanálise da Substituição Monoalfabética

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

Tabela de Freqüência das Letras da Língua Portuguesa


(tirado de um texto de 5.590 letras)

A: 743. 13,3% N: 300...........5,4%


B: 59....1,05% O: 562...........10%
C: 227. 4,06% P: 158............2,8%
D: 281. 5,03% Q: 40.............0,72%
E: 708. 12,7% R: 404...........7,2%
F: 45..... 0,8% S: 460............8,2%
G: 55........1% T: 304...........5,44%
H: 43...0,77% U: 199...........3,6%
I: 432. .7,73% V: 105...........1,9%
J: 11......0,2% W: 0
K:0 X: 11.............0,2%
L: 185. 3,31% Y: 0
M: 239. .4,3% Z: 19.............0,34%

Tabela de freqüência dos digramas mais freqüêntes


(tirado de um texto de 5.590 letras)

DE – 113. .2,02% AR – 63... 1,13%


OS – 110...1,97% ER – 63....1,13%
RA – 106 ...1,9% IN – 62........1,1%
ES – 103.....1,8% CA – 61....1,09%
AS – 96.......1,7% IA – 59......1,05%
EN – 90......1,6% DA – 59....1,05%
TE – 84.......1,5% AD – 56.........1%
NT – 83....1,48% RO – 52....0,93%
DO – 77......1,4% ME – 52....0,93%
TA – 69......1,2% AN – 51....0,91%
CO – 66....1,18% CI – 50......0,89%
RE – 66....1,18% MA – 50. . .0,89%
OR – 65....1,16% TR – 50....0,89%

Matriz com os digramas principais (em porcentagem)

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

Digramas Inversos que aparecem na lista dos mais freqüêntes

RA – AR
RE – ER
DA – AD
RO – OR

Digramas das vogais (A, E e O)

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

Exemplo de criptoanálise da substituição monoalfabética:

Vamos supor que temos a seguinte mensagem cifrada:

B JTIFW ABQ FIBQ IBGKIZF VKUVKQKIZBE EC CFVXB UFVF FQ


ZKWKXBCEITXFXBKQ NVFQTWKTVFQ F FNKVZEVF AB CKVXFAB FZVFTE
TIGKQZTCKIZBQ KQZVFIYKTVBQ K FNVTE IBGFQ BUBVZEITAFAKQ AK
IKYBXTBQ UFVF FQ KCUVKQFQ EQEFVTFQ AK QKVGTXBQ AK
XBCEITXFXFB PEK UVKXTQFC TIZKYVFV QEFQ QENQTATFVTFQ K
JTWTFTQ UKWF TIZKYVFXFB AK QEFQ VKAKQ WBXFTQ BQ
VKQEWZFABQ AKQQF CEAFIXF QFB GTQTGKTQ

Como resolver este criptograma?

 Primeiro, fazemos a distribuição de freqüência das letras. Para isto, contamos a


quantidade de vezes em que cada letra aparece no texto. (total de letras: 307)

A = 14 – 4,56% G = 6 – 1,95% M=0 T = 27 – 8,80%


B = 25 – 8,14% H=0 N = 4 – 1,30% U = 7 – 2,28%
C = 9 – 2,93% I = 15 – 4,88% O=0 V = 25 – 8,14%
D=0 J = 2 – 0,65% P = 1 – 0,32% W= 7 – 2,28%
E = 16 – 5,21% K = 35 – 11,40% Q = 40 – 13,03% X = 14 – 4,56%
F = 44 – 14,33% L=0 R=0 Y = 4 – 1,30%
S=0 Z = 12 – 3,91%

Com as tabelas, vistas acima, podemos começar a tomar nossas decisões:


 Devemos, dividir as letras-cifras em grupos de alta, média e baixa freqüência e basearmo-
nos nas características próprias da Língua. Podemos dizer então, que as letras cifras de
freqüência alta são: F, Q, K, T, B e V, e que provavelmente serão equivalentes às letras
em claro: A, E, O, S, I e R.
 Outra informação que podemos tirar é que as letras que aparecem no texto sozinhas: B, F
e K, com certeza, são vogais: A, E e O. Além disso, combinando estas letras, podemos
contar quantas vezes elas aparecem no texto e compará-las com os digramas das vogais.

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.

O que poderemos tirar de todas estas informações?


Fazendo uma comparação com os digramas de vogais da Língua Portuguesa com os digramas
de vogais encontrados no criptograma, o digrama FB tem uma freqüência maior do que os
outros, podemos supor, então, que ele pode ser o AO. Se isto for verdadeiro, então, o F = A e
o B = O.
E como sabemos que a outra vogal é o K, então, podemos supor que ele seja o E.
Para termos certeza, então vamos compará-los com outros digramas:

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

Como havíamos suposto, as vogais A, E e O são F, K e B, pois observando as contas acima,


notamos que quem obteve o menor valor, indicando que se aproximou mais da distribuição,
foi o número .
Agora, basta substituir as vogais na mensagem e observar os resultados.

8
Criptoanálise da Substituição Monoalfabética

O JTIAW AOQ AIOQ IOGEIZA AUVEQEIZOE EC CAVXO UAVA AQ


ZEWEXOCEITXAXOEQ NVAQTWETVAQ A ANEVZEVA AO CEVXAAO
AZVATE TIGEQZTCEIZOQ EQZVAIYETVOQ E ANVTE IOGAQ
OUOVZEITAAAEQ AE IEYOXTOQ UAVA AQ ECUVEQAQ EQEAVTAQ AE
QEVGTXOQ AE XOCEITXAXAO PEE UVEXTQAC TIZEYVAV QEAQ
QENQTATAVTAQ E JTWTATQ UEWA TIZEYVAXAO AE QEAQ VEAEQ
WOXATQ OQ VEQEWZAAOQ AEQQA CEAAIXA QAO GTQTGETQ
Obs.: As letras em vermelho, indicam as substituições.

O nosso próximo passo é descobrir as consoantes de maior freqüência: S, R, N, T e D.


Como foi falado anteriormente, o Q, por aparecer junto com outro Q, só poderá ser ou o S ou
o R. Olhando no criptograma acima, notamos várias palavras que terminam com o Q,
principalmente, digramas, como o AQ e o OQ. Observando isto, podemos supor que o Q é o
S e continuar fazendo a substituição.

O JTIAW AOS AIOS IOGEIZA AUVESEIZOE EC CAVXO UAVA AS


ZEWEXOCEITXAXOES NVASTWETVAS A ANEVZEVA AO CEVXAAO AZVATE
TIGESZTCEIZOS ESZVAIYETVOS E ANVTE IOGAS OUOVZEITAAAES AE
IEYOXTOS UAVA AS ECUVESAS ESEAVTAS AE SEVGTXOS AE
XOCEITXAXAO PEE UVEXTSAC TIZEYVAV SEAS SENSTATAVTAS E
JTWTATS UEWA TIZEYVAXAO AE SEAS VEAES WOXATS OS VESEWZAAOS
AESSA CEAAIXA SAO GTSTGETS

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:

O JTIAW DOS AIOS IOGEIZA AUVESEIZOE EC CAVXO UAVA AS


ZEWEXOCEITXAXOES NVASTWETVAS A ANEVZEVA DO CEVXADO AZVATE
TIGESZTCEIZOS ESZVAIYETVOS E ANVTE IOGAS OUOVZEITDADES DE
IEYOXTOS UAVA AS ECUVESAS ESEAVTAS DE SEVGTXOS DE
XOCEITXAXAO PEE UVEXTSAC TIZEYVAV SEAS SENSTDTAVTAS E
JTWTATS UEWA TIZEYVAXAO DE SEAS VEDES WOXATS OS VESEWZADOS
DESSA CEDAIXA SAO GTSTGETS

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

O JTIAW DOS AIOS IOGEIZA AUVESEIZOU UC CAVXO UAVA AS


ZEWEXOCEITXAXOES NVASTWETVAS A ANEVZUVA DO CEVXADO AZVATU
TIGESZTCEIZOS ESZVAIYETVOS E ANVTU IOGAS OUOVZUITDADES DE
IEYOXTOS UAVA AS ECUVESAS ESEAVTAS DE SEVGTXOS DE
XOCUITXAXAO QUE UVEXTSAC TIZEYVAV SUAS SUNSTDTAVTAS E
JTWTATS UEWA TIZEYVAXAO DE SUAS VEDES WOXATS OS VESUWZADOS
DESSA CUDAIXA SAO GTSTGETS

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.

O JTIAW DOS AIOS IOGEIZA AURESEIZOU UC CARXO UARA AS


ZEWEXOCEITXAXOES NVASTWETRAS A ANERZURA DO CERXADO AZRATU
TIGESZTCEIZOS ESZRAIYETROS E ANRTU IOGAS OUORZUITDADES DE
IEYOXTOS UARA AS ECURESAS ESEARTAS DE SERGTXOS DE
XOCUITXAXAO QUE UREXTSAC TIZEYVAR SUAS SUNSTDTARTAS E
JTWTATS UEWA TIZEYRAXAO DE SUAS REDES WOXATS OS VESUWZADOS
DESSA CUDAIXA SAO GTSTGETS

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:

O JIIAW DOS AIOS IOGEITA AURESEIZOU UC CARXO UARA AS


TEWEXOCEIIXAXOES BVASIWEIRAS A ABERTURA DO CERXADO ATRAIU
IIGESTICEITOS ESTRAIYEIROS E ABRIU IOGAS OUORTUIIDADES DE
IEYOXIOS UARA AS ECURESAS ESEARIAS DE SERGIXOS DE XOCUIIXAXAO
QUE UREXISAC IITEYVAR SUAS SUBSIDIARIAS E JTWTAIS UEWA
IITEYRAXAO DE SUAS REDES WOXAIS OS VESUWTADOS DESSA CUDAIXA
SAO GISIGEIS

Temos ainda um digrama para fazermos substituição, o UC. Em português, temos as


interjeições: Ui e Ué, mas já podemos descartá-los, pois tanto o I, quanto o E, já foram
substituídos. Além deles, temos o M, que também combina com o U, formando a palavra
UM.
Para termos certeza que o C é o M, note as palavras: CARXO e CERXADO, fazendo a
troca, teremos: MARXO e MERXADO. É uma excelente substituição, e podemos chutar o X
como sendo o C.

10
Criptoanálise da Substituição Monoalfabética

O JIIAW DOS AIOS IOGEITA AURESEITOU UM MARCO UARA AS


TEWECOMUIICACOES BRASIWEIRAS A ABERTURA DO MERCADO ATRAIU
IIGESTIMEITOS ESTRAIYEIROS E ABRIU IOGAS OUORTUIIDADES DE
IEYOCIOS UARA AS EMURESAS USUARIAS DE SERGICOS DE COMUIICACAO
QUE URECISAM IITEYVAR SUAS SUBSIDIARIAS E JIWIAIS UEWA
IITEYRACAO DE SUAS REDES WOCAIS OS RESUWTADOS DESSA MUDAICA
SAO GISIGEIS

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.

Palavra2 = vetor que contém as palavras de tamanho igual a 2 encontradas no texto.


Diferente do vetor DigramaTotal que armazena todos os digramas formados no texto.
Exemplo: DO, DE, UM etc.

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

// Procedimento Principal – chama outros procedimentos. //


Procedimento Decifrar;
início

DistribuicaoFrequencia;
TabelaDigrama;
ProvavelVogal;

fim-procedimento

// Sao achadas as vogais no criptograma e mostradas para o usuario.

procedimento ProvavelVogal;
inicio
MontaDigramaVogal;
PegaFrequenciaDigramaVogal;

fim-procedimento

14
Criptoanálise da Substituição Monoalfabética

// Procedimento que faz as devidas substituições.

procedimento Substituicao;
inicio
SubstituirVogal;
Sugestao;

fim-procedimento

// Conta a quantidade de cada letra do criptograma. //


Procedimento DistribuicaoFrequencia;
início

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

// Coloca as frequencias nas posicoes correspondentes de cada letra no vetor


FreqCript. Ex.: Frequencia de A na 1a posicao, frequencia de B na 2a posicao etc. //

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;

// Ordena o vetor FreqCript em ordem decrescente de frequencia. //

para j de 1 até 26 faca


para h de j to 26 do
se (freqcript[h] > freqcript[j]) then
aux:= freqcript[j];
aux2:= FAlfa[j];
freqcript[j]:= freqcript[h];
FAlfa[j]:= FAlfa[h];
freqcript[h]:= aux;
FAlfa[h]:= aux2;
fim-se
fim-para
fim-para
fim-procedimento

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

teste:= tamanho do texto;


enquanto posicao < = teste faca
enquanto letra <> ' ' faca
palavra:= palavra + letra;
pdigrama:= pdigrama + letra;
tamanho:= tamanho + 1;
tdigrama:= tdigrama + 1;
posicao:= posicao + 1;
letra:= texto[posicao];

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

{Joga para um determinado vetor as palavras de acordo com o seu tamanho.


Ex: A que tiver tamanho igual a 1, coloca dentro do vetor palavra1, tamanho = 2, dentro
do vetor palavra2 etc. Isto é feito para fazer futuras comparações, por exemplo, as letras
que estão no vetor palavra1, só podem ser vogais, já que em portugues, nao existem letras
sozinhas num texto, a nao ser que sejam: A, E e O.}

17
Criptoanálise da Substituição Monoalfabética

se tamanho = 1 entao // Palavras de tamanho = 1 (Ex.: Vogais)


x:= 1;
enquanto palavra1[x] <> ' ' faca
se palavra1[x] = palavra entao
Freqpalavra1[x]:= Freqpalavra1[x] + 1;
x:= x + 1;
palavra:= ' ';
senao
x:= x + 1;
fim-se
fim-enquanto
palavra1[x]:= palavra;
fim-se

se tamanho = 2 entao // Palavras de tamanho = 2 (Ex: DO, DE, UM etc)


y:=1;
enquanto palavra2[y] <> ' ' faca
se palavra2[y] = palavra entao
y:= y + 1;
palavra:= ' ';
senao
y:= y + 1;
fim-se
fim-enquanto
palavra2[y]:= palavra;
fim-se

se tamanho = 3 entao // Palavras de tamanho = 3 (Ex: QUE, UNS etc)


z:= 1;
enquanto palavra3[z] <> ' ' faca
se palavra3[z] = palavra entao
z:= z + 1;
palavra:= ' ';
senao
z:= z + 1;
fim-se
fim-enquanto
palavra3[z]:= palavra;
fim-se

se tamanho = 4 entao // Palavras de tamanho = 4 (Ex: COMO, UMAS etc)


k:= 1;
enquanto palavra4[k] <> ' ' faca
se palavra4[k] = palavra entao
k:= k + 1;
palavra:= ' ';
senao
k:= k + 1;

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

{Ordena o DigramaTotal e o FreqDigrama em ordem decrescente.}

para j de1 ate tamanho do DigramaTotal faca


para h de j ate tamanho do DigramaTotal faca
se (FreqDigrama[h] > FreqDigrama[j]) entao
aux:= FreqDigrama[j];
aux2:= DigramaTotal[j];
FreqDigrama[j]:= FreqDigrama[h];
DigramaTotal[j]:= DigramaTotal[h];
FreqDigrama[h]:= aux;
DigramaTotal[h]:= aux2;
fim-se
fim-para
fim-para

fim-procedimento

{Neste procedimento, são feitos digramas com as vogais encontradas no Palavra1


e colocadas dentro do vetor DigramaVogal. Com isto teremos: AO, OA, AE, EA, OE e
EO. Com isto poderemos fazer futuras comparações}

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

{Neste procedimento pegamos as frequencias com que os digramas de vogais aparecem no


texto.}

procedimento PegaFrequenciaDigramaVogal;
inicio

para i de 1 ate 6 faca


j:=1;
enquanto DigramaTotal[j] <> ' ' faca
se DigramaTotal[j] = DigramaVogal[i] entao
FreqVogal[i] := FreqDigrama[j];
j:= j + 1;
senao
j:=j+1;
fim-se
fim-enquanto
fim-para

{Ordena o vetor FreqVogal em ordem decrescente. Para saber qual é o digrama de


vogal mais freqüente para comparar com o digrama mais freqüente da Língua portuguesa –
AO.}

para j de 1 ate 6 faca


para h de j ate 6 faca
se (FreqVogal[h] > FreqVogal[j]) entao
aux:= FreqVogal[j];
aux2:= DigramaVogal[j];
FreqVogal[j]:= FreqVogal[h];
DigramaVogal[j]:= DigramaVogal[h];
FreqVogal[h]:= aux;
DigramaVogal[h]:= aux2;
fim-se
fim-para
fim-para

20
Criptoanálise da Substituição Monoalfabética

digvogal:= DigramaVogal[1]; //Digrama mais freqüente. Provavelmente o digrama


"AO"//

para i de 1 até 3 faca // Determina o "E" //


se ((palavra1[i] <> digvogal[1]) e (palavra1[i] <> digvogal[2])) entao
digvogal2:= palavra[i];
fim-se
fim-para

palavra1[1]:= digvogal[1]; // Suposto A //


palavra1[2]:= digvogal2; // Suposto E //
palavra1[3]:= digvogal[2]; // Suposto O //

para i de 1 até tamanho do DigramaVogal faca


se palavra1[1] + palavra1[2] = DigramaVogal[i] entao
vogal1:= FreqVogal[i]; // Vogal1 = correspondente ao AE //
fim-se
fim-para

para i de 1 até tamanho do DigramaVogal faca


se palavra1[1] + palavra1[3] = DigramaVogal[i] entao
vogal2:= FreqVogal[i]; // Vogal2 = correspondente ao AO //
fim-se
fim-para

para i de 1 até tamanho do DigramaVogal faca


se palavra1[2] + palavra1[1] = DigramaVogal[i] entao
vogal3:= FreqVogal[i]; // Vogal3 = correspondente ao EA //
fim-se
fim-para

para i de 1 até tamanho do DigramaVogal faca


se palavra1[2] + palavra1[3] = DigramaVogal[i] entao
vogal4:= FreqVogal[i]; // Vogal4 = correspondente ao EO //
fim-se
fim-para

para i de 1 até tamanho do DigramaVogal faca


se palavra1[3] + palavra1[1] = DigramaVogal[i] entao
vogal5:= FreqVogal[i]; // Vogal5 = correspondente ao OA //
fim-se
fim-para

para i de 1 até tamanho do DigramaVogal faca


se palavra1[3] + palavra1[2] = DigramaVogal[i] entao
vogal6:= FreqVogal[i]; // Vogal6 = correspondente ao OE //
fim-se

21
Criptoanálise da Substituição Monoalfabética

fim-para

// 1o. (Palavra1[1] + Palavra1[2] + Palavra1[3]) = ‘AEO’ //

Dig1:= Palavra1[1] + Palavra1[2] + palavra1[3];

Freq1:= (vogal1 – 0,036)2 + (vogal2 – 0,7)2 + (vogal3 – 0,09)2 + (vogal4 – 0,05)2 +


(vogal5 – 0,036)2 + (vogal6 – 0,27)2

// 2o. (Palavra1[1] + Palavra1[3] + Palavra1[2]) = ‘AEO’ //

Dig2:= Palavra1[1] + Palavra1[3] + palavra1[2];

Freq2:= (vogal2 – 0,036)2 + (vogal1 – 0,7)2 + (vogal5 – 0,09)2 + (vogal6 – 0,05)2 +


(vogal3 – 0,036)2 + (vogal4 – 0,27)2

// 3o. (Palavra1[3] + Palavra1[1] + Palavra1[2]) = ‘AEO’ //

Dig3:= Palavra1[3] + Palavra1[1] + palavra1[2];

Freq3:= (vogal5 – 0,036)2 + (vogal6 – 0,7)2 + (vogal2 – 0,09)2 + (vogal1 – 0,05)2 +


(vogal4 – 0,036)2 + (vogal3 – 0,27)2

// 4o. (Palavra1[3] + Palavra1[2] + Palavra1[1]) = ‘AEO’ //

Dig4:= Palavra1[3] + Palavra1[2] + palavra1[1];

Freq4:= (vogal6 – 0,036)2 + (vogal5 – 0,7)2 + (vogal4 – 0,09)2 + (vogal3 – 0,05)2 +


(vogal2 – 0,036)2 + (vogal1 – 0,27)2

// 5o. (Palavra1[2] + Palavra1[1] + Palavra1[3]) = ‘AEO’ //

Dig5:= Palavra1[2] + Palavra1[1] + palavra1[3];

Freq5:= (vogal3 – 0,036)2 + (vogal4 – 0,7)2 + (vogal1 – 0,09)2 + (vogal2 – 0,05)2 +


(vogal6 – 0,036)2 + (vogal5 – 0,27)2

// 6o. (Palavra1[2] + Palavra1[3] + Palavra1[1]) = ‘AEO’ //

Dig6:= Palavra1[2] + Palavra1[3] + palavra1[1];

Freq6:= (vogal4 – 0,036)2 + (vogal3 – 0,7)2 + (vogal6 – 0,09)2 + (vogal5 – 0,05)2 +


(vogal1 – 0,036)2 + (vogal2 – 0,27)2
Fim-procedimento

22
Criptoanálise da Substituição Monoalfabética

procedimento SubstituirVogal; //A, E e O //


inicio

Pegar Freq de menor valor e o seu respectivo Dig;


Fazer as substituicoes;

fim-procedimento

// Dar sugestoes para o usuario olhar e se aceitar fazer as substituicoes.

procedimento Sugestao;
inicio

SugestaoDigramaFrequente;
SugestaoTrigrama;
SugestaoGeral;

fim-procedimento

procedimento SugestaoDigramaFrequente; // Fazer as substituicoes dos digramas OS, AS,


ER, AD etc.
inicio

percorrer vetor palavra2;


se encontrar digrama repetidos com a mesma letra entao // Provavel R ou S//
guardar letra;
percorrer texto;
olhar digramas que tenham essa mesma letra na segunda posicao e que tenha na
primeira posicao o A ou o O; // dentro do vetor, as letras continuam criptografadas,
portanto o A e o O seriam, por exemplo, F e B //
olhar a frequencia de O + letra;
se frequencia for alta entao
sugerir letra = S
senao
sugerir letra = R;
fim-se
fim-se
fazer substituicao; // Na interface sempre perguntar se deseja realizar a substituicao //

se encontrar digrama com o E na segunda posicao entao


sugerir que letra da primeira posicao seja o D;
senao
se encontrar digrama com o A ou o O na segunda posicao entao
sugerir que letra da primeira posicao seja o D ou o N;
fim-se
fim-se

23
Criptoanálise da Substituição Monoalfabética

fazer substituicao;

se encontrar digrama com E na primeira posicao entao


sugerir que a letra da segunda posicao seja o M;
fim-se
fazer substituicao;

fim-procedimento

Procedimento SugestaoTrigrama;
inicio

percorrer vetor palavra3;


se encontrar trigrama com E na terceira posicao entao
sugerir que a letra da primeira posicao seja o Q e que o da segunda posicao seja o U;
fim-se
fazer substituicao;

se encontrar o S ou o R na primeira posicao entao


se encontrar o A na terceira posicao entao
sugerir que a letra da segunda posicao seja o U
senao
se encontrar o E na segunda posicao entao
sugerir que a letra da terceira posicao seja o U
fim-se
fim-se
fim-se
fazer substituicao

se encontrar o A na terceira posicao entao


se encontrar o U na segunda posicao entao
sugerir que o T seja a letra da primeira posicao
fim-se
senao
se encontrar o E na segunda posicao entao
se encontrar o U na terceira posicao entao
sugerir que o T seja a letra da primeira posicao
fim-se
fim-se
fim-se
fazer substituicao
se encontrar trigrama com O na segunda posicao e M na terceira posicao entao
sugerir que a letra da primeira posicao seja o C ou o B;
fim-se
fazer substituicao;
fim-procedimento

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;

se encontrar a letra S na primeira e na quarta posicao entao


se encontrar a letra E na segunda posicao entao
sugerir que a letra da terceira posicao seja o U
senao
se encontrar a letra A na terceira posicao entao
sugerir que a letra da segunda posicao seja o U
fim-se
sim-se
fim-se
fazer substituicao;
se encontrar S na quarta posicao entao
se encontrar E na segunda posicao entao
se encontrar U na terceira posicao entao
sugerir que a letra da primeira posicao seja o T
fim-se
senao
se encontrar o U na segunda posicao entao
se encontrar o A na terceira posicao entao
sugerir que a letra da primeira posicao seja o T
fim-se
fim-se
fim-se
fim-se
fazer substituicao

enquanto o texto ainda tiver letras cifradas faca


percorrer o texto;
mostrar as palavras que ja tenham a maior parte das letras substituidas;
perguntar a sugestao;
fazer substituicao;
fim-enquanto;

fim-procedimento

25
Bibliografia

 Apostila de Introdução a Criptologia – Departamento de Engenharia de Sistemas –


IME – Outubro/1999.
 Seberry, Jennifer e Pieprzyk, Josef. Cryptography: An Introduction to Computer Security – University
College – The University of New South Wales – Australian Defence Force Academy, 1989.
 Sinkov, Abraham. Elementary Cryptanalysis – A Mathematical Approach.
 Stinson, Douglas R. Cryptography – Theory and Practice, 1995.
 Ungaretti, Ricardo. Dissertação de Mestrado – Métodos para a criação de números primos para emprego
em criptografia. Universidade Federal Fluminense, Niterói - 1999.

Você também pode gostar