Escolar Documentos
Profissional Documentos
Cultura Documentos
A Criptanálise da ENIGMA:
1932 - 1939
A Criptanálise da ENIGMA:
1932 - 1939
... aos meus orientadores, António Machiavelo e Rogério Reis, por todas as oportunidades
concedidas, ensinamentos transmitidos e conselhos dispensados, realçando o facto de serem
exemplos de conhecimento, profissionalismo e competência. Em particular ao Rogério Reis
pela preciosa contribuição na elaboração dos Programas 3.1 e C.3.
... aos meus amigos que sempre me apoiaram incondicionalmente, em especial à Joana
Pinto que esteve sempre presente nos momentos de maior desânimo.
... aos meus pais, pelo apoio às decisões que fui tomando na vida e pela confiança que
sempre depositaram em mim.
5
6
Resumo
7
8
Abstract
The main purpose of this thesis is to study and implement programs that can compute
the main aspects of the ENIGMA cipher and the ENIGMA cipher cryptanalysis made by
a group of Polish mathematicians between 1932 and 1939.
In the period that preceded World War II, the Polish cryptanalysts Marian Rejewski,
Henryk Zygalski and Jerzy Rózycki developed a set of cryptanalytic methods which permit-
ted the decryption of a considerable amount of intercepted messages. This thesis focus on
the mathematical approach that those cryptanalysts adopted in the attempt to break the
German ENIGMA cipher. Among the developed methods, the deduction of the internal
connections of the ENIGMA rotors, the Cyclometer, the Bomba and the Zygalski Sheets
are the subject of a more thorough investigation.
To implement all the methods described several programs, in Python, are presented.
These recreate the ENIGMA cipher and the most important attacks done by the Polish
mathematicians. The effectiveness of each one of these attacks is tested, as well as the
validity of the assumptions in which these attempts to break the cipher were based.
9
10
Conteúdo
Índice de Tabelas 15
Índice de Figuras 18
Índice de Programas 19
1 Introdução 21
2 Preliminares 25
2.2 Permutações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3 A máquina ENIGMA 31
3.1.1 Rotores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.2 Reflector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1.3 Plugboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
11
4 A contribuição polaca 59
5 Conclusão 149
12
C.2 Tipo de ciclos de UV, VW, WX, XY, YZ . . . . . . . . . . . . . . . . . . . 167
Referências 187
13
14
Lista de Tabelas
15
16
Lista de Figuras
17
4.9 Ciclómetro ([Rej84c]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
18
Lista de Programas
3.2 ENIGMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
19
20
Capítulo 1
Introdução
A criptografia teve, desde sempre, uma importância fundamental nas guerras e na estratégia
militar de países em conflito. Nos tempos modernos, mais concretamente na Segunda
Guerra Mundial, uma máquina de cifra electromecânica – a ENIGMA – assumiu particular
importância.
As cifras produzidas pela ENIGMA eram consideradas indecifráveis pelo inimigo mesmo
que este estivesse na posse da máquina. A criptografia actual ainda tem influências
deste tipo de cifras, apesar de actualmente a máquina ENIGMA poder parecer um pouco
rudimentar. Importa salientar que mensagens relativas a uma das versões da ENIGMA, a
M4, que utilizava 4 rotores, ainda hoje não foram decifradas.
Situada entre duas nações muito poderosas, Alemanha e União Soviética, aliado ao clima
tenso e de desconfiança que se vivia após a Primeira Guerra Mundial, a Polónia cedo
tratou de desenvolver escutas de rádio de modo a interceptar mensagens secretas dos seus
inimigos. Algumas equipas de criptanalistas tentavam, depois, decifrar as mensagens.
A máquina ENIGMA foi um dos principais dispositivos criptográficos utilizados pelos ale-
mães no período pré-guerra e durante a Segunda Guerra Mundial (1939-1945). Conduzidos
pelo imperativo de descobrir os planos militares alemães, os polacos decidiram tentar uma
abordagem matemática para quebrar a cifra ENIGMA. Seria Marian Rejewski, juntamente
com Henryk Zygalski e Jerzy Rózycki, a conseguir obter os primeiros êxitos no sentido de
quebrar a cifra ENIGMA.
21
CAPÍTULO 1. INTRODUÇÃO 22
Uma das motivações desta tese prende-se com a ausência de um estudo completo e credível
do trabalho e dos métodos utilizados pelos criptanalistas polacos na tentativa de quebrar
a cifra ENIGMA. De facto, a informação acerca do trabalho desenvolvido na Polónia no
período que antecedeu a sua invasão é muito escassa e por vezes contraditória. Muitos
documentos foram destruídos antes, durante e após a guerra, sendo outros ainda hoje
considerados secretos pelos respectivos governos. Assim, as referências utilizadas pelos
vários autores resumem-se a um conjunto de textos não publicados de Rejewski que contêm
descrições pouco claras e algumas não fundamentadas dos métodos e abordagens utilizadas.
A contribuir para esta situação, está o facto dos artigos originais de Rejewski, escritos em
polaco, terem sido traduzidos para a língua inglesa de uma forma pouco clara, suscitando,
em alguns pontos, interpretações bastante diferentes por parte de vários autores [Sma,
Kör98, Bau02, Cop], para além de não haver certeza de quando foram escritos.
Assim, esta tese tem como principal objectivo estudar e implementar computacionalmente
os métodos desenvolvidos pelos criptanalistas polacos entre 1932 e 1939. As implementa-
ções, quer da ENIGMA, quer dos seus ataques, são escritas em Python [Bea99]. Tenta-
mos, assim, compreender e descodificar os ataques referidos por Rejewski [Rej77, Rej84a,
Rej84c], e que, na maioria das referências existentes, não foram analisados pormenori-
zadamente nem questionada a sua eficácia. Uma vez que verificamos que alguns desses
métodos se desenvolviam a partir de pressupostos improváveis, também quantificamos a
sua validade de aplicação.
No Capítulo 2 são apresentados alguns conceitos, resultados e notações úteis para uma
melhor compreensão dos capítulos seguintes. Conceitos como criptografia, criptanálise,
cifra, texto original, criptograma, etc... são essenciais para o estudo efectuado, bem como
algumas notações relacionadas com teoria das permutações.
No Capítulo 4 é estudado o contributo polaco para quebrar a ENIGMA. Este capítulo está
dividido em três secções correspondentes a três aspectos da ENIGMA: um relacionado com
a parte física da máquina, mais concretamente as ligações internas dos rotores, e os outros
CAPÍTULO 1. INTRODUÇÃO 23
dois relacionados com o sistema de chaves usado. Em cada uma dessas secções são apre-
sentados e implementados os ataques, devidamente contextualizados, que permitiram, em
conjunto, quebrar a cifra. Paralelamente, é estudada a validade e eficácia desses métodos
que, por vezes, se desenvolviam a partir de pressupostos muito improváveis. A descoberta
das ligações internas dos rotores, utilizando métodos exclusivamente matemáticos, revelou-
-se um feito extraordinário de Rejewski que, no entanto, ainda não tinha sido estudado
de forma aprofundada. A análise pormenorizada dos processos matemáticos subjacentes
a essa descoberta é efectuada na secção correspondente às ligações internas dos rotores.
A alteração dos procedimentos utilizados para cifrar mensagens, por parte dos alemães,
revelou-se um dos grandes obstáculos a ultrapassar pelos criptanalistas polacos e obrigou a
uma constante actualização e melhoramento dos métodos desenvolvidos. Por esse motivo,
são enfatizados, em cada secção deste capítulo, os modos de operação em vigor em cada
período.
Preliminares
A partir do texto original (texto não cifrado), com uma chave, o emissor constrói o
criptograma (texto cifrado). O criptograma é criado a partir do texto original e da chave
por um algoritmo. Este processo é designado por cifra.
O receptor autorizado conhece o algoritmo de cifra e a chave. Assim, decifra o texto original
a partir do criptograma, usando a chave. Este processo é designado por decifração.
Antes de apresentar uma definição formal de cifra importa estabelecer que o conjunto das
palavras construídas a partir dos caracteres de V será designado por V ∗ .
25
CAPÍTULO 2. PRELIMINARES 26
As cifras que nos interessam neste estudo são as simétricas, ou seja, aquelas em que as
chaves de cifra e decifração são iguais. Desta forma, os interlocutores partilham uma
mesma chave que tem de ser previamente acordada e mantida secreta.
As cifras classificam-se, também, com base na relação que estabelecem entre os caracteres
do texto original e os caracteres do criptograma. Nas cifras monoalfabéticas, um caracter é
transformado num outro de forma independente, sendo a sua posição no texto irrelevante.
Já numa cifra polialfabética, a função que transforma um caracter num outro depende, de
um modo explícito ou implícito, da posição do caracter no texto original.
O ataque designado por “força bruta” consiste em tentar todas as chaves possíveis até se
encontrar a correcta. Em geral, um ataque deste tipo não é viável, devido ao enorme
número de possibilidades para o valor da chave. Um ataque “força bruta” é, nesse caso,
considerado computacionalmente “intratável”.
2.2 Permutações
Um sistema de cifra elementar consiste na substituição de cada letra do alfabeto por uma
outra. Uma cifra deste tipo (monoalfabética) pode ser representada por uma permutação
CAPÍTULO 2. PRELIMINARES 27
Antes de analisarmos um exemplo de uma cifra monoalfabética, importa referir que, por
vezes, é conveniente atribuir às letras do alfabeto o código apresentado na Tabela 2.1.
letra a b c d e f g h i j k l m
número 0 1 2 3 4 5 6 7 8 9 10 11 12
letra n o p q r s t u v w x y z
número 13 14 15 16 17 18 19 20 21 22 23 24 25
Portanto, usando a mesma chave k = 10, a letra l (que corresponde a 11) é transformada
na letra b (que corresponde a 11 − 10 = 1) e f (que corresponde a 5) é transformada em
v (que corresponde a 5 − 10 ≡ −5 ≡ 21 (mod 26)).
Definição 2.4 Seja A um conjunto não vazio. Representaremos por SA o conjunto de to-
das as permutações de A em A. Em particular, quando A = {a, b, c, . . . , z} representaremos
SA por S26 .
Observações:
Podemos escrever uma permutação como uma matriz de duas linhas, em que na primeira
linha temos as letras originais e na segunda as correspondentes letras cifradas.
à !
abcdefghijklmnopqrstuvwxyz
X= ,
ekmflgdqvzntowyhxuspaibrcj
à !
abcdefghijklmnopqrstuvwxyz
Y =
ajdksiruxblhwtmcqgznpyfvoe
• a letra a em s:
X /e Y /s;
a
• a letra f em r:
X /g Y /r;
f
e assim sucessivamente.
à !
abcdefghijklmnopqrstuvwxyz
XY = .
slwihrkqyetnmfouvpzcaxjgdb
Neste trabalho, vamos escrever o texto original e os seus caracteres em letras minúsculas,
e o texto cifrado e correspondentes caracteres em letras maiúsculas. Por exemplo:
à !
udcbmavgkstnwzeihfqljropxy
P = .
HEWASRIGTOUDCLNMFYVBPKJQZX
à !
abcdefghijklmnopqrstuvwxyz
P = . (2.1)
RAWENYGFMPTBSDJQVKOUHICZXL
Iremos, várias vezes, usar apenas a segunda linha da matriz para representar abreviada-
mente a permutação como uma string:
P =“rawenygfmptbsdjqvouhiczxl”.
Definição 2.5 (Ciclo) Seja k ∈ N, tal que k ≤ 26 e seja P ∈ S26 . Diz-se que P é um
ciclo de comprimento k (ou ciclo de ordem k) se existem elementos distintos i1 , i2 , . . . , ik ∈
{a, b, c, . . . , z} tais que
i1 P = i2 , i2 P = i3 , . . . , ik−1 P = ik , ik P = i1 ,
e em que xP = x, ∀ x ∈
/ {i1 , . . . , ik }.
Observações:
Proposição 2.1 Qualquer permutação P ∈ S26 pode ser escrita como um produto de ciclos
disjuntos dois a dois, ou seja, ∃ k ∈ N e ∃ P1 , P2 , . . . , Pk ∈ S26 ciclos disjuntos dois a dois
tais que P = P1 P2 . . . Pk . Esta representação é única a menos da ordem dos factores e da
inclusão ou não dos singletons [Rot95].
Assim, a permutação (2.1) também pode ser escrita como um produto de ciclos disjuntos:
P = (arktuhfyxzlb)(cw)(den)(g)(imsojpqv). (2.2)
Para cifrar, no ciclo onde se encontra a letra original tomamos o caracter seguinte. Por
exemplo, em P , a é transformado em R que, por sua vez, é transformado em K. Para decifrar,
tomamos, ciclicamente, o caracter anterior. Na permutação (2.2), S é transformado em m
e M é transformado em i.
Definição 2.7 (Estrutura de ciclos) Dada uma permutação P , escrita como um pro-
duto de ciclos disjuntos, a lista dos comprimentos de todos os ciclos de P , por ordem não
decrescente, é designada por estrutura (ou tipo) de ciclos da permutação P .
A máquina ENIGMA
Neste capítulo, vamos começar por descrever a máquina ENIGMA e os seus componentes
principais. Apesar de terem existido várias versões da ENIGMA, vamos dar maior ênfase
à ENIGMA do exército ou “Wehrmacht ENIGMA”, uma vez que o ataque polaco incidiu,
essencialmente, sobre a cifra produzida por essa máquina. Dito isto, serão referidas outras
versões da ENIGMA, bem como as principais diferenças estruturais e de utilização entre
elas. No final do capítulo apresentaremos uma implementação computacional da cifra
ENIGMA (versão com três rotores).
31
CAPÍTULO 3. A MÁQUINA ENIGMA 32
(a) ENIGMA com a cobertura fechada (b) ENIGMA com a cobertura levantada
rodá-los para outra posição. Na parte da frente da máquina, abaixo do teclado, existe um
dispositivo – plugboard – que permite ligar, através de fios eléctricos duplos, pares de letras
do alfabeto (efectuando uma troca de letras). Colocado no lado oposto ao do reflector está
um disco de entrada que efectua, essencialmente, a ligação entre o plugboard e o conjunto
de rotores.
• teclado;
• painel de lâmpadas;
• disco de entrada;
• rotores;
CAPÍTULO 3. A MÁQUINA ENIGMA 33
3.1.1 Rotores
Um rotor é uma roda com fios eléctricos em que no seu núcleo é efectuada uma determinada
permutação de acordo com as suas ligações internas. A parte principal do rotor é um disco
com aproximadamente o mesmo tamanho de um disco de hóquei, feito de um material
não condutor tal como borracha dura ou baquelite2 . De um lado e do outro do disco
existem 26 contactos eléctricos, normalmente de bronze, que estão ligados por fios através
do núcleo do rotor. Uma vez que cada contacto representa uma letra, o rotor efectua,
assim, uma substituição monoalfabética. As ligações internas dos rotores são uma das
partes fundamentais da máquina.
2
Resina sintética isolante e muito resistente ao calor que era normalmente utilizada antes do advento
dos polímeros.
CAPÍTULO 3. A MÁQUINA ENIGMA 34
1. Roda dentada usada para rodar os rotores até uma determinada posição inicial;
5. Núcleo do rotor que contém as ligações eléctricas internas entre os pinos (6) e os
discos de contacto (7);
7. Discos embutidos no núcleo para efectuar contacto com os pinos do rotor seguinte;
Estes rotores foram construídos com os fios eléctricos dentro do seu núcleo e essas ligações
eram fixas e não podiam ser modificadas.
Na Tabela 3.1 estão representadas as substituições efectuadas por oito rotores. Importa
salientar que apesar de terem sido utilizados mais rotores, esses não serão aqui considerados
pois não são relevantes para o estudo efectuado que, como já foi referido, se centra na
CAPÍTULO 3. A MÁQUINA ENIGMA 35
criptanálise da ENIGMA do exército que, até final de 1938, apenas utilizou os rotores I, II
e III3 .
Input a b c d e f g h i j k l m n o p q r s t u v w x y z
rotor I E K M F L G D Q V Z N T O W Y H X U S P A I B R C J
rotor II A J D K S I R U X B L H W T M C Q G Z N P Y F V O E
rotor III B D F H J L C P R T X V Z N Y E I W G A K M U S Q O
rotor IV E S O V P Z J A Y Q U I R H X L N F T G K D C M W B
rotor V V Z B R G I T Y U P S D N H L X A W M J Q O F E C K
rotor VI J P G V O U M F Y Q B E N H Z R D K A S X L I C T W
rotor VII N Z J H G R C X M Y S W B O U F A I V L P E K Q D T
rotor VIII F F Q H T L X O C B J S P D Z R A M E W N I U Y G V
Os rotores são móveis e podem ser, facilmente, substituídos ou alterada a sua ordem na
máquina (Fig. 3.4). Mecanicamente, os rotores são substituídos e trocados da seguinte
forma: quando a alavanca que abre a cobertura é puxada, o reflector desliza para a esquerda
e o grupo de três rotores pode ser retirado do seu eixo. De seguida, o operador pode colocar
uma nova sequência de rotores no eixo, e pô-la novamente na máquina.
Mecanismo de avanço dos rotores Para evitar a implementação de uma mera cifra de
substituição monoalfabética, alguns rotores rodam de cada vez que uma tecla é premida.
3
A partir de determinada altura (1941-1942) para algumas versões da ENIGMA (com quatro rotores)
foram também utilizados os rotores Beta e Gamma (ver [Sal]).
CAPÍTULO 3. A MÁQUINA ENIGMA 36
Importa referir que os rotores movem-se durante o acto de premir a tecla. Assim, quando
a tecla está completamente no fundo, os rotores estão nas suas novas posições. Note-se
que quando se prime uma tecla, os rotores avançam antes do circuito eléctrico ser ligado.
A corrente eléctrica percorre, então, todo o circuito: teclado, plugboard, disco de entrada,
rotores, reflector e, novamente, rotores, disco de entrada, plugboard, acendendo-se, por fim,
uma das lâmpadas. Note-se que a letra correspondente à lâmpada que acende nunca é
igual à letra que foi premida no teclado devido à natureza do reflector que, como veremos
mais à frente, impossibilita a existência de pontos fixos, ou seja, que uma letra seja cifrada
nela própria.
O mecanismo mais comum usa um sistema de rodas dentadas e linguetes.4 Como podemos
observar nas Figs. 3.2 e 3.3, cada rotor contém duas rodas dentadas, cada uma com 26
dentes. Incorporados na máquina existem três linguetes, posicionados na parte de trás
do compartimento onde são colocados os três rotores. Esses linguetes podem-se ajustar,
como veremos de seguida, à roda dentada mais pequena dos rotores. Importa referir que
os linguetes são empurrados de cada vez que uma tecla é premida e quando um linguete
está ajustado ao dente de uma roda dentada esse rotor irá avançar uma posição.
Na ENIGMA, cada rotor está ligado a um anel ajustável que possui um entalhe. Cada um
dos rotores encaixa no rotor seguinte sendo que o seu anel fica por cima da roda dentada
mais pequena do rotor seguinte. Como podemos ver na Fig. 3.5, a nível mecânico, num
determinado momento, o entalhe de um rotor (situado no seu anel) irá ficar alinhado com
o linguete do rotor seguinte, permitindo-o engrenar, ao premir uma tecla, na pequena roda
dentada do rotor correspondente.
4
Alavancas que se ajustam às rodas dentadas para as fazer rodar e também para que estas não rodem
no sentido inverso.
CAPÍTULO 3. A MÁQUINA ENIGMA 37
uma posição por cada tecla premida. O rotor 2 está engrenado porque o entalhe do rotor
1 está alinhado com o linguete 2. Desta forma, o rotor 2 irá avançar com a próxima tecla
premida. O rotor 3 não está engrenado, porque o entalhe do rotor 2 não está alinhado com
o linguete 3. Este irá simplesmente deslizar por cima do anel curvo do rotor 2. De facto,
quando um linguete não está alinhado com um entalhe, ele irá simplesmente resvalar sobre
a superfície do anel sem engrenar na roda dentada.
5
Em Bletchley Park as letras R, F, W, K, A eram memorizadas pelos criptanalistas através da mnemónica
Royal Flags Wave Kings Above.
CAPÍTULO 3. A MÁQUINA ENIGMA 38
Exemplo 3.1 (Entalhe) Neste exemplo, usa-se o rotor I na posição mais à direita (en-
talhe em R).
III II I
A B O
A B P
A B Q
A C R
A C S
A C T
Num sistema de rotores com apenas um entalhe, o rotor do meio avança uma posição por
cada vez que o rotor da direita avança 26 posições. De igual modo, o rotor da esquerda
avança uma posição por cada 26 avanços do rotor do meio. Note-se que esta situação é
difícil de ocorrer (apenas uma vez em cada 262 ), sendo o rotor da esquerda muitas vezes
designado por rotor lento. Por uma questão mecânica, o rotor do meio também avança
ao mesmo tempo que o da esquerda, significando isto que o rotor do meio pode avançar
duas posições em duas codificações consecutivas – o chamado “duplo-passo” – resultando
numa diminuição do número de configurações distintas das posições dos rotores. De facto,
este fenómeno do “duplo-passo” faz com que existam 26 × 25 × 26 = 16900 posições iniciais
possíveis dos rotores, em vez do número esperado 26 × 26 × 26 = 17576. Podemos observar
uma sequência destas no Exemplo 3.2.
Exemplo 3.2 (Duplo-passo) Neste exemplo, usa-se o rotor II no meio (entalhe em F),
o rotor III na posição mais à direita (entalhe em W) e o rotor I na posição mais à esquerda.
CAPÍTULO 3. A MÁQUINA ENIGMA 39
I II III
K D T
K D U
K D V
K E W
L F X
L F Y
L F Z
L F A
O rotor mais à direita, quando está na sua posição de entalhe, anda e obriga o rotor do meio
a avançar também uma posição. Se o rotor do meio se moveu para a sua própria posição
de entalhe, o linguete do rotor da esquerda cai no entalhe do rotor do meio. No próximo
passo este linguete irá empurrar a roda dentada do rotor da esquerda e fá-lo-á avançar,
mas também irá empurrar o entalhe do rotor do meio, avançando esse rotor uma segunda
vez. Note-se que este movimento também ocorre entre o rotor da direita e o do meio, uma
vez que o linguete do meio também empurra o entalhe do rotor da direita provocando um
“duplo-passo” desse mesmo rotor. No entanto, como o rotor da direita avança sempre uma
posição, esse movimento não é relevante.
Ajustes dos anéis ou ringstellung Analisando novamente a Fig. 3.3 (pág. 34), verifi-
camos que em cada rotor existe uma cavilha (4). Quando esta é empurrada para a direita
o anel pode ser rodado em relação ao núcleo do rotor. De facto, o anel de cada rotor
pode ser ajustado pelo operador de 26 maneiras diferentes. A principal consequência tem
a ver com o facto do núcleo, que contém as ligações, ficar desfasado em relação à letra
que é mostrada na janela da máquina ENIGMA. À primeira vista esta complicação extra
pode parecer pouco importante pois não altera nada relacionado com as transformações
efectuadas dentro do núcleo dos rotores. No entanto, o sistema de chaves utilizado pelo
exército alemão dependia da visualização da posição do rotor na janela do mesmo, e o ajuste
do anel determinava a relação entre as letras nas janelas e as transformações que realmente
se efectuavam no núcleo do rotor. Note-se que o mecanismo de avanço dos rotores também
CAPÍTULO 3. A MÁQUINA ENIGMA 40
é afectado pelos ajustes dos anéis. De facto, recorrendo novamente à Fig. 3.3, o ponto de
avanço dos rotores é determinado pela posição dos entalhes (8), que estão colocados no
anel e não no núcleo dos rotores.
3.1.2 Reflector
Na ENIGMA, em vez de usar o output do terceiro rotor como o output de todo o processo,
este é enviado para um disco reflector fixo que simplesmente efectua uma troca de letras
aos pares. Ou seja, o reflector actua como uma permutação que é um produto de ciclos
de comprimento 2. O output produzido pelo reflector é, por seu turno, enviado novamente
através dos rotores na direcção contrária, chegando ao disco de entrada. Assim, a ENIGMA
básica (sem plugboard ) efectua no total sete permutações através de: três rotores, um
reflector, e novamente pelos três rotores na direcção contrária6 . Em termos de combinatória
temos 26 × 26 × 26 = 17576 maneiras diferentes de cifrar uma letra.
Na Tabela 3.3 estão representadas as permutações efectuadas por três reflectores usados
na maior parte das versões da ENIGMA militar até 1939.
Input a b c d e f g h i j k l m n o p q r s t u v w x y z
reflector A E J M Z A L Y X V B W F C R Q U O N T S P I K H G D
reflector B Y R U H Q S L D P X N G O K M I E B F Z C W V J A T
reflector C F V P J I A O Y E D R Z X W G C T K U Q S B N M H L
Ao contrário dos rotores, o reflector não pode ser uma permutação arbitrária pois deve
possuir duas propriedades importantes:
• Não pode transformar uma letra nela própria. Esta propriedade surge de uma
necessidade física da máquina, uma vez que, no reflector, as letras estão ligadas
aos pares por fios eléctricos. Como a corrente não pode circular nos dois sentidos
num mesmo fio, as duas letras têm de ser diferentes;
6
Como veremos mais à frente o disco de entrada efectua a permutação identidade, podendo, por isso,
ser ignorado na criptanálise da cifra ENIGMA.
CAPÍTULO 3. A MÁQUINA ENIGMA 41
Devido ao facto do reflector ser involutivo, as permutações da Tabela 3.3 podem ser
apresentadas de uma forma mais simples através da sua representação em produto de
ciclos:
reflector A = (ae)(bj)(cm)(dz)(fl)(gy)(hx)(iv)(kw)(nr)(oq)(pu)(st)
reflector B = (ay)(br)(cu)(dh)(eq)(fs)(gl)(ip)(jx)(kn)(mo)(tz)(vw)
reflector C = (af)(bv)(cp)(dj)(ei)(go)(hy)(kr)(lz)(mx)(nw)(tq)(su)
Como já foi referido, numa determinada versão da ENIGMA (marinha), a partir de 1941, foi
acrescentado um quarto rotor à máquina. Para isso, os reflectores B e C foram substituídos
por outros mais finos (reflector B Dünn e reflector C Dünn). Da mesma forma foram
introduzidos os rotores finos Beta e Gamma para que o lugar ocupado antes por um
reflector passasse a ser utilizado para colocar um rotor e um reflector mais finos. Tal como
o reflector, o quarto rotor não rodava. Assim, a estrutura da máquina não teve que ser
alterada.
Num determinado aspecto, o reflector tornou a ENIGMA um sistema mais simples, uma
vez que a transformou numa máquina involutiva, isto é, se numa determinada posição dos
rotores, b é cifrado em F, então, usando a mesma configuração, f será cifrado em B. Este
facto permite que a ENIGMA não precise de ser alterada de um modo de cifra para um
modo de decifração. Isto previne erros inevitáveis que, por vezes, ocorreriam quando um
operador se esquecesse de ligar ou desligar um dos modos de operação. Outra característica
acrescentada pelo reflector tem a ver com o facto de a ENIGMA não poder cifrar uma letra
em si própria. Esta fraqueza criptológica foi muito explorada, primeiro pelos criptanalistas
polacos e posteriormente pelos britânicos em Bletchley Park.
• É involutiva.
Observando a Fig. 3.1 (pág. 32) podemos facilmente observar três rotores colocados nas
suas posições. Operacionalmente, as permutações associadas aos vários componentes da
máquina são efectuadas sequencialmente da direita para a esquerda e depois, na ordem
inversa, da esquerda para a direita. Na Fig. 3.4 (pág. 35) podemos observar o reflector do
lado esquerdo e o disco de entrada à direita. O disco de entrada é um disco fixo com 26
contactos. Os contactos do teclado estão ligados ao disco pelo lado direito. O lado esquerdo
do disco de entrada tem pequenos discos de metal para efectuar o contacto com os pinos
do primeiro rotor. Um aspecto curioso da estrutura da ENIGMA prende-se com o facto
de o teclado estar ligado ao disco de entrada na ordem simples “ABCDEF. . . ” não tirando
vantagem da oportunidade de, ao introduzir mais uma permutação, dificultar ainda mais
a tarefa a quem tenta quebrar o sistema.
3.1.3 Plugboard
O plugboard ou painel de conexões, visível na parte frontal da máquina (Fig. 3.6), foi a
adição mais importante à ENIGMA comercial (ou básica) quando esta foi alterada para
uso militar. Ao contrário dos rotores, as ligações do plugboard podiam ser alteradas pelo
operador. Tal como o reflector, o plugboard apenas efectuava uma troca de letras mas
tendo, obrigatoriamente, pontos fixos. O operador, usando fios duplos, ligava pares de
letras. O plugboard afectava a corrente de entrada proveniente do teclado e a corrente
CAPÍTULO 3. A MÁQUINA ENIGMA 43
Para perceber melhor como a ENIGMA funcionava, é melhor esquecer a imagem física
da máquina e concentrarmo-nos num diagrama esquemático de como a corrente eléctrica
efectuava as substituições (Fig. 3.7):
transformada em Q, o que faz com que a lâmpada Q acenda. Assim, neste exemplo, a letra
O é cifrada em Q. Importa notar que, quando a tecla O é premida a ligação à lâmpada O é
cortada e a lâmpada Q acende. Por sua vez, se a tecla Q é pressionada a ligação à lâmpada
Q é cortada e a lâmpada O acende.
60 × 26 × 26 × 26 = 60 × 263 = 1054560,
configurações possíveis.
Cada um dos anéis também pode ser ajustado a uma de 26 posições diferentes. No entanto,
do ponto de vista criptanalítico, o ajuste do anel do rotor mais à esquerda é irrelevante
pois o seu entalhe não afecta os outros rotores. Temos, desta forma, 262 posições relevantes
dos anéis dos rotores. Temos agora um número total de configurações igual a:
Falta ainda considerar o plugboard que permite trocar pares de letras arbitrários.
à !à ! à !
1 26 24 26 − 2(k − 1) 26!
d(k) = ... =
k! 2 2 2 2k (26 − 2k)! k!
26!
≈ 1, 51 × 1014
210 × 6! × 10!
maneiras distintas de efectuar as 10 ligações.
Para k = 5, . . . , 13 tem-se:
Desta forma, aplicando um ataque “força bruta” a esta cifra, utilizando um processador
Pentium 4 a 2.81 GHz, este demoraria cerca de 6, 12 × 1017 minutos (tempo estimado pelo
autor), ou seja, 1, 16 × 1012 anos a percorrer todas as configurações possíveis. Supondo, de
acordo com várias opiniões, que o universo apenas existe há cerca de 13, 7 × 109 anos e que
o tempo de vida do sol é de aproximadamente 1010 anos é fácil concluir que esta tarefa é
computacionalmente “intratável”.
1918
A 15 de Abril, em carta dirigida à Marinha Imperial Alemã [Kah91, pp. 31-33], Arthur
Scherbius (1878-1929) escreve que:
“A variação da chave é tão grande que, sem o seu conhecimento, mesmo pos-
suindo texto original, texto cifrado e uma máquina, a chave não pode ser
encontrada, uma vez que é impossível percorrer 6 biliões (sete rotores) ou 100
triliões (treze rotores) de chaves.”
Ele observou, correctamente, que “apenas faria sentido procurar uma chave desta forma
[força bruta] quando se sabe que os criptogramas desconhecidos têm a mesma chave e
quando a mesma chave é mantida durante um período longo de tempo”.
Devido ao tipo e volume de tráfico de mensagens na altura, a marinha decidiu que não seria
vantajoso adquirir a máquina. Devido ao seu custo, o Ministério dos Negócios Estrangeiros
da Alemanha também a rejeitou.
1923
Uma firma da qual Scherbius era sócio publicita a sua máquina de cifra denominada
ENIGMA.
• Cada rotor tem um anel móvel com letras indicadoras, permitindo rodá-lo para
qualquer posição. Antes, uma dada letra indicadora significava que o rotor estava
numa determinada posição. Agora, as letras indicadoras não revelam qualquer relação
com a posição do rotor. Assim, a posição do anel no rotor tem que ser conhecida do
destinatário, passando, desta forma, a fazer parte da chave;
• Os entalhes que fazem o rotor seguinte (à esquerda) avançar uma posição num certo
ponto (ou pontos) são transferidos do rotor para o anel;
• o quarto rotor (o mais à esquerda) é convertido num reflector. Apesar de ser chamado
de rotor, este não roda. Tem contactos apenas numa das faces e faz com que seja
efectuada uma segunda sequência de permutações (as inversas das primeiras). Note-
-se que como o rotor reflector não se move, apenas os outros três têm rodas dentadas
que sobressaem na cobertura.
O reflector, ao contrário das 26 ligações dos rotores, tem apenas 13. Desta forma, se a letra
b é cifrada na letra X, a letra x é cifrada na letra B. Esta reciprocidade tinha a vantagem
de eliminar a necessidade de qualquer dispositivo para mudar do modo de cifra para o de
decifração e vice-versa (ver Secção 3.1.2).
1925
1926
Em Fevereiro, a marinha põe a máquina ao seu serviço com a designação de Radio Cipher
C. Algumas medidas de segurança foram imediatamente impostas. A marinha estabeleceu
que as posições iniciais dos rotores seriam distribuídas através de um livro de código.
Desta forma, o operador passa a escolher, a partir do livro, uma determinada sequência
de posições dos rotores. É efectuada, então, usando as tabelas do livro de código, uma
determinada correspondência com outras letras que são comunicadas ao receptor. Este
possui também um livro de código e consegue, efectuando a operação inversa, descobrir
as posições iniciais dos rotores. Note-se que a aleatoriedade dessas posições estabelecidas
nos livros de código elimina a possibilidade do operador escolher uma posição inicial dos
rotores “mais provável”, como GGG ou ABC.
1928
• Procedimento que não necessita de livro de código (apenas das tabelas com a confi-
guração diária da máquina que não incluíam as posições iniciais dos rotores);
• O operador escolhe, livremente, as posições iniciais dos rotores utilizadas para cifrar
a mensagem.
1930
É acrescentado um plugboard à ENIGMA do exército (ver Secção 3.1.3). Apenas são ligados
6 pares de letras, ou seja, 12 letras são cifradas passando pelo plugboard, sendo as restantes
14 cifradas apenas com os rotores e reflector.
A partir de 1 de Junho, a máquina ENIGMA, na sua forma “final”, começa a ser usada
pelo exército alemão.
1930-1932
Neste período, na ENIGMA do exército, são muito usadas posições iniciais dos rotores
para cifrar as mensagens (chaves) do género AAA, ABC e outras semelhantes. Relembremos
que estas sequências são escolhidas pelos operadores.
1933
É proibido o uso de chaves do tipo AAA, ABC, ... e alguns meses depois também são
proibidas chaves como ASD e WSX que formam sequências horizontais e diagonais no teclado
da máquina (ver Fig. 4.6 da pág. 80).
1934
Uma vez que o plugboard aumenta o espaço de chaves possíveis, e também por uma questão
de homogeneidade nas comunicações, a marinha começa a usar a ENIGMA do exército com
o seu teclado e plugboard. A marinha acrescenta, também, algumas medidas de segurança:
cada máquina passa a ter um conjunto, não de 3 rotores, como o modelo do exército, nem
de 5, como a máquina naval inicial, mas de 7 rotores. Desta forma, os rotores I, II e III
servem para comunicar com o exército, os IV e V ficam de reserva, e os VI e VII são usados
apenas para comunicações internas da marinha.
1935
8
Os termos impostos à Alemanha no Tratado de Versalhes (1919) incluíam, entre outras cláusulas, uma
restrição ao tamanho do exército.
CAPÍTULO 3. A MÁQUINA ENIGMA 50
1936
Nos primeiros meses deste ano, a sequência dos rotores ainda é alterada uma vez por mês,
mas, a partir de 1 de Outubro, a sequência passa a ser alterada diariamente, e o número
de ligações no plugboard passa a variar entre 5 e 8.
1937
1938
1939
A marinha melhora o seu sistema e introduz um segundo entalhe nos anéis dos rotores VI,
VII e VIII fazendo com que o rotor à esquerda de um destes avance duas posições por cada
volta completa de VI, VII ou VIII.
rotores e dos anéis. Para isso são criadas redes de mensagens9 . Os participantes em
cada rede partilham a mesma configuração base da máquina. Nesta altura, a marinha
estabelece duas redes para as suas comunicações: uma para águas nacionais e outra para
águas internacionais. Cada uma das redes usa ainda três tipos de mensagens: oficiais,
gerais e de staff, que diferem nas configurações do plugboard e dos rotores.
A partir de Janeiro desse ano, o número de ligações no plugboard passa a variar entre 7 e
10.
9
Segundo Bauer [Bau02, p.397] durante a guerra existiram cerca de 120 redes.
CAPÍTULO 3. A MÁQUINA ENIGMA 52
rotor II, seria o rotor V a ser colocado. De igual modo teria que colocar os rotores 4, 5 e 6
posições à frente das que apareciam no livro de código. Por exemplo, se no livro de código
as posições eram KYD o operador devia rodar os rotores até às posições ODJ.
import e x c e p t i o n s
c l a s s unsoundComponent ( E x c e p t i o n ) :
pass
c l a s s unsoundPlugboard ( E x c e p t i o n ) :
pass
c l a s s Ething ( o b j e c t ) :
def v e r i f y ( s e l f ) :
f o o ={}
fo r i in s e l f . t a b l e . k e y s ( ) :
f o o [ s e l f . t a b l e [ i ] ] = True
i f l e n ( s e l f . t a b l e . k e y s ( ) ) ! = 2 6 or l e n ( f o o . k e y s ( ) ) ! = 2 6 :
CAPÍTULO 3. A MÁQUINA ENIGMA 53
r a i s e unsoundComponent
def t r a d ( s e l f , c ) :
return s e l f . t a b l e [ c ]
def t r a d i n v ( s e l f , c ) :
return s e l f . t a b l e i n v [ c ]
def t o r d ( s e l f , c ) :
return ord ( c)−ord ( ’A’ )
def mostra ( s e l f , c ) :
return s e l f . t a b l e
c l a s s r o t o r ( Ething ) :
c l a s s m i r r o r ( Ething ) :
c l a s s pl u gb o a rd ( Ething ) :
def v e r i f y p l u g b o a r d ( s e l f ) :
f o o ={}
fo r i in ra n g e ( l e n ( s e l f . t a b l e . k e y s ( ) ) ) :
i f s e l f . table [ i ]!= i :
f o o [ i ]= True
i f l e n ( f o o . ke ys ( ) ) > 2 0 :
r a i s e unsoundPlugboard
De seguida são definidos alguns plugboards, rotores e reflectores que se podem utilizar.
painel0 =[]
p a i n e l 1 =[’UA ’ , ’PF ’ , ’RQ ’ , ’SO ’ , ’NI ’ , ’EY ’ , ’BG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 2 =[’UB ’ , ’PS ’ , ’RQ ’ , ’FO ’ , ’NY ’ , ’EI ’ , ’AG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 3 =[’UC ’ , ’PF ’ , ’RQ ’ , ’SO ’ , ’NI ’ , ’EY ’ , ’BG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 4 =[’UO ’ , ’PF ’ , ’RQ ’ , ’SA ’ , ’NI ’ , ’EY ’ , ’BG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 5 =[’UP ’ , ’AF ’ , ’RQ ’ , ’SO ’ , ’NI ’ , ’EY ’ , ’BG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 6 =[’UH ’ , ’PF ’ , ’RQ ’ , ’SO ’ , ’NI ’ , ’EY ’ , ’BG ’ , ’AL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 7 =[’UX ’ , ’PF ’ , ’RQ ’ , ’SO ’ , ’NI ’ , ’EY ’ , ’BG ’ , ’HL ’ , ’TA ’ , ’ZJ ’ ]
p a i n e l 8 =[’UI ’ , ’PF ’ , ’RQ ’ , ’SO ’ , ’NA ’ , ’EY ’ , ’BG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 9 =[’EA ’ , ’PF ’ , ’RQ ’ , ’SO ’ , ’NI ’ , ’UY ’ , ’BG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
p a i n e l 1 0 =[’UA ’ , ’RF ’ , ’PQ ’ , ’SO ’ , ’NI ’ , ’EY ’ , ’BG ’ , ’HL ’ , ’TX ’ , ’ZJ ’ ]
CAPÍTULO 3. A MÁQUINA ENIGMA 55
r e f l e c t o r B =[’AY ’ , ’BR ’ , ’CU ’ , ’DH ’ , ’EQ ’ , ’FS ’ , ’GL ’ , ’IP ’ , ’JX ’ , ’KN ’ ,
’MO ’ , ’TZ ’ , ’VW ’ ]
r e f l e c t o r C =[’AF ’ , ’BV ’ , ’CP ’ , ’DJ ’ , ’EI ’ , ’GO ’ , ’HY ’ , ’KR ’ , ’LZ ’ , ’MX ’ ,
’NW ’ , ’TQ ’ , ’SU ’ ]
def Rot ( c , s , i , e , n , t ) :
return ( c+s [ t ]+R( t , n , i , e ))%26
def Roti ( c , s , i , e , n , t ) :
return ( c−s [ t ]−R( t , n , i , e ))%26
def R( t , n , i , e ) :
i f t ==0:
return n+1
else :
i f t ==1 and i [ t ] + ( ( i [ t −1]−e [ t −1])%26+n)/26==e [ t ] −1:
return ( ( i [ t −1]−e [ t −1])%26+R( t −1,n , i , e ))/26+1
else :
return ( ( i [ t −1]−e [ t −1])%26+R( t −1,n , i , e ) ) / 2 6
c l a s s enigma :
s e l f . notch=notch
s e l f . p a i n e l=p a i n e l
s e l f . r e f l e c t o r=r e f l e c t o r
fo r n in ra n g e ( l e n ( msg ) ) :
l p l a i n t [ n]= ord ( msg [ n]) − ord ( ’A’ )
c0= s e l f . p a i n e l . t r a d ( l p l a i n t [ n ] )
c t=c0
fo r j in r a n g e ( l e n ( s e l f . r o t l i s t ) ) :
p i n i t i a l [ j ]= ord ( s e l f . p i n i t [ j ]) − ord ( ’A’ )
r i n g s [ j ]= ord ( s e l f . r i n g s [ j ]) − ord ( ’A’ )
s h i f t [ j ]=( p i n i t i a l [ j ]− r i n g s [ j ])%26
notch [ j ]= ord ( s e l f . notch [ j ]) − ord ( ’A’ )
c1=Rot ( ct , s h i f t , p i n i t i a l , notch , n , j )
c2= s e l f . r o t l i s t [ j ] . t r a d ( c1 )
c3=Roti ( c2 , s h i f t , p i n i t i a l , notch , n , j )
c t=c3
c r= s e l f . r e f l e c t o r . t r a d ( c t )
fo r k in r a n g e ( l e n ( s e l f . r o t l i s t ) ) :
c_1=Rot ( cr , s h i f t , p i n i t i a l , notch , n ,
l e n ( s e l f . r o t l i s t )−1−k )
c_2= s e l f . r o t l i s t [ l e n ( s e l f . r o t l i s t )−1−k ] . t r a d i n v ( c_1 )
CAPÍTULO 3. A MÁQUINA ENIGMA 57
c f= s e l f . p a i n e l . t r a d ( c r )
codtext [ l p l a i n t [ n]]= cf
msgcod=msgcod+c h r ( c f +65)
return msgcod
No exemplo apresentado, utiliza-se uma ENIGMA com os rotores III, II e I nas posições
direita, meio e esquerda, respectivamente, com posições iniciais P, J e D e com os anéis
ajustados para as posições K, W e D. É usado o painel1 e o reflector B definidos na presente
secção.
58
Capítulo 4
A contribuição polaca
Já depois de terminados os seus cursos universitários, estes três matemáticos foram con-
tratados, a 1 de Setembro de 1932, para trabalharem, em Varsóvia, na criptanálise da
ENIGMA.
59
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 60
• Ligações do plugboard ;
Podemos observar na Fig. 4.2 um excerto de uma tabela de chaves-diárias que contém as
informações necessárias para a configuração base da máquina para um determinado dia.
1
Os restantes elementos da tabela não fazem parte da chave-diária e por isso não são relevantes para o
estudo efectuado.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 61
Figura 4.2: Tabela com chave-diária do dia 4 de Junho de 1937 para a ENIGMA do exército
• Ligações do plugboard : CO DI FR HU JW LS TX
No período já referido, 1930-1938, uma chave-de-mensagem era composta por uma sequên-
cia de três letras que determinava as posições iniciais dos três rotores no momento em que a
mensagem começava a ser cifrada. Três aspectos fundamentais, relativos ao procedimento
de cifra das chaves-de-mensagem, contribuíram para o sucesso dos ataques que iremos
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 62
analisar:
• Cada chave-de-mensagem era cifrada duas vezes2 , e as seis letras obtidas, que desi-
gnaremos por indicador, eram colocadas no início da mensagem;
Desta forma, este procedimento revelou-se o elo mais fraco da cifra ENIGMA e originou
múltiplos ataques, incluindo aquele que iremos analisar mais à frente e que conduziu à
reconstrução das ligações internas dos rotores.
“In the past, cryptanalysts had depended upon statistics. Which letter was
the most frequent? Which of several possible plaintexts was the most likely?
... But Rejewski, for the first time in the history of cryptanalysis, utilized a
higher-algebraic attack. He applied one of the first theorems taught in the
theory of groups... Group theory thus told Rejewski that his cycles depended
only on the rotor setting and not on the plugboard encipherment. It told him,
in other words, that the plugboard, in wich the Germans placed great trust
2
Os alemães cifravam as chaves-de-mensagem duas vezes para detectar e evitar erros na transmissão
por rádio. No entanto, este facto criava uma redundância nas primeiras seis letras de todas as mensagens.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 63
Ao longo da sua história, a ENIGMA militar foi utilizada usando vários procedimentos. Os
diversos ramos do exército alemão até 15 de Setembro de 1938, e os S.D. (serviços secretos
do partido Nazi) até 1 de Julho de 1939 utilizavam as instruções apresentadas de seguida.
2. O operador selecciona, à sua escolha, uma chave individual para a mensagem (chave-
de-mensagem), uma sequência de três letras que é cifrada duas vezes utilizando a
configuração estabelecida pela chave-diária. Anota as lâmpadas que acendem e dessa
forma, obtém o indicador de seis letras, que coloca no início da mensagem.
Assim, uma determinada mensagem tinha nas suas primeiras seis letras o indicador, seguido
do criptograma (texto original cifrado)4 .
Importa, mais uma vez, realçar que as chaves-de-mensagem de um determinado dia tinham
duas características fundamentais:
A descrição e o estudo que se seguem, são uma tentativa para compreender a abordagem
e os métodos utilizados por Marian Rejewski no primeiro ataque à cifra ENIGMA. Este
ataque visava encontrar as chaves-de-mensagem de todas as mensagens de um determinado
dia.
Começamos por escrever, separadamente, as seis primeiras letras (os indicadores) de todas
as mensagens relativas a um determinado dia tal como na Tabela 4.1. Note-se que nesse
conjunto encontramos vários indicadores idênticos o que sugere desde já uma escolha “pouco
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 66
aleatória” das chaves-de-mensagem por parte dos operadores. De facto, uma vez que todas
as chaves-de-mensagem eram cifradas usando a mesma configuração da máquina, ao serem
observados vários indicadores iguais isso significa que, como a ENIGMA é involutiva, as
chaves-de-mensagem correspondentes também são iguais.
1. AUQ AMN 14. IND JHU 27. PVJ FEG 40. SJM SPO 53. WTM RAO
2. BNH CHL 15. JWF MIC 28. QGA LYB 41. SJM SPO 54. WTM RAO
3. BCT CGJ 16. JWF MIC 29. QGA LYB 42. SJM SPO 55. WTM RAO
4. CIK BZT 17. KHB XJV 30. RJL WPX 43. SUG SMF 56. WKI RKK
5. DDB VDV 18. KHB XJV 31. RJL WPX 44. SUG SMF 57. XRS GNM
6. EJP IPS 19. LDR HDE 32. RJL WPX 45. TMN EBY 58. XRS GNM
7. FBR KLE 20. LDR HDE 33. RJL WPX 46. TMN EBY 59. XOI GUK
8. GPB ZSV 21. MAW UXP 34. RFC WQQ 47. TAA EXB 60. XYW GCP
9. HNO THD 22. MAW UXP 35. SYX SCW 48. USE NWH 61. YPC OSQ
10. HNO THD 23. NXD QTU 36. SYX SCW 49. VII PZK 62. YPC OSQ
11. HXV TTI 24. NXD QTU 37. SYX SCW 50. VII PZK 63. ZZY YRA
12. IKG JKF 25. NLU QFZ 38. SYX SCW 51. VQZ PVR 64. ZEF YOC
13. IKG JKF 26. OBU DLZ 39. SYX SCW 52. VQZ PVR 65. ZSJ YWG
(dvpfkxgzyo) (5., 49., 27., 7., 17., 57., 8., 63., 61., 26.);
(eijmunqlht) (6., 12., 15., 21., 48., 23., 28., 19., 9., 45.).
Assim, P1 P4 pode ser escrito como produto de dois ciclos de comprimento 1, dois ciclos de
comprimento 2 e dois ciclos de comprimento 10, e como estes ciclos contêm todas as 26
letras, P1 P4 está, assim, completamente determinado.
P1 P4 = (a)(s)(bc)(rw)(dvpfkxgzyo)(eijmunqlht). (4.1)
Procedendo de forma idêntica para as segundas e quintas, e terceiras e sextas letras dos
indicadores obtemos:
P2 P5 = (blfqveoum)(hjpswizrn)(axt)(cgy)(d)(k); (4.2)
P3 P6 = (abviktjgfcqny)(duzrehlxwpsmo). (4.3)
Rejewski designou este conjunto de três equações por conjunto característico ou cara-
cterística (de um determinado dia).
Notemos que, em cada uma das equações do conjunto característico, os ciclos do mesmo
comprimento ocorrem aos pares. Esta propriedade é intrínseca à própria estrutura e
definição de característica. De facto, se, por exemplo, na expressão P1 P4 tivermos o ciclo
singular (a) isso significa que uma determinada letra, digamos x (diferente de a pois na
ENIGMA nenhuma letra é cifrada nela própria), produziu um A nas posições 1 e 4. Da
mesma forma, devido à reciprocidade da ENIGMA, a letra a também irá originar a letra
X nas mesmas posições do indicador. Logo, em P1 P4 , para além de (a) também teremos o
seu par (x). Como veremos mais à frente, isto também ocorre para ciclos não singulares.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 68
SHN M LRL−1 M −1 N −1 H −1 S −1 ,
onde:
Esta notação, que será usada a partir de agora, é semelhante à usada por Rejewski [Rej84a,
Rej84c, Rej77].
No entanto, como o rotor N avança uma posição de cada vez que se prime uma tecla, é
útil introduzir uma cifra de César C que converta cada letra do alfabeto na letra seguinte5
de modo a simular o movimento dos rotores.
C = (abcdefghijklmnopqrstuvwxyz)
Importa, uma vez mais, referir que o avanço do rotor N ocorre ao mesmo tempo que se
prime a tecla, ou seja, ao cifrar a letra o rotor já está na sua nova posição. Como podemos
observar na Fig. 4.3 esse facto altera as permutações que a máquina efectua, e pode ser
descrito matematicamente usando a cifra de César C na composição das permutações que
representam o circuito funcional da ENIGMA.
5
Note-se que esta cifra de César corresponde à permutação Ck , com k = 1, do Exemplo 2.1 (pág. 27).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 69
(a) (b)
Figura 4.3: Ilustração de permutações efectuadas pela ENIGMA antes (a) e depois
(b) do rotor N avançar
P1 = SHCN C −1 M LRL−1 M −1 CN −1 C −1 H −1 S −1 ,
P2 = SHC 2 N C −2 M LRL−1 M −1 C 2 N −1 C −2 H −1 S −1 ,
P3 = SHC 3 N C −3 M LRL−1 M −1 C 3 N −1 C −3 H −1 S −1 ,
P4 = SHC 4 N C −4 M LRL−1 M −1 C 4 N −1 C −4 H −1 S −1 ,
P5 = SHC 5 N C −5 M LRL−1 M −1 C 5 N −1 C −5 H −1 S −1 ,
P6 = SHC 6 N C −6 M LRL−1 M −1 C 6 N −1 C −6 H −1 S −1 .
def s t a t e ( ) :
R= [ ]
H= [ ]
f or k in a l f a :
fo r s in a l f a :
fo r t in a l f a :
p i n i t=k+s+t
for j in r a n g e ( 6 ) :
L=[]
A=num2let ( ( let2num ( p i n i t [ 0 ] ) + j )%26)
B=p i n i t [ 1 ]
C=p i n i t [ 2 ]
p i n=A+B+C
notch=num2let ( ( let2num ( p i n [0])+7)%26)+
num2let ( ( let2num ( p i n [1])+7)%26)+ "A"
f o r i in a l f a :
x=enigma ( [ r o t o r ( r o t o r I I ) , r o t o r ( r o t o r I I I ) ,
r o t o r ( r o t o r I ) ] , "AAA " , pin , notch ,
pl ug bo a r d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
y=x . egm ( i )
L . append ( i )
L . append ( y )
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 71
W=l i s t 2 d i c t (L)
R. append (W)
H. append (R)
R= [ ]
return H
def l i s t 2 d i c t (L ) :
D={}
c=l e n (L)
f or r in r a n g e ( c ) :
D[ L [ ( 2 ∗ r)%c ] ] = L [ ( 2 ∗ r+1)%c ]
return D
def let2num (A ) :
return ord (A)−65
def num2let (A ) :
return c h r ( (A%26+65))
Tal como já foi referido, apesar de ainda não conhecermos as permutações P1 a P6 , os pro-
dutos P1 P4 , P2 P5 e P3 P6 são deduzidos caso exista um número de mensagens interceptadas
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 72
P1 P4 = SHCN C −1 QCN −1 C 3 N C −4 QC 4 N −1 C −4 H −1 S −1 ,
P2 P5 = SHC 2 N C −2 QC 2 N −1 C 3 N C −5 QC 5 N −1 C −5 H −1 S −1 ,
P3 P6 = SHC 3 N C −3 QC 3 N −1 C 3 N C −6 QC 6 N −1 C −6 H −1 S −1 .
Tem-se:
É pertinente, nesta altura, referir que os ciclos singulares (ciclos de comprimento 1) nas
equações do conjunto característico desempenham um papel fundamental neste estudo.
Vejamos como:
2. Sendo x uma letra qualquer, xPi Pi+3 = x implica que existe uma letra y tal que
xPi = y e yPi+3 = x, isto é, Pi e Pi+3 contêm ambos a transposição (x y). No
exemplo que estamos a explorar (característica (4.1) a (4.3)), como P1 P4 contém
os ciclos singulares (a) e (s), então já deduzimos que P1 e P4 contêm ambos a
transposição (as).
O teorema que vamos enunciar e demonstrar a seguir ajudou Marian Rejewski a compre-
ender a relação existente entre, por exemplo, as duas permutações diárias P1 e P4 e a sua
composição P1 P4 pertencente à característica desse dia.
7
Segundo Welchman [Wel01] bastariam cerca de 60 mensagens para formar o conjunto característico
de um determinado dia.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 73
Demonstração:
Sejam X e Y duas permutações, sobre o mesmo conjunto, formadas apenas pelo produto
de ciclos disjuntos de comprimento 2. Caso existam transposições iguais em X e Y , por
exemplo (a1 a2 ), então no produto XY irá ocorrer um par de ciclos singulares (a1 )(a2 )
que são disjuntos, do mesmo comprimento e em número par. Relativamente às restantes
transposições a prova reduz-se ao caso demonstrado a seguir.
aKS 1 ks X[ X[ X[ [
/a
t[9 © KS 3[ [ [
/a
t9 KS 5
/ a2k−5
KS
/ a2k−3
8 £ KS
/ a2k−1
8 KS
Xv
X X X Z vZ ©Z r r £
z ¦ X Yz Y¦ Z Z Z u ~ u ~
Z Z Y
~ £ ~ £ Y Y Y Y Y Y Y x { x {
£ ~ £ ~ Y Z Z { Y xY Y { x
Z Z ~ Z uZ X
¦ z ¦ z Z Z [ X X ~rX uX
®¶ ©ty v ®¶ ©ty v ®¶ ®¶ £ x r [®¶ £[x [ [ X X
[ [ [X+ ®¶
a2 o a4 o a6 o a2k−4 o a2k−2 o 3 a2k
Este procedimento pode ser usado para qualquer par de ciclos do mesmo comprimento. E
uma vez que a permutação K tem um número par de ciclos de cada comprimento, podemos
definir desta forma as permutações X e Y com todos os elementos do conjunto Z. ¥
Seguindo o raciocínio usado na demonstração do Teorema 4.1, se um dos ciclos de Pi Pi+3 for
escrito por baixo do outro do mesmo comprimento, as transposições de Pi podem ser lidas
verticalmente, enquanto que as de Pi+3 são lidas na diagonal. No entanto, podemos escrever
os ciclos do mesmo comprimento uns debaixo dos outros de várias formas. Relembrando o
conjunto característico que estamos a analisar:
P1 P4 = (a)(s)(bc)(rw)(dvpfkxgzyo)(eijmunqlht), (4.10)
P2 P5 = (blfqveoum)(hjpswizrn)(axt)(cgy)(d)(k), (4.11)
P3 P6 = (abviktjgfcqny)(duzrehlxwpsmo), (4.12)
temos:
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 75
• 2 × 10 possibilidades para P1 e P4 ;
• 3 × 9 possibilidades para P2 e P5 ;
• 13 possibilidades para P3 e P6 .
De facto, o indicador SYX SCW que ocorre cinco vezes (35.–39. na Tabela 4.1 da pág. 66),
pode ser o resultado da dupla cifra de um desses padrões já referidos. Vamos testar esse
indicador para a chave-de-mensagem aaa. De facto, SYX SCW poderá ter surgido a partir
das letras aaa, uma vez que s e a surgem em dois ciclos singulares diferentes no produto
P1 P4 , y e a aparecem em dois ciclos diferentes de comprimento 3 no produto P2 P5 e x e a
encontram-se em dois ciclos diferentes de treze letras em P3 P6 . Obtemos, então, algumas
hipóteses para as transposições das permutações P1 a P6 :
P1 = (as) . . .
P2 = (ay) . . .
P3 = (ax) . . .
P4 = (as) . . .
P5 = (ac) . . .
P6 = (aw) . . .
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 76
Assim, para P3 P6 , já sabemos como devem ser escritos os ciclos do mesmo comprimento
um debaixo do outro com o objectivo de obter P3 e P6 :
(a b v i k t j g f c q n y)
(x l h e r z u d o m s p w)
P3 = (ax)(bl)(vh)(ie)(kr)(tz)(ju)(gd)(fo)(cm)(qs)(np)(yw),
P6 = (xb)(lv)(hi)(ek)(rt)(zj)(ug)(df)(oc)(mq)(sn)(py)(wa).
Um vez que P3 contém, entre outros, o ciclo (qs), concluimos que a chave-de-mensagem
correspondente ao indicador AUQ AMN (1.) tem o padrão **s. Como P1 contém o
ciclo (as), a chave-de-mensagem será do tipo s*s. Assim, se suposermos que a chave
correspondente ao indicador AUQ AMN é sss, então em P2 , para além de (ay), também
(su) fica determinado. Desta forma, também já sabemos como devem ser escritos, uns
por baixo dos outros, os ciclos de igual comprimento de P2 P5 de forma a que cada coluna
forme uma transposição de P2 e cada diagonal uma transposição de P5 :
(a x t)(b l f q v e o u m)(d)
(y g c)(j n h r z i w s p)(k)
P2 = (ay)(xg)(tc)(bj)(ln)(fh)(qr)(vz)(ei)(ow)(us)(mp)(dk),
P5 = (yx)(gt)(ca)(jl)(nf)(hq)(rv)(ze)(io)(wu)(sm)(pb)(kd).
Outro indicador que ocorre mais do que uma vez na Tabela 4.1 é RJL WPX. Analisando as
permutações P2 , P3 , P5 e P6 já determinadas, sabemos que a chave-de-mensagem correspon-
dente terá o padrão *bb. Como P1 P4 contém as transposições (bc)(rw) então P1 apenas
pode ter os ciclos (rb) ou (rc). Analisando o primeiro caso (o mais provável pois origina
a chave bbb) temos que P1 contém o ciclo (br) e P4 o ciclo (rc). Relativamente aos ciclos
de comprimento 10 de P1 P4 , podemos usar outro indicador, tal como LDR HDE (19.-20.).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 77
(a)(b c)(d v p f k x g z y o)
(s)(r w)(i e t h l q n u m j)
Obtemos, assim:
P1 = (as)(br)(cw)(di)(ve)(pt)(fh)(kl)(xq)(gn)(zu)(ym)(oj),
P4 = (sa)(rc)(wb)(iv)(ep)(tf)(hk)(lx)(qg)(nz)(uy)(mo)(jd).
Obviamente, o trabalho dos criptanalistas polacos era mais simplificado quantos mais ciclos
singulares (ou singletons) surgissem no conjunto característico. Utilizando o programa
apresentado no Apêndice B.1 deduz-se que, em média, existem três singletons em cada
conjunto característico.
0 2 4 6 8 10 12 14 16 18 20
Figura 4.4: N.o de conjuntos característicos (escala logarítmica) que contêm um
determinado número de singletons para a sequência de rotores II-I-III
Globalmente, como seria de esperar, de acordo com a Fig. 4.5, para todas as seis sequências
de rotores possíveis temos uma distribuição muito parecida com a do caso particular
representado na Fig 4.4.
0 2 4 6 8 10 12 14 16 18 20
Figura 4.5: N.o total de conjuntos característicos (escala logarítmica) que
contêm um determinado número de singletons
Consultando a tabela no Apêndice B.2, vemos que, apesar de existirem muitos dias com 0
singletons (aproximadamente 22.10 %) no seu conjunto característico, existem sempre mais
conjuntos com 2 ou 4 singletons (aproximadamente 33.34 % e 25.07 %, respectivamente), o
que tornava a tarefa dos criptanalistas polacos menos complicada pois assim tinham uma
boa base para começar a procurar as chaves-de-mensagem.
Assim, da forma descrita, sem conhecer as ligações internas dos rotores e a chave-diária,
Rejewski quebrou o sistema de indicadores utilizado pelo exército alemão. Seria apenas
necessário ter uma quantidade de mensagens disponível que permitisse a construção do
conjunto característico para esse dia. Também era importante, como já foi referido,
um profundo conhecimento das escolhas habituais de chaves-de-mensagem por parte dos
operadores da ENIGMA. De facto, mesmo quando, por indicações superiores, foi proibido
o uso de chaves com três letras iguais, os criptanalistas polacos conseguiram perceber que
os operadores alemães tentavam mesmo não repetir nenhuma letra, criando sempre chaves
com três letras diferentes, o que ajudava igualmente à sua descoberta.
No entanto, nesta altura, o conhecimento das chaves-de-mensagem de nada servia uma vez
que os rotores da réplica da ENIGMA comercial que os polacos possuíam não tinham as
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 79
mesmas ligações internas dos rotores da ENIGMA utilizada pelo exército. Para além disso
ainda não existiam métodos que permitissem deduzir a configuração diária da máquina
(chave-diária). Desta forma, mesmo conhecendo a chave-de-mensagem, não seria possível
decifrar o criptograma. Seria, assim, necessário descobrir as ligações internas dos rotores
usados nessa altura na máquina ENIGMA. Para isso, as equações (4.4) a (4.9) teriam que
ser trabalhadas de forma a que se encontrasse a incógnita N (ligações internas do rotor
mais à direita na máquina). Após isto, com o conhecimento das chaves-de-mensagem e das
chaves-diárias seria imediata a decifração de um criptograma.
Apesar de não poderem ser utilizadas directamente para decifrar mensagens, a descoberta
das permutações diárias P1 , P2 , P3 , P4 , P5 e P6 serviu, como veremos na secção seguinte,
de ponto de partida para a descoberta das ligações internas dos rotores.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 80
Analisando novamente as equações (4.4) a (4.9) da pág. 71, com a descoberta das permu-
tações P1 a P6 “apenas” as permutações H, S, N e Q são desconhecidas. Para reduzir a
complexidade do sistema de equações referido, Rejewski tentou encontrar a permutação
H, ou seja, as alterações efectuadas pelo disco de entrada (ver pág. 42). O facto de as
ENIGMAS militar e comercial terem teclados iguais levou Rejewski a supor, erradamente,
que as ligações do disco de entrada eram iguais às da ENIGMA comercial. Após essa
tentativa falhada, observou que as ligações entre o plugboard e o disco de entrada na
ENIGMA comercial eram bastante regulares. De facto, na ENIGMA comercial, as ligações
do disco de entrada tinham a forma:
à !
qwertzuioasdfghjkpyxcvbnml
H=
abcdefghijklmnopqrstuvwxyz
ou seja, as entradas do plugboard estavam ligadas ao disco de entrada pela ordem das teclas
no teclado (Fig. 4.6).
Tentou, então, com sucesso, outra ligação regular, desta vez pela ordem do alfabeto.
“I assumed that, since the keyboard keys were not connected with the sucessive
contacts in the entry drum in the order of the letter on the keyboard, then
maybe they were connected up in alphabetical order; that is, that the permu-
tation caused by the entry drum was an identity and need not be taken into
account at all. This time, luck smiled upon me. The hypothesis proved correct,
and the very first trial yielded a positive result.”
Rejewski [Rej84a]
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 81
à !
abcdefghijklmnopqrstuvwxyz
H= ,
abcdefghijklmnopqrstuvwxyz
e pode ser eliminada das equações (4.4) a (4.9). Obtemos, desta forma, um sistema mais
simples.
No entanto, mesmo com apenas três permutações desconhecidas (S, N e Q), o processo
para encontrar as soluções era longo e requeria a verificação de muitas possibilidades. De
facto, o tempo necessário para encontrar uma solução tornou o modelo matemático de
Rejewski impraticável.
Até que, a 9 de Dezembro de 1932, os serviços secretos polacos tiveram acesso a quatro
documentos que facilitaram a tarefa de Rejewski e permitiram a praticabilidade do seu
método. Segundo Welchman11 [Wel01], esses documentos eram:
• um manual operacional;
10
Rejewski terá descoberto a permutação H nos últimos dias de 1932 ou nos primeiros dias de Janeiro
de 1933.
11
Gordon Welchman (1906-1985), matemático britânico, foi criptanalista em Bletchley Park durante a
Segunda Guerra Mundial. Foi o responsável máximo do Hut Six, a secção em Bletchley Park dedicada à
quebra das cifras ENIGMA do exército e força aérea alemã.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 82
• instruções de cifra;
Esta informação foi fornecida pelo capitão francês Gustave Bertrand que obteve os preciosos
documentos através do espião Hans-Thilo Schmidt, conhecido pelo nome de código Asche.
Bertrand apresentou, primeiro, os documentos ao seu departamento (Departamento de
Cifra francês) e aos aliados britânicos, que não se revelaram interessados. Forneceu, então,
os documentos ao Biuro Szyfrow , permitindo a Rejewski pôr o seu método imediatamente
em prática.
C −1 S −1 P1 SC = N C −1 QCN −1 ,
C −2 S −1 P2 SC 2 = N C −2 QC 2 N −1 ,
C −3 S −1 P3 SC 3 = N C −3 QC 3 N −1 ,
C −4 S −1 P4 SC 4 = N C −4 QC 4 N −1 ,
C −5 S −1 P5 SC 5 = N C −5 QC 5 N −1 ,
C −6 S −1 P6 SC 6 = N C −6 QC 6 N −1 .
Este conjunto de equações é, agora, menos complexo sendo, no entanto, necessário proceder
a certas transformações para o resolver.
Por uma questão de simplificação, designando o primeiro membro das seis equações pelas
letras U , V , W , X, Y e Z, as equações também podem ser escritas na forma:
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 83
U = N C −1 QCN −1 ,
V = N C −2 QC 2 N −1 ,
W = N C −3 QC 3 N −1 ,
X = N C −4 QC 4 N −1 ,
Y = N C −5 QC 5 N −1 ,
Z = N C −6 QC 6 N −1 .
Note-se que as expressões de U a Z são conhecidas pois o primeiro membro das equações
do sistema anterior contém apenas permutações conhecidas.
UV = N C −1 (QC −1 QC)CN −1 ,
V W = N C −2 (QC −1 QC)C 2 N −1 ,
W X = N C −3 (QC −1 QC)C 3 N −1 ,
XY = N C −4 (QC −1 QC)C 4 N −1 ,
Y Z = N C −5 (QC −1 QC)C 5 N −1 .
V W = N C −1 N −1 (U V )N CN −1 , (4.19)
W X = N C −1 N −1 (V W )N CN −1 , (4.20)
XY = N C −1 N −1 (W X)N CN −1 , (4.21)
Y Z = N C −1 N −1 (XY )N CN −1 . (4.22)
Tem-se:
Antes de avançarmos importa introduzir uma definição e um teorema que irão ajudar a
compreender o que se segue.
K = P −1 LP.
Note-se que apenas podemos subscrever permutações com a mesma estrutura de ciclos.
Analisemos o Exemplo 4.2 apresentado a seguir.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 85
R = (aukdjspqblr)(coytzeimnhf)(gv)(w)(x)
T = (dyqblghnjsk)(euavcotpimz)(wx)(r)(f)
à !
abcdefghijklmnopqrstuvwxyz
,
djebozwmtlqspiunhkgvyxrfac
“djebozwmtlqspiunhkgvyxrfac”.
Como já vimos, um ciclo de tamanho n pode ser escrito de n formas. Por exemplo,
(dyqblghnjsk) pode, também, ser escrito como (kdyqblghnjs) ou (skdyqblghnj), etc...
Assim, facilmente se conclui que existem várias formas de subscrever duas permutações.
No Exemplo 4.2, existem 4 × 11 × 11 × 2 × 1 × 1 = 968 formas distintas de escrever T
debaixo de R.
e, depois de seleccionar uma delas12 , obtêm-se as ligações internas do rotor mais à direita.
Rejewski [Rej84c, p.281] afirma, erradamente, que as equações (4.21) e (4.22) não são
necessárias. De facto, na maior parte dos casos estas não seriam necessárias uma vez que
apenas com as duas primeiras equações se obtém uma solução única. Existem, no entanto,
casos em que é necessário recorrer às duas últimas equações pois obtém-se mais do que
uma solução para N CN −1 como se pode constatar no exemplo que passamos a apresentar.
• plugboard: identidade;
• reflector: B.
As permutações geradas são do tipo [1, 1, 1, 1, 11, 11] (ver pág. 30):
U V = (aukdjsqpblr)(coytzeimnhf)(g)(v)(w)(x),
V W = (avcotpimzeu)(blghnjskdyq)(x)(r)(w)(f),
W X = (ahjswmilgqb)(coydxeuvntp)(f)(k)(r)(z).
12
Qual das possíveis permutações N seleccionar dependia dos momentos de rotação dos vários rotores.
Como veremos mais adiante, a escolha só seria possível depois de se conhecer as soluções análogas para as
possíveis ligações internas de todos os rotores.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 87
UV = (aukdjsqpblr)(coytzeimnhf)(g)(v)(w)(x)
VW = (dyqblghnjsk)(euavcotpimz)(w)(x)(r)(f)
W X = (bahjswmilgq)(oydxeuvntpc)(r)(f)(k)(z),
e obtemos a solução:
à !
−1 abcdefghijklmnopqrstuvwxyz
N CN = .
djebozwmtlqspiunhkgvyxrfac
“djebozwmtlqspiunhkgvyxrfac”.
UV = (aukdjsqpblr)(coytzeimnhf)(g)(v)(w)(x)
VW = (dyqblghnjsk)(euavcotpimz)(w)(x)(f)(r)
W X = (bahjswmilgq)(oydxeuvntpc)(f)(r)(z)(k),
à !
abcdefghijklmnopqrstuvwxyz
N CN −1 = .
djebozwmtlqspiunhkgvyxfrac
Ou seja,
“djebozwmtlqspiunhkgvyxfrac”.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 88
Note-se que esta solução é muito parecida com a anterior, havendo apenas a “troca” das
letras f e r.
Obtivemos assim, duas soluções para N CN −1 , ou seja, duas soluções para o sistema de
equações:
(
VW = N C −1 N −1 (U V )N CN −1
W X = N C −1 N −1 (V W )N CN −1 .
Neste caso, seria necessário recorrer às duas últimas equações, (4.21) e (4.22), e, dessa
forma, resolvendo o sistema com as quatro equações:
V W = N C −1 N −1 (U V )N CN −1
W X = N C −1 N −1 (V W )N CN −1
XY = N C −1 N −1 (W X)N CN −1
Y Z = N C −1 N −1 (XY )N CN −1 ,
encontravamos apenas uma solução.
U V = (aukdjsqpblr)(coytzeimnhf)(g)(v)(w)(x),
V W = (avcotpimzeu)(blghnjskdyq)(x)(r)(w)(f),
W X = (ahjswmilgqb)(coydxeuvntp)(f)(k)(r)(z),
XY = (abfoyxivneu)(dmlgrptswhj)(k)(q)(c)(z),
Y Z = (aftxioydjzu)(bpswknvgrml)(c)(e)(h)(q),
UV = (aukdjsqpblr)(coytzeimnhf)(g)(v)(w)(x)
VW = (dyqblghnjsk)(euavcotpimz)(w)(x)(r)(f)
W X = (bahjswmilgq)(oydxeuvntpc)(r)(f)(k)(z)
XY = (jdmlgrptswh)(uabfoyxivne)(k)(z)(q)(c)
YZ = (lbpswknvgrm)(ydjzuaftxio)(q)(c)(h)(e),
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 89
à !
abcdefghijklmnopqrstuvwxyz
N CN −1 =
djebozwmtlqspiunhkgvyxrfac
ou seja,
“djebozwmtlqspiunhkgvyxrfac”.
Saliente-se que no trabalho desenvolvido por Rejewski por vezes não era possível escrever
os produtos U V , V W , W X, XY e Y Z uns debaixo dos outros, uma vez que surgiam per-
mutações com diferentes estruturas de ciclos. Quando isso acontecia significava que o rotor
do meio tinha avançado durante as seis codificações sucessivas das letras das chaves-de-
mensagem, influenciando directamente as permutações P1 , P2 , . . . , P6 e, consequentemente,
os produtos referidos.
De facto, aproximadamente 45.91% dos produtos são de um destes três tipos de ciclos.
Observe-se também que cerca de 25.54% dos produtos contêm ciclos do tipo menos traba-
lhoso de subscrever, ou seja, [13, 13]. Note-se que com duas permutações deste tipo existem
“apenas” 2 × 13 × 13 = 338 formas de escrever uma debaixo da outra. Já para os produtos
do tipo [1, 1, 12, 12] existem 2 × 12 × 12 × 2 = 576 subscrições possíveis. O caso extremo,
que não ocorre para nenhuma das seis ordens possíveis dos rotores (ver Apêndice C.2), é o
do tipo [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] que conduz a 213 × 13! subscrições possíveis, ou seja,
cerca de 5, 1 × 1013 maneiras distintas de escrever uma permutação debaixo da outra.
13
Importa notar que 26 letras podem formar, nas condições já exploradas, 101 (número de partições de
13) tipos de ciclos diferentes.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 90
Vamos apresentar de seguida um exemplo semelhante aos problemas que Rejewski teve
que enfrentar. Por uma questão de simplificação, e também por ser o mais frequente, os
ciclos das permutações do exemplo que se segue são da forma [13, 13]. Todas as permutações
foram geradas e trabalhadas computacionalmente utilizando a implementação da ENIGMA
apresentada na Secção 3.3 e os programas dos Apêndices C.1.1 e C.1.2.
• plugboard: (ua)(pf)(rq)(so)(ni)(ey)(bg)(hl)(tx)(zj);
• reflector: B.
P1 P4 = (ahsovgziert)(bx)(clpyjudwnmf)(kq), (4.23)
P2 P5 = (aqvzixmljhgw)(b)(cpeykrontufd)(s), (4.24)
P3 P6 = (ajmorslfeqydb)(ckivughxtwznp). (4.25)
P1 = (af)(ct)(bk)(ep)(dv)(gu)(iy)(hm)(jz)(lr)(ow)(ns)(qx),
P2 = (au)(ch)(bs)(el)(dg)(fw)(ir)(kx)(jp)(my)(oz)(nv)(qt),
P3 = (ag)(cs)(bh)(ez)(dx)(fn)(io)(kr)(ju)(mv)(lp)(qw)(ty),
P4 = (ac)(bq)(ey)(dg)(fh)(ij)(kx)(ms)(lt)(on)(pr)(uz)(wv),
P5 = (af)(cg)(bs)(ej)(dw)(io)(hp)(km)(ly)(nz)(qu)(rx)(tv),
P6 = (ah)(cl)(bx)(en)(dt)(gj)(fp)(ir)(ks)(mu)(ov)(qz)(wy).
Devido ao material obtido através de espionagem (fornecido por Asche), são também
conhecidas as ligações no plugboard para aquele dia14 :
S = (ua)(pf)(rq)(so)(ni)(ey)(bg)(hl)(tx)(zj).
estão ligadas, ou seja, 20 letras são alteradas pelo plugboard mantendo-se as restantes 6
inalteradas15 .
C = (abcdefghijklmnopqrstuvwxyz),
C 2 = (acegikmoqsuwy)(bdfhjlnprtvxz),
C 3 = (adgjmpsvybehknqtwzcfilorux),
C 4 = (aeimquycgkosw)(bfjnrvzdhlptx).
U = (ak)(cb)(ew)(dy)(gz)(fo)(ir)(hl)(jp)(mn)(qv)(su)(tx),
V = (aj)(cw)(bh)(en)(df)(go)(iq)(kx)(mv)(lu)(ps)(ry)(tz),
W = (ah)(cd)(bm)(ex)(gw)(fr)(ik)(jo)(ls)(nt)(qv)(py)(uz),
X = (az)(ci)(bl)(en)(dr)(gy)(fh)(kv)(ju)(mw)(ox)(qs)(pt),
U V = (axzodrqmechup)(bwnviyfgtkjsl),
V W = (aowdrplznxivb)(cgjhmqketusyf),
W X = (afdivsbwyteou)(crhzjxnpgmlqk).
15
Apesar de neste exemplo termos 10 pares de letras ligadas no plugboard, no período em que se deu o
ataque às ligações internas dos rotores apenas 6 pares de letras eram ligadas.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 93
Tal como seria de esperar, os produtos obtidos têm a mesma estrutura de ciclos (neste caso
[13,13]).
Relembremos que:
V W = N C −1 N −1 (U V )N CN −1
W X = N C −1 N −1 (V W )N CN −1
Tal como já foi referido, uma vez que as permutações U V e V W são conjugadas, efectuando
em U V certas alterações determinadas por N CN −1 (a permutação que conjuga U V e V W )
obtém-se V W . Da mesma forma, efectuando exactamente as mesmas alterações em V W
obtém-se W X. Para isso, escreve-se V W debaixo de U V e W X debaixo de V W de todas
as maneiras possíveis até se encontrar uma em que as alterações produzidas em U V para
obter V W e em V W para obter W X sejam iguais, ou seja, duas subscrições em que lendo,
em ambas, na vertical os pares de letras correspondentes é formada a mesma permutação.
U V = (axzodrqmechup)(bwnviyfgtkjsl)
V W = (gjhmqketusyfc)(plznxivbaowdr)
V W = (gjhmqketusyfc)(plznxivbaowdr)
W X = (bwyteouafdivs)(crhzjxnpgmlqk)
N CN −1 = “gpsquvbyxwortzmcekdafnljih”.
“bdfhjlcprtxvznyeiwgakmusqo”, “cegikmdqsuywaozfjxhblnvtrp”,
“dfhjlnertvzxbpagkyicmowusq”, “egikmofsuwaycqbhlzjdnpxvtr”,
“fhjlnpgtvxbzdrcimakeoqywus”, “gikmoqhuwycaesdjnblfprzxvt”,
“hjlnprivxzdbftekocmgqsaywu”, “ikmoqsjwyaecguflpdnhrtbzxv”,
“jlnprtkxzbfdhvgmqeoisucayw”, “kmoqsulyacgeiwhnrfpjtvdbzx”,
“lnprtvmzbdhfjxiosgqkuwecay”, “moqsuwnaceigkyjpthrlvxfdbz”,
“nprtvxobdfjhlzkquismwygeca”, “oqsuwypcegkimalrvjtnxzhfdb”,
“prtvxzqdfhljnbmswkuoyaigec”, “qsuwyaregimkocntxlvpzbjhfd”,
“rtvxzbsfhjnlpdouymwqackige”, “suwyactgikomqepvznxrbdljhf”,
“tvxzbduhjlpnrfqwaoyscemkig”, “uwyacevikmqosgrxbpztdfnljh”,
“vxzbdfwjlnrpthsycqauegomki”, “wyacegxkmosquitzdrbvfhpnlj”,
“xzbdfhylnptrvjuaescwgiqomk”, “yacegizmoquswkvbftdxhjrpnl”,
“zbdfhjanprvtxlwcgueyiksqom”, “acegikboqswuymxdhvfzjltrpn”.
N = “bdfhjlcprtxvznyeiwgakmusqo”.
Como acabamos de ver existiam várias possibilidades para as ligações internas do rotor
N . A única consequência de adoptar uma ou outra solução tem a ver com o facto de a
face direita do rotor N ser rodada por um ângulo superior ou inferior em relação à face
esquerda, ou seja, depende da posição para a qual foi ajustado o anel do rotor.
“Which version of permutation N we accept as the true one will depend on such
elements as the moments of rotation of the various rotors. But those details
may only be established following the basic reconstruction of the connections
in all rotors.”
Assim, a versão da permutação N que irá ser aceite como verdadeira só seria possível obter
depois de se encontrar as possibilidades para as ligações internas dos outros rotores (e
também do reflector).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 95
Fazendo uso das potencialidades dos computadores actuais e recorrendo, novamente, aos
programas incluídos nos Apêndices C.1.1 e C.1.2 vamos, de seguida, apresentar um estudo
para encontrar as ligações internas do rotor N mas agora para todas as permutações U V ,
V W , W X, XY e Y Z possíveis para uma determinada sequência de rotores.
• plugboard : identidade;
• reflector: B.
Depois de gerar, utilizando o Programa 4.1, todos os 263 = 17576 conjuntos [P1 , P2 , P3 ,
P4 , P5 , P6 ] de permutações diárias possíveis (um conjunto para cada uma das 263 posições
iniciais dos rotores), calcularam-se as permutações U , V , W , X, Y , Z e os respectivos
produtos U V , V W , W X, XY e Y Z originando, obviamente, uma lista com 263 conjuntos
[U V , V W , W X, XY , Y Z]. Para cada um destes conjuntos foi efectuado o processo
de subscrição já descrito anteriormente. Foram obtidos os resultados apresentados na
Tabela 4.3 (pág. 96). Na primeira coluna da tabela temos o número de ordem na lista do
conjunto [U V , V W , W X, XY , Y Z]. Esse número de ordem, como veremos mais à frente,
tem um papel muito importante neste estudo.
De acordo com a Tabela 4.3, temos 26 permutações que são soluções para N CN −1 (depen-
dendo da posição inicial dos rotores). No entanto, relativamente a N a solução terá que
ser única uma vez que se trata das ligações internas do rotor que estava na posição mais à
direita na máquina naquele dia. A partir das 26 soluções para N CN −1 encontramos N da
forma descrita a seguir.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 96
Tal como já foi referido na descrição do método e no Exemplo 4.4, para encontrar N
temos que escrever C debaixo de N CN −1 de todas as formas possíveis. Relembremos que,
devido às características de C, existem 26 formas de o fazer. Assim, para cada uma das
26 soluções para N CN −1 existem 26 hipóteses para N , perfazendo no total 26 × 26 = 676
possibilidades para N . Vamos analisar de seguida algumas dessas hipóteses.
“bkeltjsvycmixundrhaoqzgwpf”, “clfmuktwzdnjyvoesibprahxqg”,
“dmgnvluxaeokzwpftjcqsbiyrh”, “enhowmvybfplaxqgukdrtcjzsi”,
“foipxnwzcgqmbyrhvlesudkatj”, “gpjqyoxadhrnczsiwmftvelbuk”,
“hqkrzpybeisodatjxnguwfmcvl”, “irlsaqzcfjtpebukyohvxgndwm”,
“jsmtbradgkuqfcvlzpiwyhoexn”, “ktnucsbehlvrgdwmaqjxzipfyo”,
“luovdtcfimwshexnbrkyajqgzp”, “mvpweudgjnxtifyocslzbkrhaq”,
“nwqxfvehkoyujgzpdtmaclsibr”, “oxrygwfilpzvkhaqeunbdmtjcs”,
“pyszhxgjmqawlibrfvocenukdt”, “qztaiyhknrbxmjcsgwpdfovleu”,
“raubjziloscynkdthxqegpwmfv”, “sbvckajmptdzoleuiyrfhqxngw”,
“tcwdlbknqueapmfvjzsgiryohx”, “udxemclorvfbqngwkathjszpiy”,
“veyfndmpswgcrohxlbuiktaqjz”, “wfzgoenqtxhdspiymcvjlubrka”,
“xgahpforuyietqjzndwkmvcslb”, “yhbiqgpsvzjfurkaoexlnwdtmc”,
“zicjrhqtwakgvslbpfymoxeund”, “ajdksiruxblhwtmcqgznpyfvoe”.
“bvckajmptdzoleuiyrfhqxngws”, “cwdlbknqueapmfvjzsgiryohxt”,
“dxemclorvfbqngwkathjszpiyu”, “eyfndmpswgcrohxlbuiktaqjzv”,
“fzgoenqtxhdspiymcvjlubrkaw”, “gahpforuyietqjzndwkmvcslbx”,
“hbiqgpsvzjfurkaoexlnwdtmcy”, “icjrhqtwakgvslbpfymoxeundz”,
“jdksiruxblhwtmcqgznpyfvoea”, “keltjsvycmixundrhaoqzgwpfb”,
“lfmuktwzdnjyvoesibprahxqgc”, “mgnvluxaeokzwpftjcqsbiyrhd”,
“nhowmvybfplaxqgukdrtcjzsie”, “oipxnwzcgqmbyrhvlesudkatjf”,
“pjqyoxadhrnczsiwmftvelbukg”, “qkrzpybeisodatjxnguwfmcvlh”,
“rlsaqzcfjtpebukyohvxgndwmi”, “smtbradgkuqfcvlzpiwyhoexnj”,
“tnucsbehlvrgdwmaqjxzipfyok”, “uovdtcfimwshexnbrkyajqgzpl”,
“vpweudgjnxtifyocslzbkrhaqm”, “wqxfvehkoyujgzpdtmaclsibrn”,
“xrygwfilpzvkhaqeunbdmtjcso”, “yszhxgjmqawlibrfvocenukdtp”,
“ztaiyhknrbxmjcsgwpdfovleuq”, “aubjziloscynkdthxqegpwmfvr”.
Notemos que estas 26 permutações não são mais do que as 26 hipóteses anteriores mas
alteradas por um shift(-1) (deslocamento de uma posição para a esquerda).
“bxgahpforuyietqjzndwkmvcsl”, “cyhbiqgpsvzjfurkaoexlnwdtm”,
“dzicjrhqtwakgvslbpfymoxeun”, “eajdksiruxblhwtmcqgznpyfvo”,
“fbkeltjsvycmixundrhaoqzgwp”, “gclfmuktwzdnjyvoesibprahxq”,
“hdmgnvluxaeokzwpftjcqsbiyr”, “ienhowmvybfplaxqgukdrtcjzs”,
“jfoipxnwzcgqmbyrhvlesudkat”, “kgpjqyoxadhrnczsiwmftvelbu”,
“lhqkrzpybeisodatjxnguwfmcv”, “mirlsaqzcfjtpebukyohvxgndw”,
“njsmtbradgkuqfcvlzpiwyhoex”, “oktnucsbehlvrgdwmaqjxzipfy”,
“pluovdtcfimwshexnbrkyajqgz”, “qmvpweudgjnxtifyocslzbkrha”,
“rnwqxfvehkoyujgzpdtmaclsib”, “soxrygwfilpzvkhaqeunbdmtjc”,
“tpyszhxgjmqawlibrfvocenukd”, “uqztaiyhknrbxmjcsgwpdfovle”,
“vraubjziloscynkdthxqegpwmf”, “wsbvckajmptdzoleuiyrfhqxng”,
“xtcwdlbknqueapmfvjzsgiryoh”, “yudxemclorvfbqngwkathjszpi”,
“zveyfndmpswgcrohxlbuiktaqj”, “awfzgoenqtxhdspiymcvjlubrk”.
De igual modo, estas 26 permutações não são mais do que as 26 hipóteses da primeira
solução mas alteradas por um shift(-25).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 99
De facto, este padrão ocorre para todas as outras hipóteses, ou seja, obtemos sempre as
hipóteses da primeira solução mas alteradas por um shift(-i) com i = 1, . . . , 25. Obvia-
mente, também a solução para N que se encontra entre as 26 hipóteses para a primeira
solução, se encontra nas hipóteses para as outras 25 soluções mas alterada por um shift.
Este fenómeno era previsível pelos factos apresentados de seguida. Em primeiro lugar, no-
temos que os números de ordem na Tabela 4.3 estão distribuídos seguindo um padrão de 676
em 676 posições, ou seja, de 262 em 262 . Os primeiros 676 conjuntos [U V, V W, W X, XY, Y Z]
foram obtidos usando a ENIGMA nas primeiras 676 posições dos rotores. Da forma como
o programa que gera as permutações está construído concluimos que essas primeiras 262 =
676 posições iniciais dos rotores correspondem à situação em que o rotor mais à direita
(N ) está fixo na posição A e os outros dois rotores percorrem todas as suas 26 posições
possíveis. Da mesma forma, os conjuntos com número de ordem 677-1352 correspondem às
posições iniciais dos rotores em que o rotor N está na posição B e os outros dois percorrem
26 posições cada um (originando 262 = 676 conjuntos [U V, V W, W X, XY, Y Z]) e assim
sucessivamente. Desta forma, o facto da permutação que representa as ligações internas
do rotor N estar presente, como vimos, em todas as 26 hipóteses exploradas, ainda que
alterada por funções shift, já seria de esperar, pois se na posição A o rotor N efectua as
transformações:
a 7→ a, b 7→ j, c 7→ d, d 7→ k, e 7→ s, f 7→ i, g 7→ r, ...
a 7→ j, b 7→ d, c 7→ k, d 7→ s, e 7→ i, f 7→ r, ... ou seja,
mensais), teria que haver alguma dose de sorte no dia escolhido16 , uma vez que a confi-
guração da máquina para esse dia tanto podia gerar permutações do tipo [13, 13] que são
mais fáceis de subscrever manualmente como podia gerar permutações, por exemplo, do
tipo [9, 9, 1, 1, 1, 1, 1, 1, 1, 1] que envolvem um número muito grande de subscrições, mais
concretamente 2 × 9 × 9 × 8! = 6531840. Mesmo actualmente, usando um computador, a
complexidade inerente à subscrição de permutações deste tipo é enorme.
Tal como já foi referido, só era possível saber qual das 26 hipóteses era a correcta depois de
se encontrarem as ligações internas dos outros rotores e do reflector. Na altura, os alemães
mudavam a ordem dos rotores trimestralmente17 . Segundo Welchman [Wel01], uma vez
que Setembro e Outubro fazem parte de dois trimestres diferentes, os criptanalistas polacos
tiveram muita sorte e o método levou à descoberta das ligações internas de dois rotores.
Uma vez que não temos conhecimento do conteúdo das tabelas de chaves-diárias para esse
período vamos aceitar que, de facto, nesses dois meses o rotor N era diferente. Note-se que
só temos a certeza em relação ao facto da sequência dos rotores mudar, podendo acontecer
que nesses dois meses estivessem em vigor, por exemplo, as sequências II-III-I e III-II-I, ou
seja, apesar da sequência ser diferente o rotor mais à direita é o mesmo (rotor I). De acordo
com Welchman [Wel01] e Kahn [Kah91], conhecidas as ligações internas de dois rotores,
16
Importa relembrar o facto deste método ser aplicado apenas ao período correspondente aos dois meses
a que se referiam os livros de código na posse dos polacos.
17
A partir de 1936 a ordem dos rotores era alterada todos os meses, mais tarde diariamente e por fim
de 8 em 8 horas.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 101
foi então fácil calcular as ligações do rotor que faltava e também do reflector. Isto seria
alcançado por métodos de tentativa e erro ao ler algumas das mensagens interceptadas
relativas aos meses referidos. Uma grande ajuda residia no facto de os livros de código
disponíveis para os meses de Setembro e Outubro incluírem, cada um deles, um exemplo
de um texto original (não cifrado) e o correspondente criptograma com referência à chave-
diária e à chave-de-mensagem.
Assim, apesar de todo este processo para descobrir as ligações internas dos rotores a partir
de P1 , P2 , P3 , P4 , P5 e P6 ser muito trabalhoso e requerer muita atenção, Rejewski só teve
que o efectuar totalmente duas vezes (para dois rotores diferentes na posição N ).
Antes de finalizar esta secção, importa referir e enfatizar que a dedução das ligações internas
dos rotores se revelou, de facto, um feito extraordinário dos criptanalistas polacos e em
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 102
Welchman [Wel01]
Esta importante descoberta, permitiu que fossem construídas réplicas da máquina ENIGMA
utilizada pelo exército alemão (a primeira foi construída em Janeiro de 1933), que depois
seriam usadas para decifrar mensagens de rádio interceptadas, a partir do momento em
que a chave-diária fosse deduzida. As réplicas da ENIGMA construídas muito cedo na
Polónia, permitiram aos britânicos começar a decifrar mensagens logo após o início da
Segunda Guerra Mundial, sendo por isso muito importantes em toda a história de sucesso
de Bletchley Park [Wel01, Kah91, Tum03, Koz84, KW84].
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 103
Após a dedução das ligações internas dos rotores, os criptanalistas polacos tentaram
desenvolver uma forma de encontrar as chaves-diárias. Segundo Welchman [Wel01], Re-
jewski passou a contar com a colaboração permanente de Zygalski e Rózycki apenas a
partir do início de 1933. Nessa altura já tinha desenvolvido dois métodos – Método da
Grelha e Método ANX – que permitiram aos serviços secretos polacos decifrar mensagens
interceptadas a partir de Janeiro de 1933. Os outros métodos que iremos analisar – Método
do Relógio e Ciclómetro – surgiram da necessidade de optimizar o tempo de decifração das
mensagens. Os dois últimos ataques – Bomba e Folhas de Zygalski – foram desenvolvidos
como resposta à mudança do modo de operação da ENIGMA do exército alemão.
Relembremos que, no período de 1930 a 1938, uma chave-diária para a ENIGMA do exército
consistia no seguinte:
• Ligações do plugboard ;
Importa, também, relembrar que, nesse período, só existiam 3 rotores disponíveis para a
ENIGMA do exército, havendo, portanto, 6 formas de os colocar na máquina.
P1 = C x N C −x QC x N −1 C −x ,
P2 = C x+1 N C −x−1 QC x+1 N −1 C −x−1 ,
P3 = C x+2 N C −x−2 QC x+2 N −1 C −x−2 ,
P4 = C x+3 N C −x−3 QC x+3 N −1 C −x−3 ,
P5 = C x+4 N C −x−4 QC x+4 N −1 C −x−4 ,
P6 = C x+5 N C −x−5 QC x+5 N −1 C −x−5 ,
ou, equivalentemente,
C x N −1 C −x P1 C x N C −x = Q,
C x+1 N −1 C −x−1 P2 C x+1 N C −x−1 = Q,
C x+2 N −1 C −x−2 P3 C x+2 N C −x−2 = Q,
C x+3 N −1 C −x−3 P4 C x+3 N C −x−3 = Q,
C x+4 N −1 C −x−4 P5 C x+4 N C −x−4 = Q,
C x+5 N −1 C −x−5 P6 C x+5 N C −x−5 = Q,
Como efectuar todas estas operações se tornava muito trabalhoso, Rejewski pensou num
método mais prático – o chamado Método da Grelha. É o mais antigo método para
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 105
reconstruir as chaves-diárias. Foi usado no período de 1933 a 1936 e era baseado no facto
de haver apenas 6 ligações no plugboard, deixando 14 letras inalteradas.
N “kjpzydtiohxcsgubrnwfmveqla”,
CN C −1 “ioyxcshngwbrftaqmveludpkzj”,
2 −2
C NC “nxwbrgmfvaqeszpludktcojyih”,
3 −3
C NC “wvaqfleuzpdryoktcjsbnixhgm”,
C 4 N C −4 “uzpekdtyocqxnjsbiramhwgflv”,
C 5 N C −5 “yodjcsxnbpwmirahqzlgvfekut”,
6 −6
C NC “ncibrwmaovlhqzgpykfuedjtsx”,
......... ..............................
C 25 N C −25 “blkqazeujpiydthvcsoxgnwfrm”,
......... ..............................
C 3 N C −3 “wvaqfleuzpdryoktcjsbnixhgm”,
C 4 N C −4 “uzpekdtyocqxnjsbiramhwgflv”.
Noutra folha de papel com seis aberturas, designada por grelha, escrevem-se as permutações
diárias P1 a P6 :
à !
abcdefghijklmnopqrstuvwxyz
P1
srwivhnfdolkygjtxbapzecqmu
... ................................................
à !
abcdefghijklmnopqrstuvwxyz
P6
wxofkduihzevqscymtnrglabpj
De acordo com a descrição de Rejewski [Rej84a], pode-se concluir que a grelha com as
permutações P1 a P6 e a folha com as trinta e uma permutações18 já referidas são parecidas
com as representadas na Fig. 4.7.
18
A folha teria que ter as 26 permutações de N a C 25 N C −25 mais as 5 permutações iniciais de N a
C 4 N C −4 para se poder deslizar a grelha – contendo seis aberturas – ciclicamente, fazendo, por exemplo,
corresponder a primeira abertura, P1 , com a permutação C 25 N C −25 .
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 106
Uma vez que as seis permutações P1 a P6 são diárias, para cada dia existia apenas uma
grelha. Como nessa altura se encontrava em vigor o uso de três rotores na máquina
ENIGMA, existiam três folhas com as trinta e uma variações das ligações internas do rotor
N.
Segundo Rejewski [Rej84a], move-se a grelha sobre a folha com as variações das ligações
do rotor N até que se obtenha uma posição na qual se encontrem “certas similaridades” 19
entre as seis permutações na grelha e as permutações que surgem nas aberturas. Nessa
posição, deve-se rearranjar as letras em todas permutações P1 a P6 de forma a que todas as
permutações Q se tornem iguais (ver pág. 104). Desta forma, são encontradas as posições
iniciais do rotor N , as alterações provocadas pela permutação S e determina-se qual o
rotor mais à direita na máquina. Este trabalho requeria uma concentração considerável,
uma vez que as similaridades já referidas não eram muitas vezes evidentes e, por vezes,
19
Essas similaridades teriam a ver com casos em que se encontravam letras iguais nas mesmas posições
ou então determinados padrões visíveis nas permutações a comparar.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 107
passavam despercebidas.
Q = C y M C −y C z LC −z RC z L−1 C −z C y M −1 C −y , (4.26)
onde as incógnitas y e z, tal como a incógnita anterior x, pode assumir todos os valores
inteiros de 1 a 26. Segundo Rejewski [Rej84a], no início de 1933, o único procedimento
que o próprio aplicou para encontrar y e z foi o de percorrer todas as 262 = 676 posições
possíveis dos rotores M e L na máquina até encontrar as suas posições correctas.
De acordo com Welchman [Wel01], terá sido elaborado um catálogo com todas as possibili-
dades para Q. Existiam dois rotores para duas posições (M e L), logo haviam duas ordens
possíveis para as quais se tinham 262 posições iniciais possíveis dos rotores, perfazendo,
assim, 2 × 262 possibilidades para Q. Quando o Método da Grelha determinasse qual o
rotor mais à direita, a sua posição inicial e a permutação Q, o catálogo seria consultado e
deduzidas as posições iniciais dos outros dois rotores, bem como a sua ordem na máquina.
Tal como já foi referido, o Método da Grelha foi usado enquanto o número de ligações no
plugboard era pequeno (seis ligações até 1 de Outubro de 1936) e, para além de manual
e muito desgastante, por si só não revelava a chave-diária na sua totalidade. De facto,
o Método da Grelha servia para encontrar as posições iniciais dos rotores, as ligações do
plugboard e a ordem dos rotores mas faltava, ainda, desenvolver um método para encontrar
os ajustes dos anéis.
Como já vimos no Capítulo 3, os rotores possuem anéis ajustáveis com as letras do alfabeto
neles gravadas. As posições diárias desses anéis eram fornecidas nas tabelas mensais
juntamente com os outros componentes das chaves-diárias. Tornava-se, então, necessário
20
Relembre-se que o reflector, representado pela permutação R, é estacionário.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 108
descobrir os ajustes desses anéis que desempenhavam um papel fundamental nos avanços
dos rotores.
Das mensagens de Setembro e Outubro de 1932 que haviam sido lidas, verificou-se que
algumas delas começavam com as letras ANX, da palavra alemã “an” (em português “para”)
e “x ” para separar as palavras. Segundo Kahn [Kah91], uma em cada cinco mensagens
começavam dessa forma. O Método ANX funcionava da forma descrita a seguir. Após
seleccionar uma mensagem a começar, por exemplo, por tuv, e premindo sempre a tecla
t, rodavam-se os rotores, observando quando a lâmpada A acendia. Então a tecla u
seria premida e, se a lâmpada N acendesse, premia-se a tecla v. Se, desta forma, a
lâmpada X acendesse, havia uma grande probabilidade de ter sido encontrada uma boa
possibilidade para os ajustes dos anéis. De seguida, efectuando alguns cálculos relativos ao
desfasamento entre as posições dos rotores e o número de avanços até se acender a lâmpada
correcta, ajustavam-se os anéis de forma apropriada. Senão, teriam que continuar a tentar
até encontrar o caso correcto. Este método, apesar de resultar, era, obviamente, muito
primitivo. Numa situação desfavorável teriam que ser percorridas todas as posições dos
rotores (263 = 17576).
Para a descrição deste método é necessário introduzir e apresentar alguns resultados acerca
do índice de coincidência de Friedman.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 109
Assim,
Pn
i=1 δ(ti , vi )
K(T, V ) = ,
n
onde:
(
1, se x = y
δ(x, y) =
0, caso contrário.
Para a língua alemã, de acordo com resultados obtidos por vários autores, tais como
Kullback em 1976 (κS = 7.62%) e Eyraud em 1953 (κS = 8.20%), temos que:
7.5% ≤ κS ≤ 8.3%
Se escrevermos dois textos em alemão um por baixo do outro, como no exemplo apresentado
por Rejewski [Rej84a],
WEMGOTTWILLRECHTEGUNSTERWE
UEBIMMERTREUUNDREDLICHKEIT
haverá em média, em períodos de 26 letras, duas colunas com letras iguais. De facto, para
estes dois textos de comprimento 26, se tivermos:
1
• uma coluna com letras iguais: K = ' 3.85%;
26
21
Assim designado por ter sido inventado por William F. Friedman (1891–1969).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 110
2
• duas colunas com letras iguais: K = ' 7.69%;
26
3
• três colunas com letras iguais: K = ' 11.54%.
26
Assim, para obtermos um valor de K dentro do intervalo esperado (7.5% – 8.3%) terá que
haver, em média, de 26 em 26 letras, duas colunas com letras iguais.
Assim, quando se cifram dois textos com a mesma chave, a propriedade de existir, em
média, duas colunas com letras iguais (de 26 em 26 letras) é preservada. No entanto, se
cifrarmos os textos usando chaves diferentes, então as 26 letras irão incluir, em média,
apenas uma coluna com letras iguais. De facto, se dois textos não forem cifrados usando a
mesma chave eles são completamente aleatórios e, consequentemente, a probabilidade de
1
encontrar duas letras iguais na mesma posição nos dois textos é 26
. Claro que a invariância
referida será mais perceptível se tivermos duas mensagens grandes, tornando-se, assim,
possível dizer se as mensagens foram cifradas usando a mesma ou diferentes chaves. Este
facto reveste-se de particular importância no que se segue.
Segundo Rejewski [Rej84a], num determinado dia, com uma quantidade suficiente de
material, encontram-se, normalmente, entre 10 e 20 pares de mensagens tais que, em cada
par as duas primeiras letras dos indicadores são iguais.
Exemplo 4.5 Duas mensagens em que as duas primeiras letras dos indicadores são iguais.
263 × 26 1
Pr = 6
= 2 ≈ 1, 5 × 10−3 ,
26 26
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 111
ou seja, para que se encontrassem entre 10 e 20 pares naquelas condições seria necessário
um número de mensagens interceptadas num só dia variável entre 6760 e 13520. Ora,
este é um número demasiado grande comparativamente com o que realmente acontecia.
Welchman [Wel01] refere que em 1939 eram interceptadas cerca de 192 mensagens por dia,
1200 em 1942 e 2400 em 1943. Segundo Hill [Hil04], em 1945, já perto do final da Segunda
Guerra Mundial, havia um tráfego diário de cerca de 5000 mensagens. Para além disso, este
método, tal como todos os outros elaborados pelos criptanalistas polacos, foi posto em acção
apenas no período pré-guerra onde o tráfego de mensagens era bastante menor. Convém,
no entanto, relembrar que os indicadores não eram completamente aleatórios (uma vez
que as chaves-de-mensagem também não eram). Este facto, aumentaria consideravelmente
a probabilidade Pr calculada e, assim, podemos concluir que a afirmação de Rejewski
relativamente ao número de mensagens naquelas condições assenta na sua experiência no
trabalho com mensagens interceptadas entre 1932 e 1939. Ainda assim, esse facto não
será relevante para a aplicação do método porque não eram necessárias tantas mensagens
satisfazendo as condições já referidas.
Note-se que sendo as duas mensagens relativas ao mesmo dia, as respectivas chaves-de-
mensagem foram cifradas (duas vezes) usando a mesma configuração da máquina. Como
as duas primeiras letras das duas mensagens são iguais (e consequentemente as quartas
e quintas letras) isto significa que as primeiras duas letras das chaves-de-mensagem das
duas mensagens são iguais. Portanto quando se começou a cifrar as duas mensagens
propriamente ditas os rotores L (o mais lento) e o rotor M (o do meio) estavam nas
mesmas posições nos dois casos. Apenas os rotores N (os mais rápidos) estavam em
posições diferentes quando se começou a cifrar as mensagens.
Assim, a mensagem 2 teria que ser colocada 5 posições deslocada para a direita em relação
à mensagem 1 (ver Fig. 4.8).
Já sabemos que iremos obter um índice de coincidência próximo do valor teórico caso
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 113
as mensagens tenham sido cifradas com a mesma chave22 . Ora, quando escrevemos uma
mensagem debaixo da outra de forma a que as letras cifradas usando os mesmos ajustes dos
rotores apareçam umas debaixo das outras, o sucesso do teste K de Friedman depende da
posição do rotor N na qual a rotação do rotor do meio M ocorre. Essa posição é conhecida
e corresponde à posição dos entalhes (ver pág. 37). Por exemplo, se o rotor I estiver na
posição mais à direita (N ), o rotor M irá rodar quando a letra na janela do rotor N muda
de Q para R. Se for o rotor II no lugar N , a rotação do rotor M irá ocorrer quando a letra
na janela do rotor N muda de E para F. No caso em que tivermos o rotor III na posição
N , o rotor M irá rodar quando na janela do rotor N ocorrer a mudança de V para W.
Depois de escrever uma mensagem por baixo da outra da forma indicada, caso haja sucesso
(K próximo do valor teórico) isso significa que as posições iniciais dos dois rotores N (γ1 e
γ2 ) estão ambas “antes” ou “depois” do entalhe desse rotor. Caso contrário, significa que o
entalhe desse rotor N está entre γ1 e γ2 , ou seja, um dos rotores N já passou a sua posição
de entalhe fazendo o rotor M avançar uma posição.
Desta forma, com mais pares de mensagens satisfazendo as condições referidas, ia-se
observando quais as hipóteses a excluir até encontrar a solução. Por exemplo, no caso
explorado obtendo um valor K próximo do valor teórico já podiamos excluir o rotor II pois
este tem o entalhe na posição F (que fica entre D e I). O rotor I (entalhe em R) e o rotor
III (entalhe em W) ainda são soluções possíveis para a posição mais à direita na ENIGMA.
É relevante salientar que só era possível aplicar este método devido a uma característica dos
rotores da ENIGMA: os entalhes estarem em posições diferentes nos três rotores utilizados
pelo exército alemão até 1938.
Este método, inventado por Rózycki, é o único dos elaborados pelos criptanalistas polacos
baseado em características linguísticas, mais concretamente na frequência da ocorrência
das letras na língua alemã.
22
Para testar este método foram construídos programas que comparam as duas mensagens e calculam o
K (ver Apêndice D.1).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 114
4.3.4 Ciclómetro
Como podemos observar (Fig. 4.9)24 a estrutura principal do Ciclómetro compreende dois
conjuntos de rotores (1 e 2) ligados por fios pelos quais a corrente eléctrica passa. O
rotor N do segundo conjunto está três posições desfasado do rotor N do primeiro, e os
respectivos rotores L e M estão na mesma posição inicial. Para além de um reóstato25
23
Por exemplo, a 1 de Agosto de 1935, a Força Aérea (Luftwaffe) cria a sua própria rede com chaves-
diárias próprias.
24
Esboço do Ciclómetro desenhado pelo próprio Marian Rejewski [Rej84c].
25
Dispositivo utilizado para variar a resistência de um circuito e, assim, aumentar ou diminuir a
intensidade da corrente.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 115
Quando, através de algum interruptor, a corrente era ligada, para além da lâmpada
correspondente também se acendiam as lâmpadas correspondentes às letras pertencentes ao
mesmo ciclo e a outro ciclo do mesmo comprimento. Relembremos que, na característica,
os ciclos do mesmo comprimento ocorrem sempre aos pares (ver pág. 67). Alguém teria
que anotar num cartão as posições dos rotores e o número de lâmpadas que acendiam, e
ordenar os cartões de uma forma específica, por exemplo, pelo comprimento dos ciclos.
Em 1937 o catálogo estava completo. Era formado por 6 caixas (3×2×1 sequências possíveis
de rotores) e em cada caixa existiam 263 = 17576 cartões (posições iniciais possíveis dos
rotores). Assim, o cartão dava a posição inicial dos rotores e a caixa de onde os cartões eram
retirados dava a sequência dos rotores. A obtenção da chave-diária demorava, normalmente,
entre 10 e 20 minutos.
Assim, usando o Ciclómetro foi possível catalogar todos os 105456 conjuntos característicos
cada qual associado à sua estrutura de ciclos.
Desta forma, eram encontradas as posições iniciais dos rotores e a sua ordem na máquina.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 117
Relativamente ao plugboard, este não efectua mais do que uma mera substituição mo-
noalfabética. No máximo, no período em estudo, apenas 16 letras eram alteradas pelo
painel de conexões. Suponhamos que o texto decifrado incluía algo do tipo LIEHLETHIR. O
criptanalista, já com muita experiência de leitura de mensagens do inimigo, reconheceria
imediatamente o típico HEILHITLER, ou seja, os pares L/H e E/I são ligações óbvias do
plugboard. Assim, sem saber quais as ligações do plugboard o texto obtido não seria comple-
tamente correcto, mas seria suficientemente próximo para que o criptanalista “adivinhasse”
quais os pares de letras trocados e decifrasse o resto das mensagens do dia. Mais uma vez,
o plugboard, incluído para complicar a tarefa do inimigo, formava uma capa de protecção
demasiado fraca.
Implementação do Ciclómetro
import p i c k l e
f=open ( " catalogo .pck" , "w" )
def c i c l o m e t e r ( ) :
C= [ ]
f or a in r a n g e ( l e n ( a l f a ) ) :
fo r b in ra n g e ( l e n ( a l f a ) ) :
fo r c in r a n g e ( l e n ( a l f a ) ) :
p i n i t 1=a l f a [ a]+ a l f a [ b]+ a l f a [ c ]
p i n i t 2=num2let ( let2num ( p i n i t 1 [ 0 ] ) + 3) + p i n i t 1 [ 1 : 3 ]
A, B,D = [ ] , [ ] , [ ]
notch=num2let ( let2num ( p i n i t 1 [ 0 ] ) + 7) +
num2let ( let2num ( p i n i t 1 [ 1 ] ) + 7 ) + "A"
for i in r a n g e ( l e n ( a l f a ) ) :
i f a l f a [ i ] not in B :
l e t=a l f a [ i ]
X=[ l e t ]
l i t =’’
while l i t !=X [ 0 ] :
x=enigma ( [ r o t o r ( r o t o r I I I ) , r o t o r ( r o t o r I I ) ,
r o t o r ( r o t o r I ) ] , "AAA " , p i n i t 1 , notch ,
pl ug b o a r d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
w=enigma ( [ r o t o r ( r o t o r I I I ) , r o t o r ( r o t o r I I ) ,
r o t o r ( r o t o r I ) ] , "AAA " , p i n i t 2 , notch ,
pl ug b o a r d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
y=x . egm ( l e t )
z=w. egm ( y )
X. append ( y )
X. append ( z )
l e t=z
l i t =l e t
B=B+X
A. append (X [ 0 : l e n (X) −1])
D=D+A
W=[ l e n (D) ∗ 2 ]
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 119
for i in r a n g e ( l e n (D ) ) :
W=W+[ l e n (D[ i ] ) / 2 ] + [ l e n (D[ i ] ) / 2 ]
C. append (W+[ p i n i t 1 ] )
p i c k l e . dump(C, f )
f . close ()
def let2num (A ) :
return ord (A)−65
def num2let (A ) :
return c h r ( (A%26+65))
A 2 de Novembro de 1937, pouco tempo depois do catálogo produzido pelo Ciclómetro estar
completo, os alemães trocaram o reflector que usavam – reflector A – por um reflector B
e, consequentemente, o Departamento de Cifra polaco teve que recomeçar tudo de novo e
produzir um novo catálogo depois de reconstruir as ligações do novo reflector. Tratava-se
meramente de repetir a tarefa efectuada anteriormente, com a vantagem de já saberem
como o fazer.
A segunda alteração foi bem mais importante para a criptanálise da ENIGMA. Os alemães
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 120
decidiram alterar o sistema de selecção de chaves. Até então, o operador tomava o ajuste-
do-indicador (igual para todas as mensagens do dia) que aparecia nas tabelas de chaves-
diárias, escolhia uma chave para a mensagem e seguia o procedimento já referido várias
vezes. Ou seja, usava a chave-diária (com os rotores, por exemplo, nas posições DIA) para
cifrar a chave-de-mensagem duas vezes (por exemplo MENMEN) originando o indicador. Por
fim, usava a chave-de-mensagem para cifrar a mensagem (ver pág. 63). No entanto, a 15
de Setembro de 1938, o procedimento foi alterado. O operador continuava a escolher a
chave-de-mensagem, mas as posições iniciais dos rotores (ajustes-do-indicador), deixavam
de constar das tabelas de chaves-diárias, sendo o operador a escolhê-las. O operador seguia,
assim, os seguintes passos:
2. Ajustar os rotores para a posição COM e cifrar GER duas vezes (obtendo o indicador);
Desta forma, a partir da data referida, uma chave-diária (constante das tabelas mensais)
consistia no seguinte:
• ligações do plugboard.
Uma vez que já não existiam ajustes-do-indicador comuns a todas as mensagens do dia, o
conjunto característico do dia e, consequentemente, todo o sistema de procura dos tipos
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 121
de ciclos nesses conjuntos deixava de fazer sentido, invalidando, dessa forma, o método
do Ciclómetro. Nem sequer importava saber a posição inicial dos rotores porque não
se conheciam os ajustes dos seus anéis. Assim, as alterações produzidas pelos alemães,
tornaram completamente inúteis os catálogos produzidos pelo Ciclómetro. Esta situação
levou, mais tarde, à invenção da Bomba e das Folhas de Zygalski.
4.3.5 Fêmeas
Como já vimos, a ENIGMA militar consiste numa ENIGMA comercial (ENIGMA sem
plugboard ) que actua como uma permutação E1 para a codificação da primeira letra, uma
permutação E2 para a codificação da segunda letra, etc... juntamente com um plugboard
associado a uma permutação involutiva S.
Pr = SEr S.
Atendendo às nove primeiras letras das mensagens, diz-se que se tem uma fêmea quando
existem letras iguais na 4.a e 7.a , 5.a e 8.a ou 6.a e 9.a posição. Note-se que estas
a a a a a a
correspondem à 1. e 4. , 2. e 5. ou 3. e 6. letras do indicador. Vamos designar as
fêmeas por 1-4, 2-5 ou 3-6 conforme ocorram, respectivamente, na 1.a e 4.a , 2.a e 5.a ou 3.a
e 6.a posição do indicador.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 122
Sendo a e B letras quaisquer tais que aP1 = B, então, a 1.a e a 4.a letra do indicador são
1
iguais se também aP4 = B. Assim, Pr(aP4 = B) = 25
pois a letra a pode ser cifrada numa
de 25 letras (só não pode ser a devido às características do reflector). Desta forma:
1
Pr(duas letras serem iguais)= .
25
Assim,
¡ ¢
1 3
Pr(mensagem conter fêmeas)= 1 − 1 − 25
≈ 0.115.
Por exemplo, se 100 mensagens são enviadas num determinado dia, podemos esperar, em
média, 11 ou 12 fêmeas nos seus indicadores.
Vamos verificar esta probabilidade efectuando um estudo estatístico27 para uma determi-
nada configuração da ENIGMA:
• sem plugboard.
Na Tabela 4.4 está representado o número de vezes que cada letra do alfabeto ocorre como
fêmea 1-4 para a configuração referida. Naturalmente cada letra do alfabeto ocorre como
fêmea de cada tipo (1-4, 2-5 e 3-6) com a mesma frequência28 , e assim a tabela seria
exactamente igual para as fêmeas 2-5 e 3-6.
27
O programa usado para efectuar este estudo encontra-se no Apêndice D.2.
28
Note-se que a frequência não é igual em todas as letras do alfabeto devido aos entalhes dos rotores da
ENIGMA que fazem avançar, em determinados momentos, os rotores do meio e da esquerda.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 123
3 × 11332464
≈ 0.110,
266
Daqui para a frente diremos que duas permutações P e Q permitem fêmeas quando
efectuarem a mesma transformação, ou seja, se existir uma letra x qualquer tal que xP =
xQ.
De acordo com o teorema que se segue, o plugboard não influencia a ocorrência de fêmeas
nas permutações efectuadas pela ENIGMA, ou seja, o plugboard não “cria” nem “destrói”
fêmeas.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 124
Demonstração:
Demonstração:
Sabemos que se C1 e C2 permitem fêmeas então existem letras x e Y quaisquer tais que
xC1 = xC2 = Y . Desta forma, o ciclo (xy) ocorre nas permutações C1 e C2 quando escritas
como produto de ciclos.
temos que C1 e C2 permitem fêmeas se e só se x2i−1 C2 = x2i para algum i tal que 1 ≤ i ≤ 13.
Então,
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 125
α =Pr(C1 e C2 permitirem fêmeas ) = Pr(x2i−1 C2 = x2i para algum i tal que 1 ≤ i ≤ 13)
¡S ¢
= Pr 13 i=1 {x 2i−1 C2 = x 2i }
P13
≤ i=1 Pr(x 2i−1 C2 = x2i )
= 13 Pr(x1 C2 = x2 )
1
= 13 ×
25
13
= ¥
25
1
Desta forma α é menor ou igual a 2
(aproximadamente).
Mas será que as fêmeas nos dão informação suficiente para encontrar as chaves-diárias?
Considerando o caso mais simples, em que as posições iniciais dos rotores de uma ENIGMA
sem plugboard e a sua ordem são conhecidas, existem 263 = 17576 chaves-diárias possíveis
(correspondentes a 263 ajustes possíveis dos anéis). Do Lema 4.1, podemos concluir que
cada fêmea observada exclui cerca de metade das chaves-diárias possíveis. Assumindo
suficiente aleatoriedade, a probabilidade de uma certa chave permitir n fêmeas é cerca de
¡ 1 ¢n
2
. Assim, 10 fêmeas deverão reduzir o número de possíveis chaves por um factor de cerca
¡ 1 ¢10 1
de 2 ≈ 1000 deixando cerca de 17 chaves possíveis a considerar. Na prática, se tivermos
mais do que 18 fêmeas, devemos esperar apenas uma possibilidade para a chave-diária.
29
Note-se que este conjunto de três permutações já não é diário. É diferente para cada uma das posições
iniciais dos rotores uma vez que estas deixaram de ser iguais para todas as mensagens do dia.
30
Consultar o estudo efectuado na pág. 77 acerca do número de singletons nos conjuntos característicos.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 126
4.3.5.1 Bomba
De acordo com o novo procedimento introduzido em Setembro de 1938 (ver pág. 120), válido
até Abril de 1940, uma determinada mensagem (após o preâmbulo não cifrado) começava,
por exemplo, da seguinte forma: RTJWAHWIK . . . , onde RTJ é a posição inicial dos rotores
(ajustes-do-indicador), usada para cifrar a chave-de-mensagem duas vezes, originando o
indicador WAH WIK. Para salientar a presença do ajuste-do-indicador, vamos escrever nestes
casos:
Note-se que desde que os ajustes dos anéis e a ordem dos rotores não fossem do conheci-
mento do inimigo, este não conseguiria decifrar a mensagem mesmo tendo acesso livre aos
ajustes-do-indicador. De facto, o número de configurações possíveis dos rotores continuava
a ser muito grande: 105456 (263 ajustes dos anéis e 6 ordens de rotores) ou, a partir de
Dezembro de 1938, 1054560 (263 ajustes dos anéis e 60 ordens de rotores possíveis).
Objectivo: Encontrar a ordem dos rotores e os ajustes dos anéis. Estes dois componentes
das chaves-diárias eram, como já foi referido, fixos para todas as mensagens do dia31 .
De acordo com Rejewski [Rej84a], com material suficiente, podia acontecer que, num
determinado dia, fossem interceptadas três mensagens com cabeçalhos como:
31
Depois de se conhecer a ordem dos rotores e os ajustes dos anéis, as ligações do plugboard seriam
facilmente encontradas usando porções de texto original conhecido.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 127
ou seja, um conjunto de três mensagens com três fêmeas: uma 1-4, uma 2-5 e uma 4-6.
Para além disso, essas três fêmeas correspondem à mesma letra (neste caso W). Vamos
designar este tipo de fêmeas por fêmeas triplas.
Como veremos de seguida, podemos utilizar as fêmeas triplas para saber qual a ordem dos
rotores na máquina e quais os ajustes dos seus anéis.
Suponhamos, em primeiro lugar, que W é uma das letras que não é alterada pelo plugboard.
Tomando como exemplo a Mensagem 1, se soubessemos quais as posições dos anéis e a
ordem dos rotores, só quando escrevessemos a chave-de-mensagem da Mensagem 1 duas
vezes obteríamos WAH WIK, sendo que em outro caso qualquer se obtinha outra sequência.
Assim, se testarmos todos os rotores com todos os ajustes de anéis e ordens possíveis
obteremos todas as possíveis fêmeas 1-4 e, dessas fêmeas, algumas seriam com a letra W.
Destas, alguma seria por termos acertado na posição correcta dos anéis e na ordem dos
rotores e muitas outras seriam por mera casualidade. No entanto, já não é tão habitual
obter as três fêmeas. Podemos usar esse facto para encontrar a chave-diária. Usando
uma ENIGMA, teríamos que testar todas as configurações possíveis, ou seja, ordem dos
rotores, posições iniciais dos rotores e as orientações dos anéis relativamente ao núcleo
dos rotores. Para cada caso, verificavamos se obtinhamos as três fêmeas. O número de
configurações a testar é de 266 × 6, ou seja, 1853494656. Contudo, o que realmente importa
é a orientação do núcleo do rotor. Que o anel esteja orientado de uma ou outra forma não
é importante, já que é o núcleo do rotor que determina como vão ser permutadas as letras
(sinais eléctricos) que passam pelo seu interior. Assim, poderíamos ajustar os anéis para
uma posição “neutra” (desde que seja sempre a mesma) e testar as 6 × 263 = 105456
possibilidades para as ordens e posições dos rotores.
Designemos por:
Sabemos que:
O que se faz é colocar os rotores nas posições RTJ e comprovar se a letra W origina uma
fêmea 1-4. De seguida colocar nas posições DQX e verificar se obtemos uma fêmea 2-5, e
por fim colocar nas posições HPL e verificar se W origina uma fêmea 3-6. Uma vez que
escolhemos uma posição neutra para os anéis (por exemplo, ZZZ) o mais provável é que o
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 129
resultado seja negativo. Deveria-se, agora, testar outra posição dos anéis o que equivale a
mudar as posições relativas dos rotores. Assim, agora tem que se testar a ENIGMA nas
posições RTK, depois DQY e finalmente na posição HPM, ou seja, as posições originais do rotor
mais à direita deslocadas uma posição. De novo, verificar se a posição RTK origina uma
fêmea 1-4, se a posição DQY uma fêmea 2-5 e se a posição HPM origina uma fêmea 3-6. Desta
forma, vai-se testando todas as 17576 posições iniciais possíveis dos rotores, mantendo as
suas posições relativas nos três casos (Tabela 4.5).
Este processo teria que ser efectuado para cada uma das 6 ordens possíveis dos rotores e,
assim, os criptanalistas polacos necessitavam verificar 6×17576 possibilidades. Para o fazer
mecanicamente, Rejewski inventou um dispositivo criptanalítico a que chamou Bomba.
Uma vez que a tradução da descrição de Rejewski [Rej84a] é pouco clara, e devido à falta
de informação acerca da Bomba33 , a interpretação que se segue do seu funcionamento
surge, essencialmente, da observação da Fig. 4.11 e da análise efectuada por Bauer [Bau02,
pp. 395-397] e Copeland [Cop, pp. 235-244].
32
Esboço da Bomba desenhado por Marian Rejewski [Rej84c].
33
Segundo Copeland [Cop], Rejewski e os seus colegas destruíram, em 1939, as seis Bombas existentes.
O desenho da Fig. 4.11, feito pelo próprio Rejewski, é a única fonte de informação visual acerca do modo
como a máquina foi construída.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 130
A Bomba foi construída a partir de três pares de conjuntos de rotores da ENIGMA, em que
cada um dos três pares procurava um tipo de fêmeas: 1-4, 2-5 ou 3-6. A máquina parava
quando os 18 rotores (6 conjuntos de 3 rotores) se encontravam numa determinada posição
em que eram produzidas fêmeas pelos três pares de conjuntos de rotores em simultâneo.
Note-se que as três fêmeas produzidas não precisam ser iguais.
O operador ajustava a Bomba de acordo com os ajustes dos indicadores RTJ, DQX e HPL:
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 131
De seguida, o motor era ligado e, com os rotores a rodar de forma coerente, a Bomba
ia percorrendo todas as 17576 possibilidades e para cada uma delas testava se a letra W
originava uma fêmea em cada um dos três pares de conjuntos de rotores. Quando isso
acontecia a máquina parava e o operador anotava as posições dos rotores. Se nenhuma
das soluções servisse, a Bomba teria que ser novamente configurada usando uma ordem
de rotores diferente. Segundo Copeland [Cop], a Bomba demorava cerca de doze horas a
percorrer as seis ordens possíveis. No entanto, com as seis Bombas encomendadas à empresa
AVA35 a trabalhar simultaneamente, uma para cada ordem dos rotores, os criptanalistas
polacos reduziram o tempo de procura para cerca de duas horas.
Note-se que o procedimento descrito dava a posição dos rotores para o caso em que os anéis
estavam ajustados à posição neutra ZZZ. Para conseguir a posição real dos anéis bastava
34
Note-se que neste par os rotores M não estão na mesma posição pois estamos a considerar, neste
exemplo, que existe avanço do rotor M quando o rotor N muda de Z para A. Esse avanço teria que ocorrer
em algum momento pois só assim poderiam ser testadas as 263 posições relativas dos rotores.
35
Foi esta mesma empresa, sedeada em Varsóvia, que construiu as réplicas da ENIGMA.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 132
comparar a posição obtida com a que deveríamos ter obtido, ou seja com os ajustes-do-
indicador.
Por exemplo, suponhamos que a Bomba nos dava, no 1.o par, a posição dos rotores DKB para
uma posição dos anéis ZZZ. A posição dos rotores que a mensagem indicava era, recordemos,
RTJ, que corresponde à posição dos anéis desconhecida κλρ. As posições relativas entre o
anel e o rotor dão-nos a orientação do núcleo. Isto significa que DKB corresponde a ZZZ, e
RTJ corresponde a κλρ.
Assim:
Implementação da Bomba
from s e t s import S e t
def bomba ( I1 , I2 , I3 , l e t ) :
I =[ I1 , I2 , I 3 ]
f or i in r a n g e ( pow ( 2 6 , 3 ) ) :
pinit1 =[]
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 133
pinit3 =[]
fo r j in ra n g e ( 3 ) :
pinit2 =[]
A=num2let ( ( let2num ( I [ j ] [ 0 ] ) + i )%26)
B=num2let ( ( let2num ( I [ j ] [ 1 ] ) + ( let2num ( I [ j ] [ 0 ] ) + i )/26)%26)
C=num2let ( ( let2num ( I [ j ] [ 2 ] ) + ( let2num ( I [ j ] [ 1 ] ) +
( let2num ( I [ j ] [ 0 ] ) + i ) /26 ) /26 ) %2 6)
p i n i t 1 . append (A+B+C)
fo r z in r a n g e ( 6 ) :
A=num2let ( ( let2num ( p i n i t 1 [ j ] [ 0 ] ) + z )%26)
B=num2let ( ( let2num ( p i n i t 1 [ j ] [ 1 ] ) +
( let2num ( p i n i t 1 [ j ] [ 0 ] ) + z )/26)%26)
C=num2let ( ( let2num ( p i n i t 1 [ j ] [ 2 ] ) +
( let2num ( p i n i t 1 [ j ] [ 1 ] ) +
( let2num ( p i n i t 1 [ j ] [ 0 ] ) + z ) / 26) / 26) %2 6 )
p i n i t 2 . append (A+B+C)
p i n i t 3 . append ( p i n i t 2 )
L=[]
fo r j in ra n g e ( 3 ) :
notch=num2let ( let2num ( p i n i t 3 [ j ] [ j ] [ 0 ] ) + 7 ) +
num2let ( let2num ( p i n i t 3 [ j ] [ j ] [ 1 ] ) + 7 ) + "A"
x=enigma ( [ r o t o r ( r o t o r I I I ) , r o t o r ( r o t o r I I ) , r o t o r ( r o t o r I ) ] ,
" ZZZ " , p i n i t 3 [ j ] [ j ] , notch , p l ug bo a r d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
a=x . egm ( l e t )
x=enigma ( [ r o t o r ( r o t o r I I I ) , r o t o r ( r o t o r I I ) , r o t o r ( r o t o r I ) ] ,
" ZZZ " , p i n i t 3 [ j ] [ j +3] , notch , pl u g bo a r d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
b=x . egm ( l e t )
i f a==b :
L . append ( 1 )
i f l e n (L)==3:
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 134
return p i n i t 1
def let2num (A ) :
return ord (A)−65
def num2let (A ) :
return c h r ( (A%26+65))
Tal como Sierra [Sie04], podemos abordar o processo descrito de outra forma. Em vez
de considerarmos como input a fêmea tripla (no nosso caso W) e testar para cada um
dos pares de rotores se essa letra origina fêmeas (ver Fig. 4.12) podemos, simplesmente,
procurar todas as fêmeas 1-4, 2-5 e 3-6 e, dos três conjuntos de fêmeas, verificar se há
alguma comum. Neste caso iriamos testar todas as letras do alfabeto em vez de apenas
uma. Uma vez que a implementação deste processo é muito semelhante à anterior e também
pela complexidade ser maior não a iremos apresentar aqui.
Com base na Tabela 4.4 (pág. 123), efectuando o estudo probabilístico da ocorrência de
uma fêmea tripla, usando o programa incluído no Apêndice D.3, conclui-se que:
Apesar de, na realidade, os indicadores não serem aleatórios, esta é uma probabilidade
demasiado baixa, sendo que seriam necessárias cerca de 107 mensagens para se encontrar
três mensagens com fêmea tripla. Ora, como este número era demasiado elevado para
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 135
Tal como já foi referido, a alteração do modo de operação da ENIGMA levou os criptana-
listas polacos a terem que abandonar os métodos aplicados até então e a elaborar novas
formas de atacar as chaves-diárias. Já analisamos um desses novos métodos – a Bomba –
e vamos, agora, descrever e estudar um outro método, inventado por Henryk Zygalski e
designado por Folhas de Zygalski (ou cartões perfurados de Zygalski), que, apesar de
ser manual e muito trabalhoso, revelava-se mais eficaz do que a Bomba. Para além disso,
este método não envolvia pressupostos, como na Bomba, de que certas letras não tinham
sido alteradas pelo plugboard.
Tem-se:
Objectivo: Encontrar a ordem dos rotores e os ajustes dos anéis (fixos para todas as
mensagens do dia).
O método funcionava tendo por base algumas suposições relativas à chave-diária que pos-
teriormente eram confirmadas ou então revelavam-se erradas, sendo nesse caso necessário
testar uma nova configuração. Uma dessas suposições era a ordem dos rotores. Vamos,
então, neste estudo, assumir a ordem de rotores III-II-I. Podemos, facilmente, remover
todos os cabeçalhos com ajustes-do-indicador passíveis de terem originado um avanço do
rotor do meio no decorrer das primeiras seis codificações (cifra da chave-de-mensagem duas
vezes), do modo descrito a seguir.
Tomamos a terceira letra dos cabeçalhos, isto é a posição pN do rotor mais à direita quando
se começa a cifrar a chave-de-mensagem, e a posição do entalhe do mesmo rotor (neste caso
como o rotor mais à direita é o I, temos o entalhe eN = 17 correspondente à letra R). De
seguida, removem-se todos os cabeçalhos cujo pN (posição inicial do rotor N ) verifica:
eN − 6 ≤ pN < eN ,
de modo a que sejam eliminadas as seis posições do rotor N anteriores à posição do entalhe
para que se evite o avanço do rotor do meio (M ) durante as seis codificações sucessivas já
referidas.
Como vamos analisar apenas o caso referente às fêmeas do tipo 1-4, retirando da Tabela 4.6
os cabeçalhos que contêm fêmeas 2-5 e 3-6 e também aqueles cujos ajustes-do-indicador
produziram um avanço do rotor do meio, ficamos com o conjunto de cabeçalhos represen-
tado na Tabela 4.7.
Tabela 4.7: Conjunto de cabeçalhos com fêmeas 1-4 e sem avanço do rotor do meio
Começamos por dar uma primeira ideia muito simples da construção e utilização das Folhas
de Zygalski, antes de descrever o método utilizado pelos criptanalistas polacos.
Vamos supor que temos seis salas, uma para cada sequência possível dos rotores. Em cada
sala, temos três estantes numeradas de 1 a 3, sendo que a estante n.o 1 é relativa às fêmeas
1-4, a estante n.o 2 relativa às fêmeas 2-5 e a estante n.o 3 corresponde às fêmeas 3-6.
Em cada uma das estantes existem 26 prateleiras marcadas com as 26 letras do alfabeto.
Em todas as prateleiras existem 26 caixas também elas etiquetadas com as 26 letras do
alfabeto e cada caixa contém 26 cartões. Temos a seguinte correspondência:
• Cada cartão tem um padrão de 26 × 262 quadrados, sendo que cada um destes corres-
ponde a um dos 263 possíveis ajustes dos anéis. O padrão é igual em todos os cartões
mas cada cartão está perfurado apenas nos quadrados correspondentes aos ajustes
dos anéis que permitem fêmeas de um determinado tipo com os rotores nas posições
correspondentes à prateleira, caixa e cartão (rotores L, M e N respectivamente).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 138
eyd HCGHBY.
Tomando, aleatoriamente, uma das salas, uma vez que, no indicador deste cabeçalho, existe
uma fêmea 1-4, a estante procurada é a n.o 1. Seguimos para a prateleira E e retiramos
da caixa Y o cartão com a letra D (seguindo a sequência das letras do ajuste-do-indicador
eyd). O cartão referido, correspondente às posições iniciais dos rotores EYD com fêmea 1-4,
está perfurado em todos os quadrados correspondentes aos ajustes dos anéis que permitem
fêmeas 1-4 com os rotores nas posições iniciais EYD.
from s e t s import S e t
a l f a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ "
def f e m a l e s ( ind , t i p o f e m e a ) :
’’’tipo femea : 1 (1 -4) , 2 (2 -5) , 3 (3 -6) ’’’
t=t i p o f e m e a −1
L=[]
f or i in a l f a :
fo r j in a l f a :
fo r k in a l f a :
r i n g=i+j+k
indicador =[]
for z in r a n g e ( 6 ) :
A=num2let ( ( let2num ( i n d [ 0 ] ) + z )%26)
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 139
B=num2let ( ( let2num ( i n d [ 1 ] ) ) % 2 6 )
C=num2let ( ( let2num ( i n d [ 2 ] ) ) % 2 6 )
i n d i c a d o r . append (A+B+C)
for w in a l f a :
a=enigma ( [ r o t o r ( r o t o r I I I ) , r o t o r ( r o t o r I I ) ,
r o t o r ( r o t o r I ) ] , r i n g , i n d i c a d o r [ t ] , "WFR " ,
plugboard ( p a i n e l 0 ) , mirror ( r e f l e c t o r B ) )
b=enigma ( [ r o t o r ( r o t o r I I I ) , r o t o r ( r o t o r I I ) ,
r o t o r ( r o t o r I ) ] , r i n g , i n d i c a d o r [ t +3] , " WFR" ,
plugboard ( p a i n e l 0 ) , mirror ( r e f l e c t o r B ) )
i f a . egm (w)==b . egm (w ) :
L . append ( r i n g )
break
return L
def z y g s h e e t s ( l i s t a ) :
Q=f e m a l e s ( l i s t a [ 0 ] [ 0 ] , l i s t a [ 0 ] [ 1 ] )
f or i in r a n g e ( 1 , l e n ( l i s t a ) ) :
L=f e m a l e s ( l i s t a [ i ] [ 0 ] , l i s t a [ i ] [ 1 ] )
P= f i l t e r (lambda x : x in Q, L)
Q=P
return Q
def let2num (A ) :
return ord (A)−65
def num2let (A ) :
return c h r ( (A%26+65))
Vamos analisar, a seguir, o processo de construção e uso das folhas perfuradas utilizadas
por Zygalski e pelos seus colegas.
Relembrando a noção de característica (ver Secção 4.1, pág. 67), sabe-se que letras iguais
em lugares correspondentes no indicador (1-4, 2-5 ou 3-6) designam ciclos singulares (sin-
gletons) na característica. Ou seja, a presença de uma fêmea num determinado indicador
implica a existência de pelo menos um par de ciclos singulares no conjunto característico.
Relembremos que a permutação efectuada pelo plugboard não afecta os comprimentos dos
ciclos na característica, e consequentemente também não afecta a ocorrência ou não de
ciclos singulares.
Assim, seria útil ter um catálogo com todas as posições dos rotores que geram as per-
mutações P1 P4 , P2 P5 e P3 P6 (conjuntos característicos) nas quais os ciclos singulares
ocorrem37 para assim se comparar com os ciclos singulares que ocorrem nos indicadores de
um determinado dia. Foi para estabelecer este tipo de comparações, que Henryk Zygalski
desenvolveu o método que vamos descrever a seguir.
37
Consultando os resultados do estudo efectuado no Apêndice B.2, notamos que apenas cerca de 22%
dos conjuntos característicos não continham qualquer ciclo singular.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 141
Para todas as 26 posições possíveis do rotor L, foram preparadas folhas de papel grosso
(com cerca de 60 × 60 cm), etiquetadas com as letras de A a Z. Como podemos observar na
Fig. 4.13, cada folha continha uma matriz de 51 por 51, os lados de cada folha contendo
as letras de A a Z seguidas das letras de A a Y. Trata-se de um sistema de coordenadas,
no qual as abcissas e as ordenadas marcam as possíveis posições dos rotores M e N ,
respectivamente. Assim, cada coordenada, juntamente com a letra da folha correspondente,
representa uma posição dos rotores e consequentemente a permutação efectuada pela
ENIGMA com essa configuração. Coordenadas associadas a permutações P1 P4 com pontos
fixos, ou seja, posições dos rotores que permitem fêmeas 1-4, são perfuradas38 . Para
preparar essas folhas era utilizada uma ENIGMA com os anéis dos rotores ajustados para
uma posição “neutra” ZZZ, por exemplo, e para cada uma das 26 posições possíveis do rotor
L eram percorridas as 262 posições possíveis dos rotores M e N e testada a existência de
pelo menos uma fêmea 1-4.
38
De acordo com as escassas referências existentes acerca das Folhas de Zygalski ([Rej84c, Rej84a,
Orl03]), as folhas foram perfuradas atendendo apenas às fêmeas 1-4, ou seja, aos singletons no produto
P1 P4 .
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 142
Para cada uma das seis ordens dos rotores existiam 26 Folhas de Zygalski, completando
um catálogo com seis séries e 6 × 26 = 156 folhas no total.
Como podemos observar na Fig. 4.13, em cada folha, quase todas as coordenadas apareciam
repetidas quatro vezes. Assim, cada ponto fixo implicava que, na maior parte das vezes, se
tivesse que perfurar quatro posições, o que era um trabalho muito meticuloso atendendo
ao número de folhas existentes. Com o objectivo de encontrar os ajustes dos anéis, as
folhas seleccionadas eram sobrepostas e movidas numa sequência e maneira apropriada
umas em relação às outras39 , de acordo com um procedimento estrito e bem definido
(que veremos a seguir), fazendo o número de aberturas visíveis decrescer gradualmente.
Se houvesse uma quantidade suficiente de dados disponível, poderia restar apenas uma
abertura, correspondendo, provavelmente, ao caso correcto. A série à qual pertenciam as
folhas dava a indicação da sequência dos rotores. A partir da posição das aberturas e da
letra da folha, conseguiam-se calcular os ajustes dos anéis.
Na prática, o que se fazia era colocar cada uma das folhas em cima das outras mas com um
determinado desfasamento em relação à primeira folha. Este desfasamento tem a ver com os
ajustes dos anéis e era conseguido colocando a coordenada superior esquerda da nova folha
(correspondente à posição AA) em cima da coordenada da primeira folha calculada através
da diferença entre a segunda (respectivamente a terceira) letra do primeiro cabeçalho e a
segunda (respectivamente a terceira) letra do novo cabeçalho. Por exemplo, tomando os
ajustes-dos-indicadores dos dois primeiros cabeçalhos da Tabela 4.7 (eyd e fbg), a folha F
era colocada sobre a folha E sobrepondo a sua posição AA e a posição (Y-B)(D-G), ou seja,
a posição XX da folha E.
• Incidindo uma luz por baixo do conjunto de folhas sobrepostas ela não passa através
das folhas significando que a suposição acerca da ordem dos rotores é falsa;
• A luz passa através das folhas sobrepostas por uma ou várias posições indicando a
existência de uma ou várias soluções possíveis para os ajustes dos anéis nesse dia.
39
Seria pelo facto de terem que mover as folhas umas em relação às outras que cada folha incluía,
praticamente, dois alfabetos.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 143
Essas soluções, juntamente com a letra da folha, representam, após um cálculo muito
simples40 , os possíveis ajustes dos anéis dos rotores para esse dia que seriam testados numa
máquina ENIGMA.
Como já foi referido, as Folhas de Zygalski foram preparadas tendo apenas em conta as
fêmeas 1-4. Isto fazia com que a celeridade do método dependesse sempre do número
de indicadores com fêmeas 1-4 observados em cada dia. A procura seria mais rápida se
também fossem preparadas folhas correspondentes aos outros tipos de fêmeas, passando a
existir, para cada ordem dos rotores, 3 × 26 folhas. Após isto, se intersectassem também os
resultados obtidos da aplicação do mesmo processo aos cabeçalhos com fêmeas 2-5 e 3-6,
o número de soluções diminuiria drasticamente, podendo mesmo haver apenas uma única
solução. No entanto, como veremos mais à frente, no Departamento de Cifra polaco, não
haviam recursos humanos suficientes para preparar mais essas folhas e os criptanalistas
polacos certamente encontraram uma forma de usar as folhas existentes para aplicar
o mesmo processo às fêmeas 2-5 e 3-6. Se repararmos, as permutações P1 e P4 (ver
pág. 65) que a ENIGMA efectua com os rotores na posição ABC, por exemplo, são iguais
às permutações P2 e P5 com os rotores nas posições ABB. Assim, uma determinada letra
que ocorra como fêmea 1-4 numa determinada posição dos rotores irá ocorrer como fêmea
2-5 e 3-6 noutra posição dos rotores. Acreditamos que, usando esse facto, os criptanalistas
polacos utilizaram as folhas preparadas para as fêmeas 1-4 como se estivessem perfuradas
de acordo com as fêmeas 2-5 ou 3-6, bastando para isso perante um ajuste-do-indicador
grb (cujo indicador contém fêmea 2-5), por exemplo, seleccionar a folha G e, em vez de ter
em conta as coordenadas (R,B) para efectuar os cálculos relativos ao desfasamento utilizar
as coordenadas (R,A).
Adoptando agora a abordagem efectuada por Tony Sale [Sal] vamos descrever e implemen-
tar a construção e utilização das Folhas de Zygalski, seguindo um exemplo concreto. Para
isso vamos usar os cabeçalhos presentes na Tabela 4.7 respeitantes apenas a indicadores
com fêmeas 1-4. Nesta implementação, para cada uma das ordens dos rotores, vamos
testando os 26 ajustes possíveis do anel do rotor mais à esquerda até se encontrar o caso
correcto, ou seja, a ordem dos rotores e os ajustes dos anéis da chave-diária.
40
O cálculo efectuado era semelhante ao efectuado para determinar o desfasamento entre as folhas.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 144
1. Primeira decisão: qual a ordem dos rotores e qual o ajuste do anel do rotor mais à
esquerda a testar. Como exemplo, vamos tomar a ordem dos rotores III-II-I (que o
utilizador do programa terá de mudar manualmente) e Q como ajuste do anel (input
da função).
Com estes ajustes para os anéis e com a posição inicial do rotor mais à esquerda em
F, é gerada a folha III-II-I Q F que, da mesma forma que a primeira, está perfurada
nas posições que permitem fêmeas 1-4.
A implementação das Folhas de Zygalski que se segue é baseada na descrição que acabamos
de efectuar. A função principal (ZygalskiSheets) tem como input o ajuste do anel do rotor
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 145
def f e m a l e s ( r i n g , I , t i p o f e m e a ) :
t=t i p o f e m e a −1
M= [ ]
f or i in r a n g e ( l e n ( I ) ) :
L=[]
fo r j in a l f a :
fo r k in a l f a :
p i n i t=j+k+I [ i ] [ 2 ]
indicador =[]
for z in r a n g e ( 6 ) :
A=num2let ( ( let2num ( p i n i t [ 0 ] ) + z )%26)
B=num2let ( ( let2num ( p i n i t [ 1 ] ) ) % 2 6 )
C=num2let ( ( let2num ( p i n i t [ 2 ] ) ) % 2 6 )
i n d i c a d o r . append (A+B+C)
i f i ==0:
r i n g s=’ZZ ’+r i n g
else :
r i n g s=num2let (25+ let2num ( I [ i ] [ 0 ] ) −
let2num ( I [ i − 1 ] [ 0 ] ) ) +
num2let (25+ let2num ( I [ i ] [ 1 ] ) −
let2num ( I [ i − 1 ] [ 1 ] ) ) + r i n g
for w in a l f a :
a=enigma ( [ r o t o r ( r o t o r I I ) , r o t o r ( r o t o r I I I ) ,
rotor ( rotorI ) ] , rings , indicador [ t ] ,
"FWR " , p l u g bo ar d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 146
b=enigma ( [ r o t o r ( r o t o r I I ) , r o t o r ( r o t o r I I I ) ,
r o t o r ( r o t o r I ) ] , r i n g s , i n d i c a d o r [ t +3] ,
"FWR " , p l u g bo ar d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
i f a . egm (w)==b . egm (w ) :
L . append ( j+k )
break
M. append (L)
R=o f f s e t ( i n t e r s e c t (M) , I )
return R
def i n t e r s e c t (M) :
Q=M[ 0 ]
f or i in r a n g e ( 1 , l e n (M) ) :
L=M[ i ]
P= f i l t e r (lambda x : x in Q, L)
Q=P
return Q
def o f f s e t (R, I ) :
S=[]
f or i in r a n g e ( l e n (R ) ) :
x=num2let ( let2num ( I [ 0 ] [ 0 ] ) − let2num (R[ i ] [ 0 ] ) ) +
num2let ( let2num ( I [ 0 ] [ 1 ] ) − let2num (R[ i ] [ 1 ] ) )
S . append ( x )
return S
def Z y g a l s k i S h e e t s ( r i n g , I1 , I2 , I 3 ) :
F1=f e m a l e s ( r i n g , I1 , 1 )
F2=f e m a l e s ( r i n g , I2 , 2 )
F3=f e m a l e s ( r i n g , I3 , 3 )
return i n t e r s e c t ( [ F1 , F2 , F3 ] )
Segundo Rejewski [Rej84a, p.268], uma vez que a preparação das folhas era efectuada ao
mesmo tempo que as “actividades normais” dos criptanalistas, em 15 de Dezembro de 1938
tinham preparadas apenas duas séries de folhas perfuradas (correspondentes a duas ordens
de rotores). Nesse dia, o exército e a força aérea alemã começam a usar dois novos rotores
– IV e V – que entram em vigor para todas as redes de mensagens. Isto significa que o
número de ordens dos rotores aumentou de 6 para 60, sendo, portanto, necessárias 60 séries
de folhas perfuradas.
4.3.6 Conclusão
Como acabou de ser referido, a 15 de Dezembro de 1938 entraram em vigor dois novos
rotores para a ENIGMA. Independentemente da forma como o fizeram, já vimos (pág. 101)
que os criptanalistas polacos rapidamente descobriram as ligações internas dos dois novos
rotores IV e V.
Uma vez que, no início de 1939, a rede S.D. ainda usava o procedimento mais antigo
(ver pág. 63), os criptanalitas polacos ainda conseguiam decifrar mensagens dessa rede
utilizando o Método da Grelha. No entanto, a 1 de Julho de 1939, a rede S.D. mudou
também o seu procedimento, inviabilizando o Método da Grelha.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 148
Até que, em Maio de 1940, o exército e a força aérea alemã alteram, novamente, o seu
procedimento de cifra. Ao mesmo tempo, as forças alemãs ocupam Paris, obrigando a uma
nova retirada dos criptanalistas polacos exilados. Terminou, assim, o trabalho polaco na
criptanálise da ENIGMA. No entanto, a contribuição dos criptanalistas polacos foi enorme
e ajudou ao sucesso posterior dos britânicos na quebra da ENIGMA durante a Segunda
Guerra Mundial.
41
Dilly Knox e Alan Turing, juntamente com Gordon Welchman, trabalharam na criptanálise da
ENIGMA em Bletchley Park durante a Segunda Guerra Mundial.
Capítulo 5
Conclusão
Nesta tese, vimos que a ENIGMA teve que ser quebrada várias vezes ao longo da sua
história. De facto, possuir a máquina não garantia que as mensagens fossem lidas, uma
vez que tudo dependia da forma como os militares alemães a usavam, mais concretamente
do sistema de chaves utilizado. A fraqueza criptográfica não residia, de facto, na máquina
em si, mas no modo como era usada. O facto dos alemães terem usado durante tanto
tempo (até 1940) um sistema de chaves em que a chave individual de cada mensagem era
cifrada duas vezes foi fundamental para a descoberta das ligações internas dos rotores e,
consequentemente, para a elaboração dos ataques às chaves-diárias analisados ao longo
desta tese. Vimos que essa particularidade criava uma redundância nas seis posições do
indicador, o que levou ao estudo dos conjuntos característicos que permitiram encontrar
as chaves-de-mensagem e posteriormente as ligações internas dos rotores. As propriedades
inerentes ao conjunto característico também serviram de base à criação do Método da
Grelha, Método do Relógio e Ciclómetro. A Bomba e as Folhas de Zygalski foram inven-
tadas tendo por base a ocorrência de fêmeas nas, já referidas, seis posições do indicador
resultantes da dupla cifra das chaves-de-mensagem. Segundo Rejewski [Rej84a], teria sido
melhor para os alemães se não tivessem cifrado as chaves-de-mensagem. De facto, se assim
fosse, provavelmente Rejewski nunca teria descoberto as ligações internas dos rotores, pelo
menos através de métodos exclusivamente matemáticos.
Outro aspecto muito importante que contribuiu para o sucesso dos criptanalistas polacos
foi o factor “sorte” referido por vários autores, inclusive pelo próprio Rejewski [Rej84c].
149
CAPÍTULO 5. CONCLUSÃO 150
Nesta tese, tentamos quantificar essa “sorte” através de cálculos probabilísticos e estudos
estatísticos. Para além da “sorte” relativa a maus procedimentos por parte dos operadores
alemães, tais como as escolhas padronizadas de chaves-de-mensagem, os polacos certamente
tiveram essa “sorte” em vários momentos da criptanálise da ENIGMA. Primeiro, era muito
importante ter sempre disponível uma quantidade considerável de mensagens (entre 50 e
100) para determinados dias. Segundo, sem os documentos fornecidos por Asche na altura
certa, o modelo matemático elaborado por Rejewski para deduzir as ligações internas
dos rotores seria impraticável. As probabilidades também ajudavam os criptanalistas
polacos. Analisamos que a existência de singletons nos conjuntos característicos facilitava
muito as tarefas que tinham que efectuar e, de facto, apenas cerca de 22% dos conjuntos
característicos possíveis não continham qualquer ciclo singular. Também a árdua tarefa das
subscrições de modo a encontrar as ligações internas do rotor mais à direita era facilitada
caso as permutações a subscrever fossem do tipo [13,13]. Verificamos que cerca de 26% das
permutações possíveis são desse tipo, e cerca de 20% são de outros dois tipos igualmente
simples de subscrever. Concluimos, também, que o método da Bomba seguia pressupostos
– a ocorrência de fêmeas triplas – muito improváveis. De facto, por mera casualidade
pode ser que num determinado dia tenham sido interceptadas três mensagens com fêmeas
triplas e possa ter sido utilizada a Bomba. Mas e nos outros dias todos? A valorização
da importância da Bomba por parte de Rejewski, aliada à falta de informação sobre esse
dispositivo criptanalítico, leva-nos a pensar que a Bomba possa ter existido mas com um
funcionamento diferente e baseada noutras premissas. Estas incongruências estão presentes
em todas as referências disponíveis, uma vez que todas elas apontam para um única fonte
– Marian Rejewski – com a agravante dos seus artigos estarem em alguns pontos mal
traduzidos.
Apesar das informações muitas vezes contraditórias veiculadas por britânicos e polacos,
as principais fontes sobre a criptanálise da cifra ENIGMA de ambos os lados, Marian
Rejewski e Gordon Welchman, estão de acordo que os sucessos polaco e britânico foram
possíveis devido, entre outras coisas, a um início prematuro do trabalho com a ENIGMA
por parte dos polacos, a continuidade dos esforços criptanalíticos, sorte, adivinhação e erros
criptográficos incríveis dos alemães.
Apesar de, a partir de 1940, os polacos não terem tido influência directa na criptanálise
da ENIGMA, o trabalho desenvolvido em Varsóvia, entre 1932 e 1939, revelou-se um
CAPÍTULO 5. CONCLUSÃO 151
A preparação para cifrar uma mensagem usando a ENIGMA naval era um procedimento
longo e complicado. Era necessário um livro de código que listava grupos de três letras
de acordo com a rede de comunicações (águas nacionais, por exemplo), a lista com as
configurações da máquina (ajustes) para esse mês, tabelas para cifrar pares de letras, e
outros documentos.
Segue-se uma descrição, efectuada por Kahn [Kah91, pp.285-290], de todas as etapas
necessárias para cifrar uma mensagem.
Os primeiros passos, a preparação dos chamados ajustes internos, apenas podiam ser
efectuados por um oficial que deveria fazer o seguinte:
2. Em cada rotor, rodar o anel até à posição prescrita na lista de ajustes e prender o
anel com a cavilha;
3. Colocar os rotores no seu eixo pela ordem estabelecida na lista de ajustes e colocá-los
na máquina.
153
APÊNDICE A. SISTEMA DE CHAVES DA ENIGMA NAVAL 154
1. Rodar os rotores até as três letras especificadas na lista de ajustes aparecerem nas
janelas da cobertura fechada da máquina;
2. Inserir os cabos no plugboard de forma a ligar os pares de letras prescritos pela lista
de ajustes da máquina.
4. Escrever esse indicador de rede nas últimas três casas da primeira linha da coluna
Book Groups (Buchgruppen) do formulário de cifra;
7. Escrever o indicador nas primeiras três casas da segunda linha da coluna Book
Groups;
8. Escolher aleatoriamente uma letra dummy e escrevê-la na última casa dessa linha;
10. Combinar as letras das primeiras casas das duas primeiras linhas num par vertical;
11. Procurar esse par de letras na tabela de digramas e substituí-lo pelo par cifrado
correspondente;
12. Escrever as duas letras desse par cifrado horizontalmente nas primeiras duas casas
da primeira linha da coluna Radio-groups (Funkgruppen) do formulário de cifra;
13. Repetir este processo com os três pares verticais de letras que faltam na coluna Book
Groups, escrevendo-os horizontalmente nas primeiras duas linhas da coluna Radio-
groups;
14. Pressionar, no teclado da ENIGMA, as três letras do original, não cifrado, indica-
dor de rede (passos 2, 3 e 4) e escrever no topo do formulário de cifra as letras
correspondentes às lâmpadas que acenderam (isto torna-se na chave da mensagem);
15. Rodar os rotores até as letras da chave da mensagem aparecerem nas janelas da
cobertura da máquina.
O operador de cifra deveria, então, escrever o texto original na coluna Book Groups do
formulário sem quebras de palavra, colocando X ou Y para separar frases. Para cifrar
a mensagem eram necessárias duas pessoas. Enquanto uma pressionava as letras do
texto original, a outra ia escrevendo, na coluna Radio-groups, as letras correspondentes
às lâmpadas que acendiam (estas eram as letras do criptograma que iria ser enviado). No
final, o operador de cifra deveria fazer uma cruz atravessando a coluna Book Groups para
evitar que esta fosse transmitida por engano. Os indicadores cifrados eram transmitidos
antes da mensagem cifrada. Por sua vez, o destinatário, possuindo os livros de código e
as tabelas, deveria decifrar os indicadores, recuperar a chave da mensagem e decifrar a
mensagem.
APÊNDICE A. SISTEMA DE CHAVES DA ENIGMA NAVAL 156
157
APÊNDICE B. ESTUDO DOS SINGLETONS 158
N.o de singletons
0 2 4 6 8 10 12 14 16 18 20
III-II-I 4226 6053 4321 2006 709 206 47 7 1 0 0
II-III-I 4201 5922 4363 2097 758 186 44 5 0 0 0
III-I-II 3221 5537 4690 2613 1030 351 94 32 7 1 1
I-III-II 3190 5426 4671 2643 1138 377 108 19 3 0 0
II-I-III 4195 6097 4233 2084 717 178 52 15 3 2 0
I-II-III 4268 6123 4161 2094 674 197 49 8 2 0 0
Total 23301 35158 26439 13537 5026 1495 394 86 16 3 1 105456
Total (%) 22, 10 33, 34 25, 07 12, 84 4, 77 1, 42 0, 37 0, 08 0, 02 0, 003 0, 001 100
N.o de singletons
0 2 4 outros
Total 23301 35158 26439 105476
Total (%) 12, 24 18, 47 13, 89 55, 40
Apêndice C
C.1 Programas
while z !=X [ 0 ] :
y=V[U[ p ] ]
159
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 160
X. append ( y )
p=y
z=p
B=B+X
A. append (X [ 0 : l e n (X) −1])
i f k==0:
return A
else :
fo r i in ra n g e ( l e n (A ) ) :
D. update ( l i s t 2 d i c t (A[ i ] , 0 ) )
return D
def l i s t 2 d i c t (L , p ) :
D={}
c=l e n (L)
f or r in r a n g e ( c ) :
D[ L [ ( 2 ∗ r)%c ] ] = L [ ( 2 ∗ r+1)%c ]
i f p==0:
D[ L [ ( 2 ∗ r+1)%c ] ] = L [ ( 2 ∗ r+2)%c ]
return D
def c e s a r ( p ) :
W={}
f or j in r a n g e ( l e n ( a l f a ) ) :
W[ a l f a [ j ] ] = a l f a [ ( j+p )%26]
return W
def p r o d u t o s (H, k ) :
D, B = [ ] , [ ]
f or i in r a n g e ( l e n (H ) ) :
R, A, Z = [ ] , [ ] , [ ]
fo r j in ra n g e ( 6 ) :
x=prod ( c e s a r (− j −1) , prod (H[ i ] [ j ] , c e s a r ( j + 1 ) , 1 ) , 1 )
R. append ( x )
A. append ( prod (R [ 0 ] , R [ 1 ] , 0 ) )
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 161
A. append ( prod (R [ 1 ] , R [ 2 ] , 0 ) )
A. append ( prod (R [ 2 ] , R [ 3 ] , 0 ) )
A. append ( prod (R [ 3 ] , R [ 4 ] , 0 ) )
A. append ( prod (R [ 4 ] , R [ 5 ] , 0 ) )
B . append (A)
fo r i in ra n g e ( l e n (A ) ) :
C= [ ]
fo r j in r a n g e ( l e n (A[ i ] ) ) :
C. append ( l e n (A[ i ] [ j ] ) )
Z . append (C)
D. append (Z)
i f k==1:
return D
else :
return B
def c y c l e s l e n (A ) :
D={}
B=D. v a l u e s ( )
C=D. ke ys ( )
f or i in r a n g e ( l e n (A ) ) :
A[ i ] [ 0 ] . s o r t ( )
i f A[ i ] [ 0 ] in B :
fo r j in r a n g e ( l e n (B ) ) :
i f B [ j ]==A[ i ] [ 0 ] :
s=C[ j ]
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 162
C[ j ]= s+1
else :
B . append (A[ i ] [ 0 ] )
C. append ( 1 )
E= [ ]
f or k in r a n g e ( l e n (B ) ) :
E . append ( (B [ k ] , C[ k ] ) )
return E
C.1.2 Subscrições
No que concerne à escrita dos produtos uns debaixo dos outros, esta foi possível utilizando
o programa seguinte:
import copy
def r o t a t ( ( l 0 , l 1 ) , i n d e x ) :
i f index >=1:
l 1=l 1 [ 1 : ] + [ l 1 [ 0 ] ]
index −=1
return ( ( l 0 , l 1 ) , i n d e x )
def s u b s c r ( l 1 , l 2 ) :
def s o r t l e n ( x , y ) :
i f l e n ( x)> l e n ( y ) : return 1
e l i f l e n ( x)< l e n ( y ) : return −1
e l s e : return 0
def n o r m a l l s t ( l s t ) :
lst . sort ( sortlen )
ltmp , sltmp = [ ] , [ ]
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 163
l a s t=l e n ( l s t [ 0 ] )
fo r l in l s t :
i f l e n ( l )== l a s t :
sltmp . append ( l )
else :
ltmp . append ( sltmp )
sltmp =[ l ]
l a s t=l e n ( l )
ltmp . append ( sltmp )
return ltmp
delete ()
return RSubscr ( [ ] , n o r m a l l s t ( l 1 ) , n o r m a l l s t ( l 2 ) )
L=[]
def RSubscr ( done , l 1 , l 2 ) :
global L
if l1 :
P a i r S u b s c r ( done , l 1 [ 0 ] , l 2 [ 0 ] , l 1 [ 1 : ] , l 2 [ 1 : ] )
else :
L . append ( done )
return L
def d e l e t e ( ) :
global L
L=[]
def l s t 2 s t r i n g (R ) :
T= [ ]
f or i in r a n g e ( l e n (R ) ) :
fo r j in ra n g e ( l e n (R[ i ] [ 0 ] ) ) :
T. append ( (R[ i ] [ 0 ] [ j ] ,R[ i ] [ 1 ] [ j ] ) )
T. s o r t ( )
s=""
f or k in r a n g e ( 2 6 ) :
s=s+T[ k ] [ 1 ]
return s
def t o t s t r i n g (X ) :
T= [ ]
f or i in r a n g e ( l e n (X ) ) :
P=l s t 2 s t r i n g (X[ i ] )
T. append (P)
return T
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 165
def c o m p a r e s t r i n g (W, Z ) :
G= [ ]
f or i in r a n g e ( l e n (W) ) :
fo r j in ra n g e ( l e n (Z ) ) :
i f W[ i ]==Z [ j ] :
G. append (W[ i ] )
return G
def e x e c u t e (X ) :
A=s u b s c r (X [ 0 ] , X [ 1 ] )
U=t o t s t r i n g (A)
B=s u b s c r (X [ 1 ] , X [ 2 ] )
V=t o t s t r i n g (B)
C=s u b s c r (X [ 2 ] , X [ 3 ] )
Q=t o t s t r i n g (C)
D=s u b s c r (X [ 3 ] , X [ 4 ] )
Y=t o t s t r i n g (D)
return c o m p a r e s t r i n g ( c o m p a r e s t r i n g ( c o m p a r e s t r i n g (U,V) ,Q) ,Y)
def d i c t a l f a ( a l f a ) :
D={}
f or i in a l f a :
D[ i ]= i
return D
def s t r i n g 2 d i c t ( S ) :
D={}
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 166
f or i in r a n g e ( l e n ( a l f a ) ) :
D[ a l f a [ i ] ] = S [ i ]
L=[]
K=D. k e y s ( )
V=D. v a l u e s ( )
return D
def h i p o t ( S ) :
A=d i c t a l f a ( a l f a )
X=s t r i n g 2 d i c t ( S )
Y=prod (A, X, 0 )
T=s u b s c r (Y , [ c e s a r 1 ] )
U=t o t s t r i n g (T)
return U
III-II-I
[13, 13] 4862
[1, 1, 12, 12] 2418
[2, 2, 11, 11] 1404
[3, 3, 10, 10] 1352
[4, 4, 9, 9] 728
[1, 1, 2, 2, 10, 10] 702
[5, 5, 8, 8] 702
[6, 6, 7, 7] 598
[1, 1, 1, 1, 11, 11] 572
[1, 1, 4, 4, 8, 8] 442
[1, 1, 3, 3, 9, 9] 390
[1, 1, 5, 5, 7, 7] 312
[2, 2, 5, 5, 6, 6] 234
[1, 1, 6, 6, 6, 6] 208
[2, 2, 3, 3, 8, 8] 208
[1, 1, 1, 1, 3, 3, 8, 8] 182
[2, 2, 4, 4, 7, 7] 156
[2, 2, 2, 2, 9, 9] 156
[1, 1, 1, 1, 4, 4, 7, 7] 130
[3, 3, 4, 4, 6, 6] 130
[3, 3, 5, 5, 5, 5] 130
[1, 1, 3, 3, 3, 3, 6, 6] 104
[3, 3, 3, 3, 7, 7] 104
[1, 1, 2, 2, 5, 5, 5, 5] 104
[1, 1, 1, 1, 1, 1, 10, 10] 104
[1, 1, 2, 2, 4, 4, 6, 6] 78
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 168
[1, 1, 1, 1, 3, 3, 3, 3, 5, 5] 78
[1, 1, 2, 2, 3, 3, 7, 7] 78
[1, 1, 1, 1, 2, 2, 4, 4, 5, 5] 78
[1, 1, 1, 1, 2, 2, 9, 9] 78
[1, 1, 1, 1, 5, 5, 6, 6] 52
[1, 1, 1, 1, 1, 1, 1, 1, 9, 9] 52
[1, 1, 3, 3, 4, 4, 5, 5] 52
[1, 1, 1, 1, 1, 1, 4, 4, 6, 6] 52
[1, 1, 2, 2, 2, 2, 3, 3, 5, 5] 52
[1, 1, 1, 1, 1, 1, 2, 2, 8, 8] 52
[1, 1, 1, 1, 3, 3, 4, 4, 4, 4] 52
[1, 1, 2, 2, 2, 2, 8, 8] 52
[1, 1, 1, 1, 2, 2, 3, 3, 6, 6] 52
[2, 2, 2, 2, 2, 2, 3, 3, 4, 4] 52
[4, 4, 4, 4, 5, 5] 26
[1, 1, 1, 1, 2, 2, 2, 2, 7, 7] 26
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4] 26
[1, 1, 2, 2, 2, 2, 4, 4, 4, 4] 26
[2, 2, 3, 3, 3, 3, 5, 5] 26
[2, 2, 2, 2, 3, 3, 6, 6] 26
[1, 1, 1, 1, 1, 1, 3, 3, 7, 7] 26
[1, 1, 4, 4, 4, 4, 4, 4] 26
[2, 2, 3, 3, 4, 4, 4, 4] 26
17576
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 169
II-III-I
[13, 13] 4186
[1, 1, 12, 12] 2054
[2, 2, 11, 11] 1118
[4, 4, 9, 9] 910
[1, 1, 2, 2, 10, 10] 884
[5, 5, 8, 8] 858
[1, 1, 1, 1, 11, 11] 780
[3, 3, 10, 10] 702
[6, 6, 7, 7] 624
[1, 1, 5, 5, 7, 7] 442
[1, 1, 3, 3, 9, 9] 364
[1, 1, 4, 4, 8, 8] 338
[2, 2, 3, 3, 8, 8] 312
[1, 1, 6, 6, 6, 6] 286
[1, 1, 1, 1, 3, 3, 8, 8] 286
[1, 1, 1, 1, 2, 2, 9, 9] 260
[3, 3, 3, 3, 7, 7] 260
[2, 2, 4, 4, 7, 7] 234
[3, 3, 4, 4, 6, 6] 234
[1, 1, 2, 2, 3, 3, 7, 7] 182
[2, 2, 5, 5, 6, 6] 182
[1, 1, 1, 1, 1, 1, 10, 10] 182
[1, 1, 1, 1, 5, 5, 6, 6] 182
[1, 1, 2, 2, 2, 2, 8, 8] 156
[1, 1, 2, 2, 4, 4, 6, 6] 156
[2, 2, 2, 2, 9, 9] 156
[1, 1, 2, 2, 2, 2, 3, 3, 5, 5] 130
[1, 1, 3, 3, 3, 3, 6, 6] 130
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 170
[3, 3, 5, 5, 5, 5] 104
[2, 2, 2, 2, 3, 3, 6, 6] 104
[1, 1, 1, 1, 2, 2, 4, 4, 5, 5] 78
[2, 2, 2, 2, 4, 4, 5, 5] 78
[1, 1, 3, 3, 4, 4, 5, 5] 78
[1, 1, 1, 1, 2, 2, 3, 3, 6, 6] 52
[1, 1, 1, 1, 1, 1, 2, 2, 8, 8] 52
[1, 1, 1, 1, 2, 2, 2, 2, 7, 7] 52
[2, 2, 3, 3, 3, 3, 5, 5] 52
[1, 1, 2, 2, 5, 5, 5, 5] 52
[1, 1, 1, 1, 1, 1, 4, 4, 6, 6] 26
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8] 26
[1, 1, 1, 1, 4, 4, 7, 7] 26
[1, 1, 2, 2, 3, 3, 3, 3, 4, 4] 26
[4, 4, 4, 4, 5, 5] 26
[3, 3, 3, 3, 3, 3, 4, 4] 26
[2, 2, 2, 2, 2, 2, 7, 7] 26
[1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3] 26
[1, 1, 1, 1, 1, 1, 3, 3, 7, 7] 26
[2, 2, 3, 3, 4, 4, 4, 4] 26
[1, 1, 1, 1, 3, 3, 3, 3, 5, 5] 26
17576
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 171
III-I-II
[13, 13] 4394
[1, 1, 12, 12] 2470
[2, 2, 11, 11] 1248
[3, 3, 10, 10] 1118
[5, 5, 8, 8] 832
[4, 4, 9, 9] 728
[1, 1, 3, 3, 9, 9] 572
[1, 1, 2, 2, 10, 10] 546
[1, 1, 4, 4, 8, 8] 494
[1, 1, 1, 1, 11, 11] 442
[1, 1, 5, 5, 7, 7] 364
[6, 6, 7, 7] 338
[2, 2, 3, 3, 8, 8] 338
[1, 1, 3, 3, 4, 4, 5, 5] 286
[2, 2, 4, 4, 7, 7] 234
[3, 3, 3, 3, 7, 7] 208
[1, 1, 6, 6, 6, 6] 208
[2, 2, 5, 5, 6, 6] 208
[1, 1, 1, 1, 3, 3, 8, 8] 182
[1, 1, 1, 1, 2, 2, 9, 9] 156
[1, 1, 1, 1, 1, 1, 10, 10] 156
[3, 3, 4, 4, 6, 6] 130
[2, 2, 2, 2, 3, 3, 6, 6] 130
[1, 1, 2, 2, 4, 4, 6, 6] 130
[1, 1, 2, 2, 3, 3, 7, 7] 130
[1, 1, 2, 2, 5, 5, 5, 5] 130
[1, 1, 1, 1, 5, 5, 6, 6] 130
[3, 3, 5, 5, 5, 5] 104
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 172
[1, 1, 1, 1, 1, 1, 2, 2, 8, 8] 78
[1, 1, 2, 2, 2, 2, 8, 8] 78
[1, 1, 3, 3, 3, 3, 6, 6] 78
[2, 2, 2, 2, 9, 9] 78
[1, 1, 4, 4, 4, 4, 4, 4] 78
[1, 1, 1, 1, 4, 4, 7, 7] 78
[2, 2, 3, 3, 3, 3, 5, 5] 78
[1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4] 52
[1, 1, 2, 2, 2, 2, 3, 3, 5, 5] 52
[1, 1, 2, 2, 3, 3, 3, 3, 4, 4] 52
[4, 4, 4, 4, 5, 5] 52
[1, 1, 1, 1, 2, 2, 4, 4, 5, 5] 52
[1, 1, 1, 1, 2, 2, 3, 3, 6, 6], 26 26
[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 6, 6] 26
[1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3] 26
[1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 6, 6] 26
[2, 2, 2, 2, 4, 4, 5, 5] 26
[1, 1, 2, 2, 2, 2, 4, 4, 4, 4] 26
[3, 3, 3, 3, 3, 3, 4, 4] 26
[1, 1, 1, 1, 3, 3, 3, 3, 5, 5] 26
[2, 2, 2, 2, 3, 3, 3, 3, 3, 3] 26
[1, 1, 1, 1, 1, 1, 4, 4, 6, 6] 26
[1, 1, 3, 3, 3, 3, 3, 3, 3, 3] 26
[1, 1, 1, 1, 1, 1, 3, 3, 7, 7] 26
[1, 1, 2, 2, 2, 2, 2, 2, 6, 6] 26
[2, 2, 2, 2, 2, 2, 7, 7] 26
17576
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 173
I-III-II
[13, 13] 5044
[1, 1, 12, 12] 2262
[2, 2, 11, 11] 1118
[4, 4, 9, 9] 1066
[5, 5, 8, 8] 884
[3, 3, 10, 10] 858
[1, 1, 2, 2, 10, 10] 676
[6, 6, 7, 7] 624
[1, 1, 3, 3, 9, 9] 520
[1, 1, 4, 4, 8, 8] 442
[1, 1, 5, 5, 7, 7] 442
[1, 1, 1, 1, 11, 11] 338
[1, 1, 6, 6, 6, 6] 312
[2, 2, 5, 5, 6, 6] 260
[2, 2, 3, 3, 8, 8] 260
[1, 1, 1, 1, 2, 2, 9, 9] 182
[1, 1, 2, 2, 4, 4, 6, 6] 156
[1, 1, 1, 1, 1, 1, 10, 10] 156
[1, 1, 1, 1, 4, 4, 7, 7] 156
[1, 1, 3, 3, 4, 4, 5, 5] 156
[2, 2, 4, 4, 7, 7] 130
[4, 4, 4, 4, 5, 5] 130
[1, 1, 2, 2, 5, 5, 5, 5] 130
[1, 1, 2, 2, 3, 3, 7, 7] 130
[3, 3, 5, 5, 5, 5] 104
[2, 2, 2, 2, 9, 9] 104
[1, 1, 1, 1, 5, 5, 6, 6] 104
[3, 3, 3, 3, 7, 7] 104
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 174
[2, 2, 3, 3, 3, 3, 5, 5] 78
[3, 3, 4, 4, 6, 6] 78
[1, 1, 1, 1, 3, 3, 8, 8] 52
[2, 2, 2, 2, 2, 2, 7, 7] 52
[1, 1, 2, 2, 2, 2, 3, 3, 5, 5] 52
[1, 1, 2, 2, 2, 2, 8, 8] 52
[1, 1, 1, 1, 2, 2, 3, 3, 6, 6] 52
[2, 2, 2, 2, 4, 4, 5, 5] 26
[1, 1, 1, 1, 3, 3, 4, 4, 4, 4] 26
[2, 2, 2, 2, 2, 2, 3, 3, 4, 4] 26
[1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 5, 5] 26
[1, 1, 2, 2, 3, 3, 3, 3, 4, 4] 26
[1, 1, 1, 1, 2, 2, 4, 4, 5, 5] 26
[2, 2, 2, 2, 3, 3, 6, 6] 26
[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3] 26
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3] 26
[1, 1, 4, 4, 4, 4, 4, 4] 26
[1, 1, 3, 3, 3, 3, 6, 6] 26
[1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 5, 5] 26
17576
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 175
II-I-III
[13, 13] 4212
[1, 1, 12, 12] 2132
[2, 2, 11, 11] 1274
[3, 3, 10, 10] 1248
[1, 1, 2, 2, 10, 10] 884
[4, 4, 9, 9] 780
[6, 6, 7, 7] 728
[1, 1, 1, 1, 11, 11] 702
[5, 5, 8, 8] 676
[1, 1, 3, 3, 9, 9] 390
[1, 1, 4, 4, 8, 8] 390
[1, 1, 5, 5, 7, 7] 390
[2, 2, 3, 3, 8, 8] 364
[2, 2, 4, 4, 7, 7] 286
[2, 2, 2, 2, 9, 9] 260
[1, 1, 1, 1, 2, 2, 9, 9] 208
[1, 1, 2, 2, 4, 4, 6, 6] 208
[1, 1, 2, 2, 3, 3, 7, 7] 182
[3, 3, 5, 5, 5, 5] 156
[1, 1, 1, 1, 1, 1, 10, 10] 156
[1, 1, 1, 1, 5, 5, 6, 6] 156
[2, 2, 5, 5, 6, 6] 156
[1, 1, 6, 6, 6, 6] 156
[3, 3, 4, 4, 6, 6] 156
[4, 4, 4, 4, 5, 5] 130
[3, 3, 3, 3, 7, 7] 104
[1, 1, 1, 1, 4, 4, 7, 7] 104
[1, 1, 2, 2, 2, 2, 8, 8] 104
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 176
[1, 1, 2, 2, 5, 5, 5, 5] 104
[1, 1, 3, 3, 4, 4, 5, 5] 104
[1, 1, 1, 1, 3, 3, 8, 8] 104
[1, 1, 3, 3, 3, 3, 6, 6] 78
[2, 2, 2, 2, 2, 2, 7, 7] 78
[1, 1, 1, 1, 2, 2, 2, 2, 7, 7] 52
[1, 1, 1, 1, 1, 1, 4, 4, 6, 6] 52
[2, 2, 3, 3, 4, 4, 4, 4] 52
[1, 1, 1, 1, 3, 3, 4, 4, 4, 4] 26
[2, 2, 3, 3, 3, 3, 5, 5] 26
[1, 1, 1, 1, 2, 2, 3, 3, 6, 6] 26
[2, 2, 2, 2, 3, 3, 6, 6] 26
[1, 1, 1, 1, 2, 2, 4, 4, 5, 5] 26
[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 6, 6] 26
[1, 1, 2, 2, 2, 2, 3, 3, 5, 5] 26
[2, 2, 2, 2, 4, 4, 5, 5] 26
[1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3] 26
[1, 1, 1, 1, 1, 1, 3, 3, 7, 7] 26
17576
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 177
I-II-III
[13, 13] 4238
[1, 1, 12, 12] 2574
[2, 2, 11, 11] 1404
[1, 1, 2, 2, 10, 10] 988
[3, 3, 10, 10] 962
[1, 1, 1, 1, 11, 11] 780
[6, 6, 7, 7] 754
[4, 4, 9, 9] 702
[1, 1, 5, 5, 7, 7] 468
[5, 5, 8, 8] 442
[1, 1, 3, 3, 9, 9] 416
[2, 2, 2, 2, 9, 9] 312
[3, 3, 4, 4, 6, 6] 286
[1, 1, 4, 4, 8, 8] 260
[1, 1, 3, 3, 4, 4, 5, 5] 234
[2, 2, 5, 5, 6, 6] 234
[1, 1, 6, 6, 6, 6] 208
[2, 2, 3, 3, 8, 8] 182
[2, 2, 4, 4, 7, 7] 182
[1, 1, 1, 1, 3, 3, 8, 8] 156
[1, 1, 2, 2, 3, 3, 7, 7] 156
[3, 3, 3, 3, 7, 7] 156
[1, 1, 1, 1, 5, 5, 6, 6] 156
[1, 1, 2, 2, 4, 4, 6, 6] 104
[1, 1, 2, 2, 2, 2, 8, 8] 104
[1, 1, 1, 1, 2, 2, 3, 3, 6, 6] 78
[2, 2, 3, 3, 4, 4, 4, 4] 78
[4, 4, 4, 4, 5, 5] 78
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 178
[1, 1, 3, 3, 3, 3, 6, 6] 78
[1, 1, 2, 2, 5, 5, 5, 5] 78
[1, 1, 1, 1, 1, 1, 5, 5, 5, 5] 52
[1, 1, 1, 1, 1, 1, 3, 3, 7, 7] 52
[1, 1, 1, 1, 1, 1, 4, 4, 6, 6] 52
[1, 1, 2, 2, 3, 3, 3, 3, 4, 4] 52
[1, 1, 1, 1, 4, 4, 7, 7] 52
[1, 1, 1, 1, 1, 1, 10, 10] 52
[2, 2, 2, 2, 2, 2, 7, 7] 52
[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 7, 7] 52
[2, 2, 2, 2, 4, 4, 5, 5] 52
[1, 1, 4, 4, 4, 4, 4, 4] 26
[1, 1, 1, 1, 2, 2, 2, 2, 7, 7] 26
[1, 1, 1, 1, 3, 3, 3, 3, 5, 5] 26
[1, 1, 1, 1, 2, 2, 9, 9] 26
[2, 2, 2, 2, 2, 2, 3, 3, 4, 4] 26
[1, 1, 2, 2, 2, 2, 2, 2, 6, 6] 26
[3, 3, 5, 5, 5, 5] 26
[1, 1, 1, 1, 3, 3, 4, 4, 4, 4] 26
[1, 1, 1, 1, 1, 1, 2, 2, 8, 8] 26
[2, 2, 3, 3, 3, 3, 5, 5] 26
17576
Apêndice D
Outros programas
179
APÊNDICE D. OUTROS PROGRAMAS 180
def kappa ( a , b ) :
c=0
f or i in r a n g e ( l e n ( a ) ) :
i f a [ i ]==b [ i ] :
c=c+1
return f l o a t ( c ) / l e n ( a )
A função femalesearch que se segue determina o número de vezes que cada letra ocorre
como fêmea 1-4, 2-5 e 3-6.
def f e m a l e s e a r c h ( ) :
L=[{} ,{} ,{}]
f or i in a l f a :
fo r j in a l f a :
fo r k in a l f a :
i n d=i+j+k
indicador =[]
for z in r a n g e ( 6 ) :
A=num2let ( ( let2num ( i n d [ 0 ] ) + z )%26)
B=num2let ( ( let2num ( i n d [ 1 ] ) +
( let2num ( i n d [ 0 ] ) + z )/26)%26)
C=num2let ( ( let2num ( i n d [ 2 ] ) + ( let2num ( i n d [ 1 ] ) +
( let2num ( i n d [ 0 ] ) + z ) / 26 ) /2 6 ) %2 6)
i n d i c a d o r . append (A+B+C)
notch=num2let ( ( let2num ( i n d [0])+7)%26)+
num2let ( ( let2num ( i n d [1])+7)%26)+ i n d [ 2 ]
APÊNDICE D. OUTROS PROGRAMAS 181
for p in r a n g e ( 3 ) :
f o r w in a l f a :
a=enigma ( [ r o t o r ( r o t o r I ) , r o t o r ( r o t o r I I ) ,
r o t o r ( r o t o r I I I ) ] , "ZZZ " , i n d i c a d o r [ p ] ,
notch , p l ug b o a r d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
b=enigma ( [ r o t o r ( r o t o r I ) , r o t o r ( r o t o r I I ) ,
r o t o r ( r o t o r I I I ) ] , "ZZZ " ,
i n d i c a d o r [ p +3] , notch ,
pl ug bo a r d ( p a i n e l 0 ) ,
mirror ( r e f l e c t o r B ))
x=a . egm (w)
y=b . egm (w)
i f x==y :
i f x in L [ p ] . k e y s ( ) :
s=L [ p ] [ x ]
L [ p ] [ x]= s+1
else :
L [ p ] [ x]=1
return aux (L)
def aux (L ) :
f or i in r a n g e ( 3 ) :
fo r j in L [ i ] :
s=L [ i ] [ j ]
L [ i ] [ j ]= s ∗26∗26
return L
def let2num (A ) :
return ord (A)−65
def num2let (A ) :
return c h r ( (A%26+65))
O programa que se segue tem como input o output da função femalesearch do programa
anterior, ou seja, uma lista com o número de vezes que cada letra ocorre como fêmea 1-4,
2-5 e 3-6.
def triplefemSTAT (A ) :
P={}
f or j in A [ 0 ] . k ey s ( ) :
i f j in A [ 1 ] . k ey s ( ) :
i f j in A [ 2 ] . k e y s ( ) :
P [ j ]=6∗( f l o a t (A [ 0 ] [ j ] ) / ( pow ( 2 6 , 6 ) ) ) ∗
( f l o a t (A [ 1 ] [ j ] ) / ( pow ( 2 6 , 6 ) ) ) ∗
( f l o a t (A [ 2 ] [ j ] ) / ( pow ( 2 6 , 6 ) ) )
print P
s=0
f or i in P :
s=s+P [ i ]
return s
183
APÊNDICE E. TABELA CRONOLÓGICA 184
[Bau02] Friedrich Bauer. Decrypted Secrets: Methods and Maxims of Cryptology. Springer-
Verlag, Berlim, third edition, 2002.
[Kah91] David Kahn. Seizing the Enigma: The Race to Break the German U-Boat Codes,
1939-1943. Arrow Books, London, 1991.
[KS04] Wladdyslaw Kozaczuk and Jerzy Straszak. Enigma. How the Poles Broke the
Nazi Code. Hippocrene Books, 2004.
[KW84] Christopher Kasparek and Richard Woytak. Polish and British Methods of
Solving Enigma. In Enigma [Koz84], pages 292–318.
[Mil01] A. Ray Miller. The cryptographic mathematics of enigma, 2001. Web page
disponível em http://www.nsa.gov/publications/publi00004.cfm (consultada em
22/11/06).
[Mon04] Bill Monsen. Codebreaking and secret weapons in world war two, 2004. Web page
disponível em http://home.earthlink.net/ nbrass1/1enigma.htm (consultada em
22/11/06).
187
REFERÊNCIAS 188
[Orl03] Kris Gaj & Arkadiusz Orlowski. Facts and myths of enigma: breaking stereotypes.
In Eurocrypt 2003, Varsovia, Maio 2003. International Association for Cryptologic
Research (IACR).
[Per05] Tom Perera. The story of the enigma: History, technology and deciphering, 2005.
Web page disponível em http://w1tp.com/enigma/ (consultada em 22/11/06).
[Rej84a] Marian Rejewski. How the Polish mathematicians Broke Enigma. In Enigma
[Koz84], pages 246–270.
[Rej84b] Marian Rejewski. Summary of Our Methods for Reconstructing ENIGMA and
Reconstructing Daily Keys, and German Efforts to Frustrate Those Methods. In
Enigma [Koz84], pages 241–244.
[Rej84c] Marian Rejewski. The Mathematical Solution of the Enigma Cipher. In Enigma
[Koz84], pages 272–290.
[Sal] Tony Sale. Codes and ciphers in the second world war: The history, science
and engineering of cryptanalysis in world war two. Web page disponível em
http://www.codesandciphers.org.uk/ (consultada em 22/11/06).
[Sie04] Arturo Sierra. Enigma: La solución polaca. Publicado em: El boletín ENIGMA
(n.o 18, n.o 24 e n.o 28), 2003–2004. Web page em http://www.ugr.es/ aquiran/-
cripto/cripto.htm (consultada em 22/11/06).
[Sup40] Supreme Command of the Navy, Berlim. The Enigma General Procedure,
1940. Disponível na web page de Tony Sale http://www.codesandciphers.org.uk/
(consultada em 22/11/06).
REFERÊNCIAS 189
[Tum03] Jirí Tuma. Permutations groups and the solution of german enigma cipher.
Technical report, Charles University, Prague, Czech Republic, 2003.
[Wel01] Gordon Welchman. The Hut Six Story: Breaking the Enigma Codes. M&M
Baldwin, 2001.
190
Índice
191
ÍNDICE 192
S.D. (Sicherheitsdienst), 50
Scherbius, 45–47, 183
singletons (ou ciclos singulares), 29, 77
subscrição, 84
texto original, 25
transposição, 30
Turing, 148