Você está na página 1de 192

Bruno Flávio de Castro Ribeiro

A Criptanálise da ENIGMA:
1932 - 1939

Departamento de Matemática Pura


Departamento de Matemática Aplicada
Faculdade de Ciências da Universidade do Porto
Fevereiro / 2007
2
Bruno Flávio de Castro Ribeiro

A Criptanálise da ENIGMA:
1932 - 1939

Tese submetida à Faculdade de Ciências da Universidade do


Porto para obtenção do grau de Mestre em Engenharia Matemática orientada por António
Machiavelo e Rogério Reis

Departamento de Matemática Pura


Departamento de Matemática Aplicada
Faculdade de Ciências da Universidade do Porto
Fevereiro / 2007
4
Agradecimentos

Ao terminar a elaboração desta dissertação, considero ser a altura de expressar a


minha gratidão e o reconhecimento a todos os que tornaram possível a sua concretização.
Aqui fica o meu mais sincero agradecimento por tudo, em especial...

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

... a todos os professores da licenciatura e do mestrado que contribuíram para a minha


formação académica.

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

A todos muito obrigado.

5
6
Resumo

O objectivo principal desta tese consiste em estudar e implementar computacional-


mente a criptanálise da cifra ENIGMA efectuada, entre 1932 e 1939, por um grupo de
matemáticos polacos.

No período que antecedeu a Segunda Guerra Mundial, os criptanalistas polacos Marian


Rejewski, Henryk Zygalski e Jerzy Rózycki desenvolveram um conjunto de métodos cripta-
nalíticos que permitiram decifrar um volume considerável de mensagens interceptadas. Esta
tese, incide, essencialmente, na abordagem matemática que esses criptanalistas adoptaram
na tentativa de quebrar a cifra ENIGMA alemã. De entre os métodos desenvolvidos
destacam-se a dedução das ligações internas dos rotores da ENIGMA, o Ciclómetro, a
Bomba e as Folhas de Zygalski.

A nível computacional são apresentadas implementações, em Python, da cifra ENIGMA


e dos seus ataques mais importantes. Paralelamente, é testada a eficácia de cada um desses
ataques, bem como a validade dos pressupostos em que esses se baseavam.

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.1 Criptografia: algumas noções . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.2 Permutações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3 A máquina ENIGMA 31

3.1 Descrição da máquina e dos seus componentes . . . . . . . . . . . . . . . . 31

3.1.1 Rotores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.1.2 Reflector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.1.3 Plugboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.2 Evolução da máquina e do seu modo de utilização . . . . . . . . . . . . . . 45

3.3 Uma implementação da cifra ENIGMA . . . . . . . . . . . . . . . . . . . . 52

11
4 A contribuição polaca 59

4.1 Chaves de mensagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

4.2 Ligações internas dos rotores . . . . . . . . . . . . . . . . . . . . . . . . . . 80

4.3 Chaves diárias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

4.3.1 Método da Grelha . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

4.3.2 Método ANX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

4.3.3 Método do Relógio . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

4.3.4 Ciclómetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

4.3.5 Fêmeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

4.3.5.1 Bomba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

4.3.5.2 Folhas de Zygalski . . . . . . . . . . . . . . . . . . . . . . 135

4.3.6 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

5 Conclusão 149

A Sistema de chaves da ENIGMA naval 153

B Estudo dos singletons 157

B.1 Programa que calcula o número de singletons . . . . . . . . . . . . . . . . 157

B.2 N.o de singletons na característica . . . . . . . . . . . . . . . . . . . . . . . 158

C Ligações internas dos rotores 159

C.1 Programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

C.1.1 Produtos UV, VW, WX, XY, YZ . . . . . . . . . . . . . . . . . . . 159

C.1.2 Subscrições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

12
C.2 Tipo de ciclos de UV, VW, WX, XY, YZ . . . . . . . . . . . . . . . . . . . 167

D Outros programas 179

D.1 Método do Relógio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

D.2 Número de fêmeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

D.3 Fêmeas triplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

E Tabela cronológica 183

Referências 187

13
14
Lista de Tabelas

2.1 Atribuição de um código às letras . . . . . . . . . . . . . . . . . . . . . . . 27

3.1 Ligações internas dos rotores (retirado de [Sal]) . . . . . . . . . . . . . . . 35

3.2 Posição dos entalhes nos rotores . . . . . . . . . . . . . . . . . . . . . . . . 37

3.3 Ligações internas dos reflectores (retirado de [Sal]) . . . . . . . . . . . . . . 40

4.1 Indicadores observados (retirado de [Bau02]) . . . . . . . . . . . . . . . . . 66

4.2 Tipos de ciclos mais frequentes . . . . . . . . . . . . . . . . . . . . . . . . 90

4.3 Soluções para N CN −1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

4.4 Número de fêmeas 1-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

4.5 Posições relativas dos rotores na Bomba . . . . . . . . . . . . . . . . . . . 129

4.6 Cabeçalhos de 28 mensagens . . . . . . . . . . . . . . . . . . . . . . . . . . 136

4.7 Cabeçalhos com fêmeas 1-4 . . . . . . . . . . . . . . . . . . . . . . . . . . 137

15
16
Lista de Figuras

3.1 ENIGMA militar com três rotores ([Cop]) . . . . . . . . . . . . . . . . . . 32

3.2 Rotor ([Bau02]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.3 Rotores ([Sal]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.4 Os três rotores móveis da ENIGMA ([Bau02]) . . . . . . . . . . . . . . . . 35

3.5 Avanço dos rotores (http://enigmamachine.quickseek.com/, em Nov. 2006) 37

3.6 Plugboard (http://en.wikipedia.org/, em Dez. 2006) . . . . . . . . . . . . . 42

3.7 Circuito eléctrico da ENIGMA (adaptado de [Cop]) . . . . . . . . . . . . . 43

3.8 Logótipo ENIGMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.1 Os três criptanalistas polacos (http://en.wikipedia.org/, em Nov. 2006) . . 60

4.2 Tabela com chave-diária ([Bau02]) . . . . . . . . . . . . . . . . . . . . . . . 61

4.3 Circuito eléctrico antes e depois do rotor N avançar ([Rej84c]) . . . . . . . 69

4.4 N.o de singletons nas características para a sequência II-I-III . . . . . . . . 78

4.5 N.o de singletons nas características para todas as sequências de rotores . . 78

4.6 Representação do teclado da ENIGMA . . . . . . . . . . . . . . . . . . . . 80

4.7 Método da Grelha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

4.8 Método do Relógio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

17
4.9 Ciclómetro ([Rej84c]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

4.10 Circuito eléctrico do Ciclómetro ([Rej84c]) . . . . . . . . . . . . . . . . . . 116

4.11 Bomba ([Rej84c]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

4.12 Esquema de funcionamento da Bomba (adaptado de [Bau02]) . . . . . . . . 131

4.13 Folha de Zygalski ([Rej84c]) . . . . . . . . . . . . . . . . . . . . . . . . . . 141

A.1 Cabeçalho de um formulário de cifra ([Sal]) . . . . . . . . . . . . . . . . . . 154

A.2 Formulário de cifra ([Sup40]) . . . . . . . . . . . . . . . . . . . . . . . . . . 156

18
Lista de Programas

3.1 Componentes da ENIGMA . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

3.2 ENIGMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.1 As seis permutações diárias . . . . . . . . . . . . . . . . . . . . . . . . . . 70

4.2 Ciclómetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

4.3 Bomba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

4.4 Folhas de Zygalski (uma primeira ideia) . . . . . . . . . . . . . . . . . . . . 138

4.5 Folhas de Zygalski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

B.1 Número de singletons nos conjuntos característicos . . . . . . . . . . . . . 157

C.1 Produto de permutações . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

C.2 Número de produtos de cada tipo . . . . . . . . . . . . . . . . . . . . . . . 161

C.3 Subscrições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

C.4 Unicidade das subscrições . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

C.5 Soluções para N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

D.1 Índice de coincidência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

D.2 Número de fêmeas de cada tipo . . . . . . . . . . . . . . . . . . . . . . . . 180

D.3 Probabilidade de ocorrência de fêmeas triplas . . . . . . . . . . . . . . . . 182

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 3 é feita uma descrição da máquina ENIGMA, analisando os seus principais


componentes: rotores, reflector e plugboard. É, também, analisada a evolução da máquina
e do seu modo de utilização no período de 1932 a 1939 e, para finalizar, é apresentada uma
implementação em Python da cifra ENIGMA.

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.

No Apêndice A é efectuada a descrição do complexo sistema de chaves de uma das versões


da ENIGMA.

Nos Apêndices B, C e D encontram-se os programas auxiliares e os resultados de estudos


estatísticos efectuados para compreender a validade e a eficácia de aplicação dos ataques
desenvolvidos pelos criptanalistas polacos.

No Apêndice E é apresentada uma tabela cronológica dos eventos relacionados com o


desenvolvimento, uso e criptanálise da ENIGMA.
24
Capítulo 2

Preliminares

2.1 Criptografia: algumas noções

Criptografia (kriptós = oculto; grápho = grafia) é o conjunto de princípios e técnicas


utilizadas para cifrar uma mensagem, de modo a manter a sua confidencialidade.

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 termo cifra designa, também, o algoritmo criptográfico que efectua as transformações


entre o texto original e o criptograma.

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

Definição 2.1 (Cifra) Dados dois conjuntos V e W de caracteres e K um conjunto


qualquer, uma cifra é uma função φ : (V ∗ , K) −→ W ∗ , em que as funções induzidas de V ∗
em W ∗ dadas por φk (x) := φ(x, k) são bijectivas. À função inversa φ−1 : (W ∗ , K) −→ V ∗
chamamos decifração. Os elementos de K são designados por chaves.

25
CAPÍTULO 2. PRELIMINARES 26

Observação: O receptor autorizado do criptograma deverá ser capaz de obter o texto


original sem ambiguidades.

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.

A criptanálise é o conjunto de técnicas e métodos utilizados para obter, de um modo


eficiente, o texto original sem ter acesso à chave e sem ter que testar exaustivamente
todas as chaves possíveis. O termo ataque designa a aplicação da criptanálise a uma cifra.
Alguém não autorizado que intercepte o criptograma pode, de facto, tentar recuperar o
texto original. Neste caso, diz-se que há uma tentativa de quebrar a cifra.

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

Definição 2.2 (Permutação) Uma permutação P sobre um conjunto A é uma função


bijectiva de A em A. O valor da permutação P num ponto a ∈ A será designado por aP .

Definição 2.3 (Permutação involutiva) Uma permutação P diz-se involutiva quando


∀ a, b ∈ A, aP = b ⇒ bP = a.

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

do alfabeto, ou seja, uma bijecção do conjunto A = {a, b, c, . . . , z} nele próprio, em que


cada letra é substituída por uma outra.

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

Tabela 2.1: Atribuição de um código às letras

Exemplo 2.1 (Cifra de César) A cifra de César, Ck , consiste na substituição da letra


associada a um inteiro r pela letra associada a r + k (mod 26), onde k é um inteiro que
representa a chave do algoritmo.

Assim, se escolhermos, por exemplo, k = 10, a letra b (cujo código é 1) é transformada na


letra l (que corresponde a 1 + 10 = 11) e v (cujo código é 21) é transformada em f (que
corresponde a 21 + 10 ≡ 31 ≡ 5 (mod 26)).

Da mesma forma, para decifrar, a permutação inversa de Ck transforma a letra correspon-


dente ao inteiro r na letra correspondente ao inteiro r − k (mod 26).

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:

• Se X, Y ∈ SA , representaremos por XY , como habitualmente, a composição Y ◦ X


ou o produto de permutações. Ou seja, XY deve ser entendido como Y após X,
CAPÍTULO 2. PRELIMINARES 28

sendo que a primeira a efectuar a transformação é a permutação que está mais à


esquerda (neste caso X);

– Em geral, o produto de permutações não é comutativo, ou seja, XY 6= Y X;

– O produto de permutações é associativo, ou seja, X(Y Z) = (XY )Z,


∀ X, Y, Z ∈ SA ;

• A permutação inversa de uma permutação P , é a permutação designada por P −1 ,


que satisfaz a propriedade aP P −1 = a, para todo o a ∈ A;

• O par (SA , ◦) constitui um grupo: o grupo das permutações de A em A.

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.

Exemplo 2.2 (Produto de permutações) Consideremos as permutações X e Y escri-


tas numa representação matricial:

à !
abcdefghijklmnopqrstuvwxyz
X= ,
ekmflgdqvzntowyhxuspaibrcj

à !
abcdefghijklmnopqrstuvwxyz
Y =
ajdksiruxblhwtmcqgznpyfvoe

Temos que XY transforma, por exemplo:

• a letra a em s:
X /e Y /s;
a

• a letra f em r:
X /g Y /r;
f

e assim sucessivamente.

Obtemos, dessa forma,


CAPÍTULO 2. PRELIMINARES 29

à !
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

É mais conveniente ter os caracteres originais ou os codificados ordenados por ordem


alfabética, conforme se queira cifrar ou decifrar. Por exemplo:

à !
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”.

É também muito usada a representação de uma permutação em ciclos disjuntos.

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

Escreve-se, neste caso, P = (i1 i2 i3 . . . ik ).

Observações:

• Se k = 1 então P = (i1 ) = id designa-se por ciclo singular ou singleton;


CAPÍTULO 2. PRELIMINARES 30

• Se k = 2 então P diz-se uma transposição. Neste caso, P 2 = P P = id e P = P −1 .

Definição 2.6 (Ciclos disjuntos) Seja P = (i1 i2 i3 . . . ik ) ∈ SA . Chama-se suporte do


ciclo P ao conjunto {i1 i2 i3 . . . ik }. Dois ciclos P, T ∈ SA dizem-se disjuntos se os seus
suportes o forem.

Observação: Dois ciclos P, T disjuntos comutam, ou seja, P T = T P .

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 permutação (2.2), tem um ciclo de comprimento 12, um de comprimento 2, um de


comprimento 3, um de comprimento 1 e um ciclo de comprimento 8. Vamos representar a
estrutura de ciclos da permutação (2.2) por [1, 2, 3, 8, 12].
Capítulo 3

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

3.1 Descrição da máquina e dos seus componentes

A máquina ENIGMA, que podemos observar na Fig. 3.1, é um dispositivo electromecânico


que contém um teclado de 26 letras situado imediatamente abaixo de um painel de 26
lâmpadas que mostra a correspondente letra cifrada para a tecla premida no teclado1 .
Acima destes, encontram-se três rotores colocados num mesmo eixo e, junto ao rotor mais
à esquerda, um quarto rotor, estacionário, designado por reflector. Os três rotores têm
gravadas as letras do alfabeto e uma delas é visível através de pequenas janelas existentes
na cobertura da ENIGMA. Ao lado das três janelas existem também três ranhuras pelas
quais sobressaem as rodas dentadas dos rotores, permitindo, com a cobertura fechada,
1
Este era um aspecto um pouco primitivo da máquina que confiava ao operador a função de anotar as
letras correspondentes às lâmpadas que acendiam tanto na cifra como na decifração.

31
CAPÍTULO 3. A MÁQUINA ENIGMA 32

(a) ENIGMA com a cobertura fechada (b) ENIGMA com a cobertura levantada

Figura 3.1: ENIGMA militar com três rotores

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.

Assim, a ENIGMA militar é constituída, essencialmente, por:

• teclado;

• painel de lâmpadas;

• plugboard (ou steckerboard );

• disco de entrada;

• rotores;
CAPÍTULO 3. A MÁQUINA ENIGMA 33

• reflector (ou umkehrwalze).

De seguida, serão analisados os componentes mais importantes da máquina: rotores,


reflector e plugboard.

3.1.1 Rotores

Figura 3.2: Rotor

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.

Como representado na Fig. 3.3 temos então:

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

Figura 3.3: Rotores

1. Roda dentada usada para rodar os rotores até uma determinada posição inicial;

2. Anel com o alfabeto (ou numerado de 1 a 26);

3. Eixo sobre o qual os rotores rodam;

4. Cavilha que prende o anel com o alfabeto ao núcleo do rotor (5);

5. Núcleo do rotor que contém as ligações eléctricas internas entre os pinos (6) e os
discos de contacto (7);

6. Pinos que efectuam o contacto com o rotor anterior;

7. Discos embutidos no núcleo para efectuar contacto com os pinos do rotor seguinte;

8. Entalhe anexado ao anel com o alfabeto.

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

Tabela 3.1: Ligações internas dos rotores

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.

Figura 3.4: Os três rotores móveis da ENIGMA

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

Isto assegura que a transformação criptográfica é diferente em cada posição, produzindo


uma cifra de substituição polialfabética. O rotor da direita é o único que avança sempre
uma posição por cada vez que uma tecla é premida, sendo por isso, muitas vezes, designado
por rotor rápido.

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.

Designemos por rotor 1, 2 e 3 os rotores da direita, meio e esquerda respectivamente, bem


como por linguete 1, 2 e 3 os linguetes correspondentes. Os três linguetes empurram ao
mesmo tempo. Observando a Fig. 3.5, no rotor 1, a roda dentada está engrenada, e avança

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

Figura 3.5: Mecanismo de avanço dos rotores

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.

Os cinco rotores básicos da ENIGMA (I a V) têm um entalhe cada, enquanto que os


rotores navais adicionais VI, VII e VIII têm dois entalhes. Como já vimos, os entalhes
são os pontos nos quais a viragem ocorre, ou seja, são as posições nas quais os rotores do
meio e da esquerda avançam por cada volta completa do rotor da direita e do rotor do
meio respectivamente. Na Tabela 3.2, é descrito o movimento dos rotores produzido pelos
entalhes5 .

Rotor Entalhe Efeito


I R se o rotor passa de Q para R o rotor seguinte avança
II F se o rotor passa de E para F o rotor seguinte avança
III W se o rotor passa de V para W o rotor seguinte avança
IV K se o rotor passa de J para K o rotor seguinte avança
V A se o rotor passa de Z para A o rotor seguinte avança
VI, VII, VIII A, N se o rotor passa de Z para A ou de M para N o rotor
seguinte avança

Tabela 3.2: Posição dos entalhes nos rotores

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.

Importa ainda referir que, historicamente, as mensagens tinham, em média, cerca de


duzentas letras, logo não havia risco de repetir qualquer posição dos três rotores com
uma única mensagem. Isto também garantia que o rotor da esquerda avançava no máximo
uma posição.

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

Mecanicamente, o “duplo-passo” ocorre pela seguinte razão:

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

Tabela 3.3: Ligações internas dos reflectores

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

• Deve ser involutivo , ou seja, se o reflector transforma x em Y, então também


transforma y em X.

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.

Assim, a ENIGMA, como um todo, tem duas propriedades muito importantes:

• Nenhuma letra é cifrada nela própria7 ;


7
Também podemos dizer que a ENIGMA actua como uma permutação sem pontos fixos.
CAPÍTULO 3. A MÁQUINA ENIGMA 42

• É 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

Figura 3.6: 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

de saída para as lâmpadas, deixando inalterada a propriedade involutiva da ENIGMA.


Mesmo com o plugboard, a ENIGMA militar continuava, também, a manter a propriedade
de nenhuma letra poder ser cifrada nela própria.

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

Figura 3.7: Circuito eléctrico da ENIGMA

Na Fig. 3.7, quando a tecla O é premida no teclado, o plugboard transforma a letra O


na letra N uma vez que o encaixe O está ligado ao encaixe N. No que respeita ao disco
de entrada, uma vez que este efectua a permutação identidade, a letra N não é alterada.
Esta, de seguida, é transformada em Y sequencialmente pelas ligações internas dos rotores
e reflector e novamente pelos rotores. O disco de entrada volta a não alterar a letra e
uma vez que, no plugboard, o encaixe Y está conectado ao encaixe Q, então a letra Y é
CAPÍTULO 3. A MÁQUINA ENIGMA 44

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.

Uma chave para a ENIGMA é constituida por um conjunto de parâmetros relativos à


configuração inicial da máquina.

A combinatória das chaves Consideremos uma ENIGMA com um determinado refle-


ctor e com 3 rotores a escolher de um conjunto de 5. Podemos escolher os 3 rotores e a sua
ordem no eixo de 5 × 4 × 3 = 60 formas distintas. Cada um dos rotores pode estar numa
de 26 posições. Estes parâmetros originavam já:

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:

60 × 263 × 262 = 712882560.

Falta ainda considerar o plugboard que permite trocar pares de letras arbitrários.

O número de possíveis configurações do plugboard no qual k pares de letras são ligadas é


dado por:

à !à ! à !
1 26 24 26 − 2(k − 1) 26!
d(k) = ... =
k! 2 2 2 2k (26 − 2k)! k!

Ligando, por exemplo, 10 pares de letras temos:


CAPÍTULO 3. A MÁQUINA ENIGMA 45

26!
≈ 1, 51 × 1014
210 × 6! × 10!
maneiras distintas de efectuar as 10 ligações.

Para k = 5, . . . , 13 tem-se:

d(5) ≈ 5, 02 × 109 d(6) ≈ 1 × 1011 d(7) ≈ 1, 31 × 1012


d(8) ≈ 1, 08 × 1013 d(9) ≈ 5, 38 × 1013 d(10) ≈ 1, 51 × 1014
d(11) ≈ 2, 06 × 1014 d(12) ≈ 1, 03 × 1014 d(13) ≈ 7, 91 × 1012
Note-se que o valor máximo de combinações possíveis é atingido quando se ligam 11 pares
de letras no plugboard.

Considerando, então, a configuração já referida, com 10 pares de letras ligadas no plugboard


(uma das configurações mais usadas), temos que o número total de chaves possíveis é o
produto:

60 × 263 × 262 × 1, 51 × 1014 ≈ 1, 08 × 1023 .

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

3.2 Evolução da máquina e do seu modo de utilização

1918

A 15 de Abril, em carta dirigida à Marinha Imperial Alemã [Kah91, pp. 31-33], Arthur
Scherbius (1878-1929) escreve que:

“[a máquina] irá evitar qualquer repetição na sequência de letras quando a


CAPÍTULO 3. A MÁQUINA ENIGMA 46

mesma letra é pressionada milhões de vezes... A decifração de um telegrama


é também impossível se uma máquina cair em mãos não autorizadas, uma vez
que requer um pré-arranjo da chave do sistema.”

O mecanismo que o inventor alemão Scherbius propunha à marinha era um protótipo


de uma máquina multirotor. No seu memorando explicava o princípio do rotor e o seu
principal argumento: a impraticabilidade do inimigo solucionar a mensagem mesmo que
tenha uma máquina na sua posse.

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

Figura 3.8: Logótipo ENIGMA


CAPÍTULO 3. A MÁQUINA ENIGMA 47

O mecanismo comercial incorporava quatro melhoramentos significativos em relação à


máquina proposta por Scherbius em 1918:

• Rotores móveis, permitindo ao operador colocá-los numa ordem qualquer na máquina;

• 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

Começam a produzir-se as primeiras máquinas ENIGMA para a marinha (“Kriegsmarine


ENIGMA”). As principais diferenças em relação à ENIGMA comercial de 1923 são as
seguintes:

• A ordem das letras no teclado e no painel de lâmpadas deixa de ser “QWERT...”


(como na ENIGMA comercial) passando a figurar por ordem alfabética;

• Diferentes ligações internas dos rotores;

• Passa-se a escolher 3 rotores de um conjunto de 5.


CAPÍTULO 3. A MÁQUINA ENIGMA 48

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

A 15 de Julho, o exército coloca a ENIGMA ao seu serviço com a designação de Radio


Cipher M.

Alterações principais ao sistema naval:

• Teclado standard QWERT;

• Existem apenas 3 rotores;

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

Importa notar que há um certo retrocesso em relação à ENIGMA naval de 1926, em


particular o modo de operação da ENIGMA do exército era bastante mais simples que o da
marinha e, uma vez que a “Wehrmacht ENIGMA” apenas usava 3 rotores, a combinatória
envolvida na cifra era menor que na ENIGMA naval.
CAPÍTULO 3. A MÁQUINA ENIGMA 49

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

Adolf Hitler renuncia ao Tratado de Versalhes8 ao reintroduzir o serviço militar obriga-


tório na Alemanha. Como necessitavam cada vez mais de máquinas de cifra, os alemães
continuaram a comprar ENIGMAS. Outras organizações também adquirem a ENIGMA:

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

os caminhos de ferro, o Abwehr (Serviço de Espionagem) e o Sicherheitsdienst ou S.D.


(serviços secretos do partido Nazi).

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

A 2 de Novembro entra em funcionamento um novo reflector (reflector B).

1938

A 15 de Setembro, os alemães mudam todo o procedimento de cifra e de transmissão das


chaves para a ENIGMA do exército. Até essa data, as instruções básicas eram as seguintes:
o operador coloca os rotores nas suas posições iniciais estabelecidas para esse dia e efectua
as ligações no plugboard. De seguida, selecciona, livremente, uma sequência de três letras
que cifra duas vezes. Desta forma obtém seis letras que coloca no início de cada mensagem.
Por fim, ajusta os rotores para a sequência de três letras escolhida por ele e procede com
a cifra da mensagem. Após essa data, o operador é obrigado a escolher três letras que
coloca de forma não cifrada no início de cada mensagem. Depois, coloca os rotores nessas
posições, escolhe outras três letras e cifra a sequência duas vezes, colocando as seis letras
resultantes a seguir às três primeiras letras.

Em Dezembro, os rotores IV e V passam a ser também utilizados na ENIGMA do exército.

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.

Os alemães apercebem-se que o volume de mensagens trocadas começava a ser muito


grande, dando mais oportunidades ao inimigo para quebrar a cifra. Para atenuar esse
perigo, tinham que reduzir o número de mensagens cifradas com as mesmas posições dos
CAPÍTULO 3. A MÁQUINA ENIGMA 51

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.

Paralelamente a estes melhoramentos na segurança criptográfica, são também efectuadas


alterações nas medidas de segurança física do sistema. Para além da mudança de procedi-
mentos para evitar erros humanos no uso da ENIGMA, a marinha alemã considera também
tornar mais difícil a possibilidade da captura de material criptográfico pelo inimigo. Os
alemães não temiam a captura da máquina nem dos rotores pois “é assumido que o inimigo
tem à sua disposição a máquina incluindo todos os rotores” [Kah91, p.47]. De facto, as
Forças Armadas Alemãs adoptam a máquina inventada por Scherbius porque acreditavam
que, mesmo na posse de uma ENIGMA capturada, um inimigo não é capaz de decifrar
mensagens em tempo útil, pois o número de chaves a testar é demasiado grande. A
preocupação residia no facto de os livros de código com as tabelas de configurações da
máquina serem também capturados, o que faria com que as mensagens fossem facilmente
decifradas pelo inimigo, pelo menos durante a validade da tabela e do livro de código.
Por estas razões a marinha começa a imprimir os seus documentos criptográficos em tinta
solúvel, tornando-se documentos muito fáceis de destruir em caso de ataque. Ainda assim,
é elaborado um sistema de recurso caso o inimigo capturasse a máquina e os respectivos
rotores, o livro de código e as tabelas com as configurações diárias da ENIGMA.

O método, que era memorizado ou escrito de forma camuflada, consistia em alterar os


rotores e as suas posições iniciais estabelecidas, invalidando, assim, os documentos captu-
rados [Kah91, p.47]. Analisemos, de seguida, um exemplo de uma implementação desse
método. As alterações eram sugeridas por uma determinada palavra. Uma delas era
ALDEBARAN (o nome de uma estrela). O operador associava a essa palavra a sequência
“R 3, L 456”, onde R significava rotor e L letra. Assim, sabia que, quando ALDEBARAN
estivesse em vigor, devia adicionar 3 ao número do rotor, ou seja, quando na lista surgia o

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.

Todas estas medidas complementavam o complexo sistema de chaves da marinha alemã


que está incluído com todos os pormenores no Apêndice A. No entanto, a compreensão
desse sistema de chaves não será relevante para o estudo efectuado nesta tese, uma vez
que, como já foi referido, este se baseia na ENIGMA do exército cujo modo de operação é
bem mais simples que o da marinha.

3.3 Uma implementação da cifra ENIGMA

Segue-se uma implementação, em Python, da cifra ENIGMA. Esta implementação tem


em conta aspectos que são muitas vezes “esquecidos” noutros simuladores, tais como, os
avanços produzidos pelos entalhes e o fenómeno do “duplo-passo”.

Primeiramente descrevem-se os três principais componentes da ENIGMA: rotores, reflector


e plugboard e verifica-se se estes estão bem definidos.

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

def __init__ ( s e l f , perm ) :


s e l f . t a b l e ={}
s e l f . t a b l e i n v ={}
foo = 0
fo r i in perm :
s e l f . table [ foo ] = s e l f . tord ( i )
f o o=f o o+1
s e l f . verify ()
fo r j in ra n g e ( l e n ( s e l f . t a b l e . k e y s ( ) ) ) :
s e l f . t a b l e i n v [ s e l f . t a b l e . values ( ) [ j ]]= s e l f . t a b l e . keys ( ) [ j ]
s e l f . verify ()

c l a s s m i r r o r ( Ething ) :

def __init__ ( s e l f , perm ) :


s e l f . t a b l e ={}
fo r i in perm :
s e l f . table [ s e l f . tord ( i [ 0 ] ) ] = s e l f . tord ( i [ 1 ] )
s e l f . table [ s e l f . tord ( i [ 1 ] ) ] = s e l f . tord ( i [ 0 ] )
s e l f . verify ()
CAPÍTULO 3. A MÁQUINA ENIGMA 54

c l a s s pl u gb o a rd ( Ething ) :

def __init__ ( s e l f , perm ) :


s e l f . t a b l e = {}
fo r i in ra n g e ( 2 6 ) :
s e l f . table [ i ] = i
fo r i in perm :
s e l f . table [ s e l f . tord ( i [ 0 ] ) ] = s e l f . tord ( i [ 1 ] )
s e l f . table [ s e l f . tord ( i [ 1 ] ) ] = s e l f . tord ( i [ 0 ] )
s e l f . verify ()
s e l f . verifyplugboard ()

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

Programa 3.1: Componentes da ENIGMA

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 o t o r I=" EKMFLGDQVZNTOWYHXUSPAIBRCJ "


r o t o r I I=" AJDKSIRUXBLHWTMCQGZNPYFVOE "
r o t o r I I I=" BDFHJLCPRTXVZNYEIWGAKMUSQO "
r o t o r I V=" ESOVPZJAYQUIRHXLNFTGKDCMWB "
rotorV=" VZBRGITYUPSDNHLXAWMJQOFECK "

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 ’ ]

Finalmente, define-se o “movimento” da ENIGMA.

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 :

def __init__ ( s e l f , r o t l i s t , r i n g s , p i n i t , notch , p a i n e l , r e f l e c t o r ) :


s e l f . r o t l i s t=r o t l i s t
s e l f . r i n g s=r i n g s
s e l f . p i n i t=p i n i t
CAPÍTULO 3. A MÁQUINA ENIGMA 56

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

def egm ( s e l f , msg ) :


msgcod=""
l p l a i n t = [ 0 f o r i in r a n g e ( l e n ( msg ) ) ]
p i n i t i a l = [ 0 f o r i in r a n g e ( l e n ( s e l f . p i n i t ) ) ]
r i n g s = [ 0 for i in ra n g e ( l e n ( s e l f . r i n g s ) ) ]
s h i f t = [ 0 for i in ra n g e ( l e n ( s e l f . r i n g s ) ) ]
notch = [ 0 for i in ra n g e ( l e n ( s e l f . notch ) ) ]
c o d t e x t ={}

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_3=Roti ( c_2 , 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 r=c_3

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

Programa 3.2: ENIGMA

Podemos então utilizar a ENIGMA da seguinte forma:


exemplo :
>>> 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 ) ] , "KWD " ,
"PJD " , "WFR" , p l u g b o a r d ( p a i n e l 1 ) , m i r r o r ( r e f l e c t o r B ) )
>>> x . egm ( " MAQUINAENIGMA " )
’ KVENAKXUTKALW ’
>>> x . egm ( " KVENAKXUTKALW " )
’ MAQUINAENIGMA ’

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

A complexidade aparente da ENIGMA e o facto de a França e a Inglaterra não verem


a Alemanha como um inimigo fez com que esses países não tivessem, inicialmente, de-
senvolvido trabalhos para estudar e quebrar a cifra. Por sua vez, a Polónia, devido
ao contexto geográfico e político, cedo tratou de aprofundar o conhecimento acerca da
máquina ENIGMA. Os serviços secretos polacos começaram por adquirir uma cópia da
versão comercial da máquina, em 1928 ou 1929, mas como esta tinha muitas diferenças
relativamente à versão militar, não foram retiradas grandes conclusões que pudessem
ajudar à criptanálise da cifra ENIGMA. Conscientes da importância que uma abordagem
matemática poderia ter no ataque à cifra, o Biuro Szyfrow , o Departamento de Cifras e
Códigos dos serviços secretos da Polónia, organizou, em 1929, um curso de criptologia para
cerca de vinte estudantes de matemática na Universidade de Poznan. Os três estudantes
com melhores resultados foram: Marian Rejewski (1905-1980), Henryk Zygalski (1906-
1978) e Jerzy Rózycki (1909-1942) (ver Fig. 4.1).

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.

Antes de analisarmos os ataques efectuados pelos criptanalistas polacos, vamos referir


alguns aspectos importantes para a compreensão desses ataques e que contribuíram para
o sucesso dos mesmos.

59
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 60

(a) Marian Rejewski (b) Henryk Zygalski (c) Jerzy Rózycki

Figura 4.1: Os três criptanalistas polacos

A maior parte das configurações da máquina eram determinadas a partir de tabelas de


chaves-diárias que eram distribuídas, juntamente com os livros de código, a todas as unida-
des militares que usavam a ENIGMA. Inicialmente, todas as unidades usavam exactamente
a mesma máquina e as mesmas chaves-diárias. No entanto, em 1936, já existiam seis redes
que usavam diferentes conjuntos de chaves.

No período de 1930 a 1938, uma chave-diária para a ENIGMA consistia no seguinte:

• Rotores e sua ordem na máquina;

• Ligações do plugboard ;

• Posições iniciais dos rotores;

• Ajustes dos anéis dos rotores.

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.

De acordo com a tabela apresentada na Fig. 4.2 temos a seguinte chave-diária1 :

• Rotores e a sua ordem na máquina: I III II

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

• Ajustes dos anéis: 16 11 13 (ou seja, anéis ajustados para as posições P K M)

• Posições iniciais dos rotores: 01 12 22 (ou seja, rotores nas posições A L V)

• Ligações do plugboard : CO DI FR HU JW LS TX

Como já vimos (págs. 44-45), o número total de combinações possíveis de chaves-diárias


é enorme. No entanto, importa referir que apesar de contribuir largamente para esse
número, o plugboard, como veremos ao longo deste capítulo, não é relevante em termos
criptanalíticos.

Note-se que se todas as mensagens de um determinado dia fossem cifradas usando a


mesma configuração inicial da máquina determinada pela chave-diária, o inimigo podia
simplesmente aplicar a análise de frequências a todas as primeiras letras dos criptogramas
de um determinado dia, e depois às segundas letras, e assim sucessivamente. Para evitar o
sucesso deste tipo de análise foi necessário introduzir no procedimento uma chave individual
para cada mensagem. Esta será designada por chave-de-mensagem.

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:

• A chave-de-mensagem era cifrada usando a máquina ENIGMA com a configuração


determinada pela chave-diária;

• 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;

• As chaves-de-mensagem eram escolhidas livremente pelos operadores, que tinham a


tendência para seleccionar padrões simples e previsíveis, tais como três letras iguais,
ou letras correspondentes a teclas vizinhas no teclado.

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.

O procedimento de transmissão das chaves-de-mensagem foi alterado pelos alemães em


1938, e depois novamente em 1940, mas, aquando dessas alterações, as ligações internas da
máquina já eram conhecidas e os métodos para recuperar as chaves-diárias eram desenvol-
vidos e adaptados rapidamente pelos criptanalistas polacos (e mais tarde pelos britânicos)
após cada alteração.

4.1 Chaves de mensagem

“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

as enhancing the machine´s security, could be ignored in at least part of the


cryptanalysis.”

David Kahn [Kah91, p.64]

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.

Para enviar uma mensagem:

1. O operador de cifra começa por configurar a máquina de acordo com o estabelecido


na tabela com a chave-diária para aquele dia. Assim:

• Ajusta os anéis dos rotores;


• Coloca os rotores na máquina pela ordem estabelecida para aquele dia3 ;
• Roda os rotores para as posições iniciais indicadas na tabela. Vamos designar
estas posições iniciais dos rotores por ajustes-do-indicador;
• Efectua as ligações dos pares de letras no plugboard.

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.

Exemplo 4.1 (Chave-de-mensagem e Indicador)


Chave-de-mensagem: WHJ
Indicador (chave-de-mensagem cifrada duas vezes): DMQVBN

3. Roda os rotores para as posições correspondentes à chave-de-mensagem seleccionada


e prossegue com a cifra da mensagem anotando as lâmpadas que acendem;
3
Até 1938, na ENIGMA do exército, eram apenas usados 3 rotores (I, II e III), logo existiam 3×2×1 = 6
formas distintas de os colocar na máquina.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 64

4. Comunica a mensagem cifrada (criptograma) mais o seu preâmbulo ao operador de


rádio que a transmite por código Morse.

Assim, uma determinada mensagem tinha nas suas primeiras seis letras o indicador, seguido
do criptograma (texto original cifrado)4 .

Para receber uma mensagem:

1. O operador de cifra começa por configurar a máquina de acordo com o estabelecido


nas tabelas para aquele dia (procedimento igual ao efectuado para enviar a mensagem
no passo 1.);

2. Decifra a sequência de seis letras enviada no início da mensagem (indicador) e anota


as lâmpadas que acendem obtendo, dessa forma, a chave-de-mensagem repetida duas
vezes;

3. Roda os rotores para as posições correspondentes à chave-de-mensagem e decifra o


criptograma.

No seguimento do Exemplo 4.1, o receptor tem acesso ao indicador DMQVBN colocado no


início da mensagem e, utilizando a chave-diária constante da tabela de chaves, decifra-o
obtendo WHJWHJ. O operador coloca, então, os rotores nas posições WHJ, ou seja, W tem que
aparecer na janela mais à esquerda, H na do meio e J na janela mais à direita. Desta forma,
o criptograma pode ser decifrado, obtendo-se o texto original.

Importa, mais uma vez, realçar que as chaves-de-mensagem de um determinado dia tinham
duas características fundamentais:

• Todas eram cifradas utilizando a mesma configuração básica da máquina, desconhe-


cida do inimigo. Em particular, todas as chaves-de-mensagem de um determinado
dia eram cifradas usando as mesmas posições iniciais dos rotores;
4
Na realidade o cabeçalho de uma mensagem era constituído, não só pelo indicador, mas também por
outro tipo de informação, tal como, o código de rede, a frequência de rádio utilizada, número de letras da
mensagem, etc...
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 65

• Cada chave-de-mensagem era cifrada duas vezes, e assim, no indicador, a primeira


letra designava a mesma letra original que a quarta, a segunda a mesma que a quinta,
e a terceira a mesma que a sexta.

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.

Se tivermos um número suficiente de mensagens de um determinado dia (entre 50 e 100),


então, geralmente, todas as letras do alfabeto irão ocorrer nas seis posições iniciais das
mensagens, ou seja, no indicador. A cada uma das seis posições do indicador corresponde
uma configuração diferente do sistema, sendo que a máquina, efectua, portanto, seis
permutações consecutivas diferentes. Assim, num determinado dia, independentemente
da letra a cifrar, a máquina efectua sempre a mesma permutação em cada um desses
seis estados consecutivos. Designe-se por Pi (com i = 1, 2, . . . , 6), a permutação que
transforma as i-ésimas letras das mensagens transmitidas nesse dia. Estas permutações
diárias são desconhecidas para o criptanalista que tenta quebrar a cifra, mas a composição
da primeira permutação com a quarta, da segunda com a quinta e da terceira com a sexta,
ou seja P1 P4 , P2 P5 e P3 P6 , são, como veremos a seguir, fáceis de obter.

De facto, considerando as letras a (letra original), X e Y (letras cifradas) arbitrárias tais


que aPi = X e aPi+3 = Y (com i = 1, 2, 3), temos que XPi−1 Pi+3 = Y . Uma vez que
Pi−1 = Pi (a ENIGMA é involutiva), segue que XPi Pi+3 = Y . Assim, as letras X, Y ,
presentes na primeira e quarta, ou na segunda e quinta, ou na terceira e sexta posições
do indicador de uma mensagem permitem construir os produtos Pi Pi+3 das permutações
desconhecidas P1 , P2 , P3 , P4 , P5 e P6 .

A metodologia apresentada a seguir, para encontrar a chave-de-mensagem para cada men-


sagem de um determinado dia, tem por base a descrição do próprio Rejewski [Rej84a,
Rej84c, Rej77], assim como de Bauer [Bau02] e Tuma [Tum03].

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

Tabela 4.1: 65 indicadores observados num determinado dia

De seguida, escolhe-se um indicador e escreve-se a primeira letra, e junto a ela a quarta.


Depois procura-se um outro indicador que tenha como sua primeira letra a quarta letra do
indicador anterior, e escreve-se a quarta letra do segundo indicador junto à quarta letra do
primeiro. Continuando desta forma, chegar-se-á novamente à primeira letra que se tinha
escrito. De facto, o ciclo obtido por esse processo nunca poderia fechar de outra forma
uma vez que estamos a lidar com permutações (ver Definição 2.2 da pág. 26).

Para o conjunto de indicadores representados na Tabela 4.1 temos que:

A letra a é transformada nela própria: (a) (1.);

A letra s é transformada nela própria: (s) (35.);

A letra b é transformada em c e vice-versa: (bc) (2., 4.);


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 67

A letra r é transformada em w e vice-versa: (rw) (30., 53.).

Para as restantes letras, obtemos:

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

Obtivemos, desta forma:

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

O conjunto de equações Cada um dos componentes da máquina efectua uma per-


mutação do alfabeto. Assim, o funcionamento da ENIGMA, esquematizado na Fig. 3.7
(pág. 43), pode ser expresso através da composição das permutações:

SHN M LRL−1 M −1 N −1 H −1 S −1 ,

onde:

S - permutação efectuada pelo plugboard ;

H - permutação efectuada pelo disco de entrada;

L, M, N - permutações efectuadas pelos rotores da esquerda, do meio e da direita,


respectivamente;

R - permutação efectuada pelo reflector.

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

As permutações diárias P1 a P6 podem ser escritas da seguinte forma:6

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 .

A permutação cíclica C é conhecida e as permutações desconhecidas L, M , N e H descre-


vem a estrutura interna da máquina. Sabemos também que a permutação S (plugboard ) é
6
Assumindo que apenas o rotor da direita, N, se move enquanto que os rotores L e M não rodam durante
seis codificações sucessivas. Esta suposição assegura uma média de 20 casos em 26, sendo, por isso, mais
do que suficiente para a justificar.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 70

diferente todos os dias e é estabelecida pela correspondente chave-diária.

O programa seguinte gera as seis permutações, P1 , P2 , P3 , P4 , P5 e P6 para todas as 263


posições iniciais possíveis dos rotores numa determinada ordem. Usamos uma configuração
de anéis, plugboard e reflector fixa, podendo esta ser alterada directamente na função, bem
como a ordem de disposição dos rotores. O programa está construído de forma a que os
rotores do meio e da esquerda não avancem durante as seis codificações sucessivas, sendo
esta uma premissa essencial para o estudo que se está a fazer.

a l f a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ "

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

Programa 4.1: As seis permutações diárias

Designando, agora, por Q a permutação involutiva M LRL−1 M −1 , as permutações diárias


podem escrever-se de uma forma mais simples:

P1 = SHCN C −1 QCN −1 C −1 H −1 S −1 , (4.4)


P2 = SHC 2 N C −2 QC 2 N −1 C −2 H −1 S −1 , (4.5)
P3 = SHC 3 N C −3 QC 3 N −1 C −3 H −1 S −1 , (4.6)
P4 = SHC 4 N C −4 QC 4 N −1 C −4 H −1 S −1 , (4.7)
P5 = SHC 5 N C −5 QC 5 N −1 C −5 H −1 S −1 , (4.8)
P6 = SHC 6 N C −6 QC 6 N −1 C −6 H −1 S −1 . (4.9)

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

suficiente num determinado dia7 .

Os produtos P1 P4 , P2 P5 e P3 P6 podem agora ser escritos na forma:

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:

Informação disponível: Produtos P1 P4 , P2 P5 e P3 P6 (conjunto caraterístico);

Objectivo: Obter as permutações diárias P1 , P2 , P3 , P4 , P5 e P6 .

É 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:

1. Devido à propriedade involutiva da ENIGMA, cada uma das permutações P1 , P2 , P3 ,


P4 , P5 e P6 é formada apenas por transposições (ciclos de comprimento 2);

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

Teorema 4.1 (Produto de Transposições) Uma permutação K, sobre um conjunto Z,


pode ser expressa como composição de duas permutações X e Y formadas apenas por
produtos de ciclos disjuntos de comprimento 2 se e só se K contém um número par de
ciclos de cada comprimento.

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.

Caso não existam transposições iguais em X e em Y , consideremos que:

X = (a1 a2 )(a3 a4 ) . . . (a2k−1 a2k ), e


Y = (a2 a3 )(a4 a5 ) . . . (a2k a1 ), com k > 1.

Arbitrariamente, tomemos o ciclo (a1 a2 ) da permutação X e investiguemos quais são os


comprimentos dos ciclos do produto XY que contêm os elementos a1 e a2 . Esquematizando
as transposições de X através de um diagrama (representado por m) e de seguida as trans-
posições de Y (representadas por 99K), obtém-se o diagrama do produto XY (representado
por →).

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

Notemos que a1 e a2 pertencem a dois ciclos diferentes do mesmo comprimento:

(a1 a3 . . . a2k−3 a2k−1 ) e (a2 a2k a2k−2 . . . a4 ).


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 74

De facto, como o a1 e o a2 escolhidos são dois elementos quaisquer, a composição XY tem


sempre um número par de ciclos de cada comprimento.

Reciprocamente, suponhamos que a permutação K tem um número par de ciclos disjuntos


de cada comprimento. Vamos mostrar como encontrar todas as expressões possíveis para
K como composição XY de duas permutações que têm todos os ciclos de comprimento
2. Escolhemos dois ciclos de K do mesmo comprimento, digamos k, e um elemento
arbitrário a1 num dos ciclos (em (a1 a3 . . . a2k−3 a2k−1 )) e um elemento a2 no outro ciclo (em
(a2 a2k a2k−2 . . . a4 )). Construímos X começando pelo ciclo (a1 a2 ). Após esquematizarmos
(a1 a3 . . . a2k−3 a2k−1 ) e (a2 a2k a2k−2 . . . a4 ) um por baixo do outro, através de diagramas,
representamos o ciclo escolhido (a1 a2 ) da permutação X. Uma vez que queremos ter
K = XY , a permutação Y tem que converter o elemento a2 em a3 . Pela mesma razão, em
X, a3 deve ser enviado em a4 , e assim sucessivamente. Obtemos, desta forma, o mesmo
diagrama representado na primeira parte da demonstração.

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 .

Para reduzir o número de possibilidades, Marian Rejewski observou que os indicadores


disponíveis denotavam desvios em relação a uma distribuição equilibrada da frequência
das letras, o que, provavelmente, significava que os operadores não conseguiam escolher
de uma forma aleatória as chaves-de-mensagem. De facto, era prática corrente usar
grupos padronizados de três letras, tais como, aaa, bbb ou uuu. A partir de 1933, a
mera repetição de letras foi expressamente proibida pelas forças alemãs. No entanto, os
polacos continuaram a estudar os hábitos dos operadores de cifra alemães e concluiram que
estes passaram a usar grupos de três letras que eram resultado de sequências horizontais,
verticais ou diagonais de teclas no teclado.

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)

Lendo na vertical e na diagonal, as transposições de P3 e P6 , respectivamente, obtêm-se as


permutações diárias:

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)

Da forma já descrita, obtemos a decomposição de P2 e P5 em ciclos de comprimento 2:

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

Uma vez que P3 e P6 contêm (rk) e (ke) respectivamente, e P2 e P5 contêm (dk) e


(kd) então a chave-de-mensagem será do tipo *kk. Novamente, esta situação sugere
uma chave estereotipada da forma kkk, e assim P1 e P4 contêm as transposições (lk)
e (kh) respectivamente. Com esta informação sabemos como escrever os ciclos de igual
comprimento de P1 P4 debaixo uns dos outros:

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

Desta forma, as permutações P1 a P6 podiam ser encontradas através da aplicação do


teorema do produto de transposições (Teorema 4.1), combinado com o conhecimento das
escolhas habituais para chaves-de-mensagem dos operadores. Note-se que, a partir do
momento em que se encontravam as permutações P1 a P6 , encontravam-se também as
chaves para todas as mensagens desse dia, bastando para isso converter os indicadores nas
chaves-de-mensagem respectivas utilizando para tal P1 , P2 , P3 , P4 , P5 e P6 .

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.

Calculando o número de conjuntos característicos que contêm um determinado número de


singletons, para cada uma das seis sequências de rotores8 (ver tabela no Apêndice B.2),
observa-se que as distribuições são muito semelhantes. Por exemplo, para a sequência de
rotores II-I-III9 obtemos:
8
Note-se que para cada sequência de rotores existem 263 = 17576 conjuntos característicos. Assim,
globalmente, existem 6 × 17576 = 105456 conjuntos característicos possíveis.
9
A partir daqui a notação do tipo II-I-III significa que o rotor II é o rotor que se encontra mais à
esquerda, o rotor I no meio e o rotor III é o que está na posição mais à direita na máquina.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 78

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

4.2 Ligações internas dos rotores

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

Figura 4.6: Representação do teclado da ENIGMA

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

Assim, H não é mais do que a identidade10 ,

à !
abcdefghijklmnopqrstuvwxyz
H= ,
abcdefghijklmnopqrstuvwxyz

e pode ser eliminada das equações (4.4) a (4.9). Obtemos, desta forma, um sistema mais
simples.

P1 = SCN C −1 QCN −1 C −1 S −1 , (4.13)


P2 = SC 2 N C −2 QC 2 N −1 C −2 S −1 , (4.14)
P3 = SC 3 N C −3 QC 3 N −1 C −3 S −1 , (4.15)
P4 = SC 4 N C −4 QC 4 N −1 C −4 S −1 , (4.16)
P5 = SC 5 N C −5 QC 5 N −1 C −5 S −1 , (4.17)
P6 = SC 6 N C −6 QC 6 N −1 C −6 S −1 . (4.18)

Após isto, em poucas semanas, Rejewski consegue um avanço considerável estabelecendo


uma abordagem matemática que, em teoria, resolveria o problema e serviria para encontrar
as ligações internas dos rotores.

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;

• tabela de chaves-diárias para o mês de Setembro de 1932;

• tabela de chaves-diárias para o mês de Outubro de 1932.

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.

De facto, uma vez que as tabelas de chaves-diárias continham as ligações do plugboard, a


permutação S tornava-se, também, conhecida. Assim, o conjunto de seis equações (4.13)
a (4.18), passa a ter apenas duas permutações desconhecidas (N e Q).

As equações podem, agora, ser escritas passando as permutações conhecidas, C e S, para


o primeiro membro, ficando com as duas permutações desconhecidas, N e Q, no segundo
membro.

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.

Formando produtos de cada par de expressões sucessivas obtém-se:

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 .

onde, eliminando a expressão comum QC −1 QC, obtém-se um conjunto de quatro equações


com apenas uma incógnita, N CN −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)

Note-se que N C −1 N −1 não é mais do que a permutação inversa de N CN −1 .


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 84

Tem-se:

Informação disponível: Sistema de equações (4.19) a (4.22) onde são conhecidos os


produtos U V , V W , W X, XY , Y Z e a permutação C;

Objectivo 1: Resolver o sistema de equações (4.19) a (4.22), isto é encontrar N CN −1 ;

Objectivo 2: A partir de N CN −1 , encontrar N , ou seja, as ligações internas do rotor


na posição mais à direita na ENIGMA.

Antes de avançarmos importa introduzir uma definição e um teorema que irão ajudar a
compreender o que se segue.

Definição 4.1 (Permutações conjugadas) Duas permutações K e L, sobre o mesmo


conjunto X, dizem-se conjugadas se existe uma outra permutação P , sobre o conjunto X,
tal que:

K = P −1 LP.

É conhecido o seguinte teorema [Rot95]:

Teorema 4.2 Duas permutações K e L, sobre o mesmo conjunto X, são conjugadas se e


só se têm a mesma estrutura de ciclos.

Se repararmos, na equação (4.19), as permutações V W e U V são conjugadas. V W é,


assim, a permutação com a mesma estrutura de ciclos de U V que é obtida aplicando
N CN −1 às letras de U V . Desta forma, se escrevermos V W debaixo de U V e lermos na
vertical os pares de letras correspondentes vamos obter a permutação N CN −1 que é aquela
que conjuga as duas primeiras. Desta forma, N CN −1 não é mais do que uma permutação
que representa as alterações que se podem efectuar em U V para se obter V W . Vamos
designar este processo por subscrição.

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

Exemplo 4.2 (Subscrições) Consideremos duas permutações conjugadas, R e T , escri-


tas uma por baixo da outra da seguinte forma:

R = (aukdjspqblr)(coytzeimnhf)(gv)(w)(x)
T = (dyqblghnjsk)(euavcotpimz)(wx)(r)(f)

Subscrevendo, dessa forma, as permutações R e T obtemos a permutação (com a primeira


linha já ordenada):

à !
abcdefghijklmnopqrstuvwxyz
,
djebozwmtlqspiunhkgvyxrfac

ou, numa forma mais simples:

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

Portanto, devemos obter da equação (4.19) várias expressões possíveis para N CN −1 ,


dependendo da estrutura de ciclos da permutação U V (ou das permutações V W , W X,
XY , Y Z, uma vez que todas têm que ter a mesma estrutura de ciclos). Ainda assim,
iremos obter o mesmo número de soluções para N CN −1 na equação (4.20), e algumas
destas soluções deverão ser iguais a soluções de (4.19). Utilizando as quatro equações,
efectuando o mesmo procedimento, obtém-se uma única solução, N CN −1 , comum a todas
as equações.

Com a solução obtida para N CN −1 , como N CN −1 e C são permutações conjugadas,


podemos aplicar, novamente, o método descrito atrás, comparando a solução obtida para
N CN −1 com a permutação C. Uma vez que C, a cifra de César, é constituída por um único
ciclo de comprimento 26, iremos obter 26 soluções possíveis para N (bastante semelhantes)
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 86

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.

Neste exemplo, são usadas permutações U V , V W , W X, XY e Y Z reais, ou seja, trata-


se de um exemplo com permutações geradas por uma ENIGMA (Secção 3.3) com uma
determinada configuração. Os produtos e as respectivas subscrições foram obtidos usando
os programas incluídos nos Apêndices C.1.1 e C.1.2.

Exemplo 4.3 (Não unicidade de N CN −1 ) Configuração da ENIGMA para gerar as


permutações P1 , . . . , P6 que, por sua vez, originam U , V , W , X, Y , Z e, consequen-
temente, os produtos U V , V W , W X, XY , e Y Z:

• sequência dos rotores: III-II-I;

• ajustes dos anéis: AAA;

• plugboard: identidade;

• posições iniciais dos rotores: XZB;

• 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

Podemos escrever V W debaixo de U V e W X debaixo de V W , por exemplo da seguinte


forma:

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

Ou, numa forma ainda mais simples:

“djebozwmtlqspiunhkgvyxrfac”.

Neste caso, existe outra forma de escrever V W debaixo de U V e W X debaixo de V W que


origina a mesma solução para os pares U V −V W e V W −W X. De facto, se subscrevermos
as permutações da seguinte forma:

UV = (aukdjsqpblr)(coytzeimnhf)(g)(v)(w)(x)
VW = (dyqblghnjsk)(euavcotpimz)(w)(x)(f)(r)
W X = (bahjswmilgq)(oydxeuvntpc)(f)(r)(z)(k),

obtemos outra solução:

à !
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.

De facto, retomando o exemplo apresentado, e acrescentando as permutações XY e Y Z


ao sistema, observa-se que, relativamente às permutações:

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

existe apenas uma maneira de subscrever de igual forma U V −V W , V W −W X, W X −XY


e XY − Y Z:

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

obtendo, assim, a solução única:

à !
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.

Utilizando os programas do Apêndice C.1.1, foi possível efectuar um estudo estatístico,


apresentado no Apêndice C.2, acerca da estrutura de ciclos de todos os produtos U V ,
V W , W X, XY e Y Z para qualquer uma das seis sequências de rotores utilizadas pelo
exército alemão na altura.13 Note-se que quase metade das permutações são do tipo [13, 13],
[1, 1, 12, 12] e [2, 2, 11, 11] o que facilitava a árdua tarefa dos criptanalistas polacos que
tinham que efectuar, manualmente, o procedimento de subscrição já descrito (ver pág. 84).
Observe-se a Tabela 4.2 que apresenta os três tipos de ciclos mais frequentes para as seis
sequências de rotores.

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

I-II-III I-III-II II-I-III II-III-I III-I-II III-II-I Total Total (%)


[13, 13] 4862 4186 4394 5044 4212 4238 26936 25.54
[1, 1, 12, 12] 2418 2054 2470 2262 2131 2574 13910 13.19
[2, 2, 11, 11] 1404 1118 1248 1118 1274 1404 7566 7.17
Total 8684 7358 8112 8424 7618 8216 48412 45.91
Total (%) 49.41 41.86 46.15 47.93 43.34 46.75 45.91

Tabela 4.2: Tipos de ciclos mais frequentes

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.

Exemplo 4.4 (Dedução das ligações internas do rotor N ) Configuração da ENIGMA


para gerar as permutações que se seguem:

• sequência dos rotores: I-II-III;

• ajustes dos anéis: AAA;

• plugboard: (ua)(pf)(rq)(so)(ni)(ey)(bg)(hl)(tx)(zj);

• posições iniciais dos rotores: KFA;

• reflector: B.

Objectivo: Encontrar N , ou seja as ligações internas do rotor mais à direita.

Rejewski procedia da forma descrita a seguir.

A partir dos cabeçalhos de várias mensagens de um determinado dia constrói-se o conjunto


característico para esse dia:
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 91

P1 P4 = (ahsovgziert)(bx)(clpyjudwnmf)(kq), (4.23)
P2 P5 = (aqvzixmljhgw)(b)(cpeykrontufd)(s), (4.24)
P3 P6 = (ajmorslfeqydb)(ckivughxtwznp). (4.25)

Usando o teorema do produto de transposições (Teorema 4.1) combinado com o conheci-


mento dos hábitos de escolha de chaves-de-mensagem por parte dos operadores (págs 75-77),
obtêm-se as permutações diárias P1 a P6 :

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

Note-se que a permutação S é composta por alguns ciclos de comprimento 2 e os restantes,


que não estão representados, são de comprimento 1. Neste exemplo, 10 pares de letras
14
Este método era aplicável apenas aos dias de Setembro e Outubro de 1932, uma vez que apenas para
esses meses eram conhecidas as chaves-diárias (ver pág. 82).
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 92

estão ligadas, ou seja, 20 letras são alteradas pelo plugboard mantendo-se as restantes 6
inalteradas15 .

Obviamente também se conhece a cifra de César C e as suas potências:

C = (abcdefghijklmnopqrstuvwxyz),
C 2 = (acegikmoqsuwy)(bdfhjlnprtvxz),
C 3 = (adgjmpsvybehknqtwzcfilorux),
C 4 = (aeimquycgkosw)(bfjnrvzdhlptx).

Da maneira indicada anteriormente obtêm-se as expressões para U , V , W , X (neste caso,


as expressões Y e Z não serão necessárias):

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

e, de seguida, os seus produtos:

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.

Após este moroso e meticuloso processo, concluia-se que os produtos U V , V W e W X


deveriam ser escritos uns debaixo dos outros da seguinte forma:

U V = (axzodrqmechup)(bwnviyfgtkjsl)
V W = (gjhmqketusyfc)(plznxivbaowdr)

V W = (gjhmqketusyfc)(plznxivbaowdr)
W X = (bwyteouafdivs)(crhzjxnpgmlqk)

Em ambos os casos, obtém-se para N CN −1 a mesma expressão:

N CN −1 = “gpsquvbyxwortzmcekdafnljih”.

Finalmente, uma vez que C e N CN −1 são permutações conjugadas, escrevendo C debaixo


de N CN −1 de todas as formas possíveis, obtêm-se 26 variações da permutação N :
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 94

“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”.

Entre as 26 possibilidades encontra-se a correcta, ou seja, as ligações internas do rotor


mais à direita (neste caso o rotor III):

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

Marian Rejewski [Rej84c, p.283]

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.

Estudo completo para a sequência de rotores I-III-II

Objectivo: Encontrar N , ou seja, as ligações internas do rotor mais à direita na máquina


(neste caso o rotor II).

Configuração da ENIGMA usada neste estudo:

• sequência dos rotores: I-III-II;

• ajustes dos anéis: AAA;

• 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

n.o de ordem solução para N CN −1


1-676 “jdzknbexvpofihtcglayqsrmuw”
677-1352 “cyjmadwuonehgsbfkzxprqltvi”
1353-2028 “xilzcvtnmdgfraejywoqpksuhb”
2029-2704 “hkybusmlcfeqzdixvnpojrtgaw”
2705-3380 “jxatrlkbedpychwumoniqsfzvg”
3381-4056 “wzsqkjadcoxbgvtlnmhpreyufi”
4057-4732 “yrpjizcbnwafuskmlgoqdxtehv”
4733-5408 “qoihybamvzetrjlkfnpcwsdgux”
5409-6084 “nhgxazluydsqikjemobvrcftwp”
6085-6760 “gfwzyktxcrphjidlnauqbesvom”
6761-7436 “evyxjswbqogihckmztpadrunlf”
7437-8112 “uxwirvapnfhgbjlysozcqtmked”
8113-8788 “wvhquzomegfaikxrnybpsljdct”
8789-9464 “ugptynldfezhjwqmxaorkicbsv”
9465-10140 “fosxmkcedygivplwznqjhbarut”
10141-10816 “nrwljbdcxfhuokvympigazqtse”
10817-11492 “qvkiacbwegtnjuxlohfzypsrdm”
11493-12168 “ujhzbavdfsmitwkngeyxorqclp”
12169-12844 “igyazucerlhsvjmfdxwnqpbkot”
12845-13520 “fxzytbdqkgruilecwvmpoajnsh”
13521-14196 “wyxsacpjfqthkdbvulonzimrge”
14197-14872 “xwrzboiepsgjcautknmyhlqfdv”
14873-15548 “vqyanhdorfibztsjmlxgkpecuw”
15549-16224 “pxzmgcnqehaysrilkwfjodbtvu”
16225-16900 “wylfbmpdgzxrqhkjveincasuto”
16901-17576 “xkealocfywqpgjiudhmbzrtsnv”

Tabela 4.3: Soluções para N CN −1


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 97

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.

Para a primeira solução de N CN −1 da Tabela 4.3, “jdzknbexvpofihtcglayqsrmuw”, temos


as 26 hipóteses seguintes:

“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”.

Uma dessas hipóteses, “ajdksiruxblhwtmcqgznpyfvoe”, é, de facto, a permutação corres-


pondente às ligações internas do rotor II (rotor mais à direita neste estudo).

Para a segunda solução “cyjmadwuonehgsbfkzxprqltvi” temos as hipóteses:


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 98

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

Para a última solução “xkealocfywqpgjiudhmbzrtsnv” temos as seguintes 26 hipóteses:

“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, ...

Então na posição B o rotor N efectua as transformações:

a 7→ j, b 7→ d, c 7→ k, d 7→ s, e 7→ i, f 7→ r, ... ou seja,

em vez de “ajdksiruxblhwtmcqgznpyfvoe”, temos “jdksiruxblhwtmcqgznpyfvoea”, e


assim sucessivamente. Estas soluções não são mais do que as permutações efectuadas
pelo rotor N na posição A e as permutações efectuadas pelo mesmo rotor depois de ter
avançado uma posição (Fig. 4.3, pág. 69).

Como vimos, os criptanalistas polacos podiam, teoricamente, através de métodos pura-


mente matemáticos, encontrar as ligações do rotor mais à direita na máquina, indepen-
dentemente de qual o dia escolhido para o fazer, ou seja, para qualquer posição inicial
dos rotores. No entanto, em termos práticos, as dificuldades que poderiam surgir são
imensas. De facto, sendo a posição inicial dos rotores diária (estabelecida pelas tabelas
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 100

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.

Desta forma, e de acordo com o material criptográfico disponível, os criptanalistas certa-


mente seleccionavam dias em que as permutações P1 a P6 originavam produtos U V , V W e
W X do tipo mais simples [13, 13]. Assim, utilizando o método explorado atrás, as ligações
internas do rotor N seriam facilmente descobertas. Uma vez que a posição inicial dos
rotores constava das tabelas de chaves-diárias, para facilitar um pouco o complexo processo
de encontrar as ligações do rotor mais à direita, os criptanalistas polacos deveriam escolher
dias em que o rotor N estava na posição A de modo a que de entre as 26 possibilidades finais
para N se encontrasse as ligações internas do rotor sem alterações provocadas pelas funções
shift já referidas. Mesmo que assim não fosse, as ligações seriam facilmente deduzidas,
bastando para isso ver na tabela mensal a posição i (i = 1, . . . , 25) do rotor naquele dia e
efectuar um shift(−i) nas soluções obtidas para N .

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

Como veremos mais à frente, a 15 de Setembro de 1938, os alemães mudaram o pro-


cedimento para cifrar mensagens e, em Dezembro, um quarto e um quinto rotor foram
introduzidos, aumentando de 3 × 2 × 1 = 6 para 5 × 4 × 3 = 60 as ordens possíveis
de colocação dos rotores na máquina. Dessa forma, os criptanalistas polacos tinham
que descobrir também as ligações internas destes dois novos rotores. Existem versões
contraditórias relativamente à forma como o conseguiram. O S.D. não alterou o seu
procedimento de cifra mas acabou por introduzir os novos rotores em Dezembro de 1938.
Segundo Bauer [Bau02, p.395], centrando a atenção nos criptogramas relativos ao S.D., e
uma vez que esses dois novos rotores apareciam também na posição mais à direita (N ), as
suas ligações internas foram deduzidas da mesma forma que os outros rotores. Ora, Bauer
[Bau02] provavelmente esqueceu-se de que as ligações internas dos rotores só podiam ser
encontradas através da aplicação dos métodos matemáticos já descritos e tendo na posse
tabelas de chaves-diárias contendo informações relativas a configurações da máquina. Esse
material, relativo a Setembro e Outubro de 1932, ainda não incluía os dois novos rotores
(rotor IV e rotor V). De acordo com a bibliografia consultada não se encontra referência
a qualquer outro livro de código e tabelas de chaves-diárias na posse dos serviços secretos
polacos para além dos já referidos. Assim, parece mais plausível a versão de Gordon
Welchamn [Wel01] que, referindo William Stevenson’s em A Man Called Intrepid (1976),
defende que os militares polacos capturaram uma máquina ENIGMA no início de 1939 que
continha os dois últimos rotores introduzidos.

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

especial de Rejewski. De facto, segundo Welchman [Wel01], Rejewski terá trabalhado


praticamente sozinho até ter encontrado as ligações internas dos rotores. Os resultados
dessa investigação levaram-no a ser considerado por Welchman [Wel01] e Kahn [Kah91]
um dos maiores criptanalistas do seu tempo.

“What an extraordinary achievement for a period of a little over four months!


And what a brilliant one-man triumph for Rejewski!”

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

4.3 Chaves diárias

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:

• Rotores e sua ordem na máquina;

• Ligações do plugboard ;

• Posições iniciais dos rotores (ou ajustes-do-indicador);

• Ajustes dos anéis dos rotores.

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.

4.3.1 Método da Grelha

Reportando-nos às equações (4.13) a (4.18) (pág. 81) e assumindo que S é a identidade (o


que equivale a uma ENIGMA sem plugboard ), as permutações P1 a P6 podem ser escritas
da seguinte forma, com N numa qualquer posição:
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 104

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,

onde x ∈ {1, 2, . . . , 26} representa a posição inicial do rotor N .

Se a permutação S fosse, de facto, a identidade, então substituindo x pelos números de 1 a


26 e calculando os primeiros membros das equações, para um determinado x iríamos obter
a mesma permutação Q para todas as equações, e, dessa forma, encontravamos a posição
inicial do rotor N . Mas como a permutação S é diferente da identidade, para nenhum valor
de x as permutações Q vão ser iguais. No entanto, uma vez que a permutação S não altera
todas as letras, para um determinado x existirão certas semelhanças entre as permutações
Q. Note-se que temos novamente uma situação que envolve permutações conjugadas. As
permutações Pi , com i = 1, . . . , 6, e Q são conjugadas, ou seja, C x+i−1 N C −x−i+1 efectua
transformações em Pi para se obter Q (ver pág. 84).

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.

De seguida, vamos descrever a construção e aplicação do Método da Grelha. Para cada um


dos três rotores, escreve-se numa folha de papel trinta e uma permutações: N , CN C −1 ,
C 2 N C −2 , . . . , C 25 N C −25 , N , CN C −1 , . . . , C 4 N C −4 . Por exemplo:

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

Figura 4.7: Ilustração do Método da Grelha

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.

Relembremos que a permutação Q foi introduzida para representar a permutação involutiva


M LRL−1 M −1 no sistema de equações (4.4) a (4.9) (pág. 71) quando, para o nosso estudo,
ainda não era necessário ter em conta a posição inicial dos rotores. Podemos, agora,
escrever Q da seguinte forma20 :

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.

4.3.2 Método ANX

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

No entanto, o Método ANX combinado com o Método da Grelha, estudado na secção


anterior, tornava este último bastante eficaz e permitia encontrar a chave-diária completa.

4.3.3 Método do Relógio

Num período (1933–1935) em que os alemães não introduziram alterações de relevo na


ENIGMA e no procedimento de cifra, Jerzy Rózycki desenvolveu um procedimento desig-
nado por Método do Relógio, que, em muitos casos, permitia determinar qual dos três
rotores – I, II ou III – seria nesse dia o rotor N , ou seja, aquele que estaria na posição mais
à direita na máquina. Note-se que, desta forma, o Método do Relógio permitia que, ao usar
o Método da Grelha, só fosse necessário deslizar a grelha por apenas uma das folhas com as
trinta e uma permutações (ver pág. 106), facilitando bastante a tarefa dos criptanalistas.

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

Definição 4.2 (Índice de coincidência de Friedman ou K ) Dado um par de textos


T = t1 t2 t3 . . . tn e V = v1 v2 v3 . . . vn do mesmo comprimento n > 1 sobre o mesmo
conjunto Zn , designa-se por K do par de textos (ou índice de coincidência de Friedman21 )
a probabilidade de encontrar nos dois textos letras iguais na mesma posição.

Assim,
Pn
i=1 δ(ti , vi )
K(T, V ) = ,
n

onde:
(
1, se x = y
δ(x, y) =
0, caso contrário.

Note-se que K(T, V ) ≤ 1 e K(T, V ) = 1 se e só se T = V .

De acordo com resultados empíricos, dois textos, T e V , suficientemente grandes, de uma


mesma linguagem S têm valor K próximo de um determinado valor κS [Bau02].

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.

Observação: Para substituições simples, que efectuam uma permutação do alfabeto, o


valor K de dois textos de igual comprimento e cifrados com a mesma chave é invariante.

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.

Mensagem 1: AXV YBC MNSGEUMCIFDABKDFPLW...

Mensagem 2: AXF YBE SAGEMDOSFRADMWDXASZ...

A quantidade de mensagens por dia nessas condições é, de facto, um número bastante


exagerado por Rejewski [Rej84a], uma vez que a probabilidade de ocorrência de duas
mensagens nas condições referidas é:

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.

Nesta altura, os criptanalistas polacos já tinham desenvolvido um método (descrito na


Secção 4.1) que permitia obter as seis permutações diárias efectuadas pela máquina ao
cifrar duas vezes as chaves-de-mensagem. De facto, já vimos que a partir do conjunto
característico formado por P1 P4 , P2 P5 e P3 P6 , juntamente com o conhecimento das escolhas
habituais para chaves-de-mensagem, podemos obter P1 , P2 , P3 , P4 , P5 e P6 . Logo, num
determinado dia, se conhecermos estas permutações podemos recuperar todas as chaves-
de-mensagem para esse dia.

Vamos considerar o caso geral para as chaves-de-mensagem de duas mensagens e a partir


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 112

daí descobrir qual o rotor N nesse dia.

Chave da mensagem 1: αβγ1

Chave da mensagem 2: αβγ2

Escrevemos a mensagem 2 debaixo da mensagem 1, de forma a que as letras cifradas usando


as mesmas posições iniciais dos rotores apareçam umas debaixo de outras. Temos duas
formas distintas de o fazer:

• Se γ2 − γ1 ≥ 0: a mensagem 2 é deslizada γ2 − γ1 posições para a direita;

• Se γ2 − γ1 < 0: a mensagem 2 é deslizada γ1 − γ2 posições para a esquerda.

No Exemplo 4.5, suponhamos que a partir de P1 , . . . P6 , as chaves das duas mensagens


foram descobertas e são as seguintes:

Chave da mensagem 1: SWD

Chave da mensagem 2: SWI

Assim, a mensagem 2 teria que ser colocada 5 posições deslocada para a direita em relação
à mensagem 1 (ver Fig. 4.8).

Figura 4.8: Exemplo de aplicação do Método do Relógio

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

Com a criação de diversas redes de mensagens23 houve um aumento muito grande do


trabalho dos criptanalistas polacos pois o número de chaves-diárias a reconstruir era cada
vez maior. Para além disso, aumentou a periodicidade de alteração da sequência dos rotores
e, a 1 de Outubro de 1936, o número de pares de letras alteradas pelo plugboard passou a
variar entre 5 e 8, tornando difícil o uso do Método da Grelha. Tornou-se, assim, necessário
desenvolver métodos mais rápidos e eficientes.

Analisando, novamente, os conjuntos característicos que Marian Rejewski investigara em


Setembro de 1932, os criptanalistas decidiram tirar partido do facto de a estrutura de ciclos
das três equações da característica (P1 P4 , P2 P5 e P3 P6 ) ser independente das ligações do
plugboard. De facto, a permutação efectuada pelo plugboard, como transformação, não
afecta os comprimentos dos ciclos no conjunto característico, mas apenas as letras nos
ciclos.

Rejewski inventou um mecanismo, a que chamou Ciclómetro, para auxiliar a tabelar a


estrutura de ciclos dos conjuntos característicos gerados por cada uma das 6×263 = 105456
configurações dos rotores. O mecanismo permitia percorrer todas as configurações dos
rotores e obter o número de ciclos e respectivo comprimento na característica. Desta
forma, se o número de ciclos e respectivos comprimentos fossem catalogados, então bastaria
comparar os produtos P1 P4 , P2 P5 e P3 P6 de um determinado dia com os produtos com
a mesma estrutura de ciclos no catálogo. Desta forma, obtinha-se a ordem e as posições
iniciais dos rotores. Os outros componentes das chaves-diárias seriam obtidos por outros
métodos.

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

Figura 4.9: Ciclómetro

(3), a máquina tinha, também, um conjunto de 26 lâmpadas (4), 26 interruptores (5) e as


letras correspondentes (6).

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.

O diagrama da Fig. 4.10 esquematiza o circuito eléctrico do Ciclómetro quando um deter-


minado interruptor é ligado. A letra Q substitui, como atrás, o conjunto formado pelos
rotores R, L e M . Entre os dois conjuntos de rotores existe um sistema de lâmpadas
com interruptores. Se a corrente (simbolizada no diagrama por +) é ligada por algum
dos interruptores, por exemplo l, então irá percorrer alternadamente os dois conjuntos
de rotores, até que regresse à lâmpada l. As lâmpadas pertencentes ao circuito por onde
passou a corrente também se irão acender. Depois um outro interruptor é ligado, um dos
interruptores cuja lâmpada ainda não acendeu, para, assim, se deduzir o comprimento dos
outros ciclos na permutação do conjunto característico. O número de lâmpadas que se
acendem, sempre em número par, é igual ao dobro do número de letras num dos ciclos
da permutação P1 P4 . No exemplo ilustrado na Fig. 4.10, acendem quatro lâmpadas, logo
existem pelo menos dois ciclos em P1 P4 de comprimento 2.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 116

Figura 4.10: Diagrama do circuito eléctrico do Ciclómetro

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.

Para decifrar as mensagens de um dia seguiam-se as seguintes etapas:

1. Obter a decomposição em ciclos (característica);

2. Procurar, no catálogo, as configurações compatíveis;

3. Testar cada uma das configurações compatíveis numa réplica da ENIGMA.

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

No entanto, ainda faltava encontrar os restantes elementos da chave-diária: os ajustes dos


anéis e as ligações no plugboard.

Tal como já foi referido, estudando as mensagens interceptadas, os criptanalistas polacos


descobriram que os militares alemães começavam várias das suas mensagens com a sequên-
cia ANX. Assim, uma vez averiguada a disposição dos rotores, para encontrar os ajustes
dos anéis os criptanalistas polacos aplicavam o método já descrito na Secção 4.3.2.

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.

Note-se que o método do Ciclómetro só funcionava se os rotores do meio e da esquerda


não avançassem durante a codificação das seis letras que constituiam o indicador da
mensagem. Rejewski [Rej84c] não explica como resolveu o problema dos avanços, mas
segundo Welchman [Wel01], exceptuando os piores casos possíveis, pelo menos uma das
permutações P1 P4 , P2 P5 , P3 P6 não seria afectada por um avanço do rotor M , o que reduz
muito o trabalho envolvido no ataque à chave-diária.

Implementação do Ciclómetro

O programa seguinte produz o catálogo com a estrutura de ciclos de todos os conjuntos


característicos possíveis para as seis sequências de rotores.26

import p i c k l e
f=open ( " catalogo .pck" , "w" )

a l f a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ "


26
O catálogo é produzido em aproximadamente 36 minutos com um processador Pentium 4 a 2.81 GHz.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 118

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

Programa 4.2: Ciclómetro

Desta forma, os criptanalistas polacos conseguiram construir um sistema que simplificava


a procura da configuração diária da máquina. A tarefa mais pesada era a preparação
prévia, ou seja, interceptar as mensagens e obter o conjunto característico com a respectiva
estrutura de ciclos. Depois, comprovar as posições dos rotores compatíveis com esse tipo
de ciclos e finalmente determinar quais os ajustes dos anéis e as ligações do plugboard.
Uma vez obtida a chave-diária (ordem e posições iniciais dos rotores, ajustes dos anéis e
plugboard ), todas as outras mensagens podiam ser lidas tão rapidamente e com a mesma
simplicidade com que o faziam os próprios operadores alemães.

Os militares alemães foram introduzindo pequenas alterações no procedimento de cifra, mas


os criptanalistas polacos conseguiram sempre acompanhar essas mudanças. No entanto,
duas alterações foram particularmente importantes, uma vez que aumentaram considera-
velmente o trabalho necessário para se obter a chave-diária.

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:

1. Escolher os ajustes-do-indicador (COM) e uma chave-de-mensagem (GER);

2. Ajustar os rotores para a posição COM e cifrar GER duas vezes (obtendo o indicador);

3. Ajustar os rotores para a posição GER e cifrar a mensagem.

Assim, se ao colocar os rotores na posição COM e ao cifrar GERGER obtivesse o indicador


QJEHCX, o operador teria que transmitir no cabeçalho da mensagem a sequência COM QJE
HCX. Por seu turno, o destinatário configurava a máquina de acordo com a tabela de chaves-
diárias, colocava os rotores nas posições COM e decifrava QJEHCX obtendo GERGER. Por fim,
colocando os rotores nas posições GER decifrava o criptograma.

Desta forma, a partir da data referida, uma chave-diária (constante das tabelas mensais)
consistia no seguinte:

• ordem dos rotores;

• ajustes dos anéis;

• ligações do plugboard.

Portanto, as posições iniciais dos rotores (ajustes-do-indicador) deixaram, a partir de 15


Setembro de 1938, de fazer parte da chave-diária.

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 acabou de ser referido, a partir de 15 de Setembro de 1938, os operadores de cifra


alemães foram obrigados a seleccionar três letras que colocavam, de forma não cifrada,
no início de cada mensagem. Assim, o cabeçalho das mensagens passava a ter um grupo
de três letras não cifradas (ajustes-do-indicador) e o grupo da chave-de-mensagem cifrada
duas vezes (indicador).

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.

Na sua totalidade a máquina actua como uma permutação da forma,

Pr = SEr S.

Assim, durante a dupla cifra da chave-de-mensagem a ENIGMA efectua as permutações


de P1 a P6 .

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

Exemplo 4.6 Indicadores com fêmeas:

FBG KQM KAD (fêmea 1-4),


JVN USD MSA (fêmea 2-5),
ZNE ESF QXF (fêmea 3-6).

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:

• sequência de rotores III-II-I;

• anéis nas posições ZZZ;

• 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

Letra Fêmea 1-4 Letra Fêmea 1-4


A 446160 N 444808
B 421824 O 426556
C 417768 P 453596
D 433992 Q 455624
E 435344 R 431964
F 430612 S 375180
G 418444 T 450216
H 439400 U 414388
I 440076 V 448864
J 460356 W 427908
K 437372 X 416416
L 447512 Y 484016
M 429936 Z 444132

Tabela 4.4: Número de fêmeas 1-4 para a ordem de rotores III-II-I

Existem 263 posições iniciais dos rotores (ajustes-do-indicador) e 263 chaves-de-mensagem


possíveis, logo o número de mensagens possível é 266 . Como, de acordo com a Tabela 4.4
existem 11332464 fêmeas 1-4 possíveis, temos 3 × 11332464 fêmeas de qualquer um dos
três tipos. Assim, a probabilidade de ocorrência de uma fêmea numa mensagem é igual a:

3 × 11332464
≈ 0.110,
266

que está muito próxima da probabilidade teórica esperada (0.115).

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

Teorema 4.3 Sejam S1 , S2 e T permutações. Então T −1 S1 T e T −1 S2 T permitem fêmeas


sse S1 e S2 o permitem.

Demonstração:

Sendo S1 , S2 e T permutações e x uma letra qualquer, temos que:

xS1 = xS2 ⇔ xS1 T = xS2 T ⇔ (xT )T −1 S1 T = (xT )T −1 S2 T

Assim, S1 e S2 permitem fêmeas, se e só se T −1 S1 T e T −1 S2 T permitem. ¥

O lema seguinte [Kör98, p.356] estabelece que a probabilidade de duas permutações,


13
involutivas e sem pontos fixos, permitirem fêmeas é menor ou igual a 25
, ou seja, menor
ou igual a aproximadamente 12 .

Lema 4.1 A probabilidade α de duas permutações C1 e C2 , involutivas e sem pontos fixos,


13
permitirem fêmeas é menor ou igual que 25
.

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.

Assim, escrevendo C1 como produto de transposições:

(x1 x2 )(x3 x4 ) . . . (x25 x26 ),

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.

Como já vimos, quando os superiores hierárquicos do exército alemão tornaram os seus


operadores responsáveis pela selecção dos ajustes-do-indicador para cada mensagem, a
construção dos conjuntos característicos com o intuito de deduzir as permutações de P1 a
P6 deixou de fazer sentido na criptanálise da ENIGMA. De facto, como deixou de haver
uma posição dos rotores fixa para todas as mensagens do dia também deixaram de existir
as seis permutações diárias. No entanto, os alemães continuaram a cifrar duas vezes a
chave-de-mensagem, e, para cada mensagem, a ocorrência de uma fêmea no indicador
significa que a correspondente permutação29 P1 P4 , P2 P5 ou P3 P6 contém ciclos singulares
(ou singletons)30 . Esta particularidade é a base dos dois ataques que vamos analisar a
seguir.

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:

rtj WAH WIK.

O destinatário autorizado, com a máquina já configurada de acordo com a chave-diária,


coloca os rotores na posição rtj para encontrar a chave-de-mensagem a partir do indicador
WAH WIK. Já sabemos que o indicador decifrado terá o padrão αβγαβγ onde αβγ é a chave-
de-mensagem. De seguida, decifra o criptograma colocando os rotores nas posições αβγ
correspondentes à chave-de-mensagem.

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

Antes da descrição do ataque é importante salientar qual a informação à disposição dos


criptanalistas polacos e aquilo que pretendiam obter.

Informação disponível: Conjunto de mensagens de um determinado dia com os respe-


ctivos indicadores e ajustes-do-indicador;

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

Mensagem 1: rtj WAH WIK,


Mensagem 2: dqx DWJ MWR,
Mensagem 3: hpl RAW KTW,

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:

pN a posição do rotor mais à direita quando a primeira letra do indicador da Mensagem 1


foi cifrada;
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 128

qN a posição do rotor mais à direita quando a primeira letra do indicador da Mensagem 2


foi cifrada;

rN a posição do rotor mais à direita quando a primeira letra do indicador da Mensagem 3


foi cifrada.

Sabemos que:

• Premindo a tecla W nas posições pN e pN + 3 a mesma lâmpada acenderá (ou


equivalentemente será produzida uma fêmea);

• Premindo a tecla W nas posições qN + 1 e qN + 4 a mesma lâmpada acenderá;

• Premindo a tecla W nas posições rN + 2 e rN + 5 a mesma lâmpada acenderá.

Apesar de conhecermos os ajustes-dos-indicadores, necessitamos de saber os ajustes dos


anéis dos rotores e a ordem dos rotores para o dia em questão. Mesmo assim, os ajustes-
dos-indicadores são muito importantes uma vez que contêm informação acerca das posições
relativas dos rotores quando os indicadores foram produzidos.

A terceira letra de cada ajuste-do-indicador especifica a posição do rotor mais à direita


quando se inicia a cifra, ou equivalentemente a decifração, de cada chave-de-mensagem.
De igual forma, a segunda letra especifica a posição do rotor do meio e a primeira letra
a posição do rotor mais à esquerda no momento em que se começa a cifrar a chave-de-
mensagem.

Retomando o exemplo apresentado, temos os seguintes ajustes-dos-indicadores:

Mensagem 1: rtj (produziu uma fêmea 1-4),


Mensagem 2: dqx (produziu uma fêmea 2-5),
Mensagem 3: hpl (produziu uma fêmea 3-6).

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

N.o da prova Mensagem 1 Mensagem 2 Mensagem 3


1 RTJ DQX HPL
2 RTK DQY HPM
3 RTL DQZ HPN
4 RTM DRA HPO
... ... ... ...
6000 AQC MNQ QME
... ... ... ...
17576 RTI DQW HPK

Tabela 4.5: Posições relativas dos rotores na Bomba

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.

A primeira Bomba foi construída em Novembro de 1938. Era constituída, essencialmente,


por seis conjuntos de rotores (1), um motor eléctrico (2) e por um conjunto de interruptores
(3) (ver Fig. 4.11)32 .

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

Figura 4.11: Bomba

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.

Os pares de conjuntos de rotores eram configurados da seguinte forma:

• Nos três pares a ordem dos rotores é a mesma;

• Inicialmente, em cada par:

– os dois rotores da direita (rotores N ) estão desfasados três posições;


– os dois rotores do meio (rotores M ) estão nas mesmas posições;
– os dois rotores da esquerda (rotores L) estão nas mesmas posições.

Relativamente às três mensagens que estamos a analisar teríamos o procedimento repre-


sentado no esquema da Fig. 4.12 e que será descrito a seguir.

O operador ajustava a Bomba de acordo com os ajustes dos indicadores RTJ, DQX e HPL:
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 131

Figura 4.12: Esquema de funcionamento da Bomba

• 1.o Par: RTJ - RTM;

• 2.o Par: DQY - DRB34 ;

• 3.o Par: HPN - HPQ.

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:

• D está 4 posições à frente de Z, logo a letra correspondente é a que está 4 posições


atrás de R, isto é N;

• K está 11 posições à frente de Z, logo a letra correspondente é a que está 11 posições


atrás de T, isto é I;

• B está 2 posições à frente de Z, logo a letra correspondente é a que está 2 posições


atrás de J, isto é H.

Desta forma, obtemos os ajustes correctos dos anéis: NIH.

Implementação da Bomba

Utilizando um computador com um processador Pentium 4 a 2.81 GHz, esta implementação


da Bomba efectua o estudo pretendido em aproximadamente 30 minutos. Como input
temos os ajustes dos indicadores das três mensagens onde foi observada a fêmea tripla e a
letra que aparece como fêmea tripla. Como output a posição dos rotores quando a Bomba
“pára”, ou seja quando verifica as condições já referidas.

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

Programa 4.3: Bomba

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.

De acordo com a informação existente, baseada, essencialmente, nos relatos do próprio


Marian Rejewski [Rej84a, Rej84c], a Bomba polaca era um método relativamente eficaz
desde que a letra a testar (no nosso caso a letra W) não fosse alterada pelo plugboard.
Relembremos que, no período em que a Bomba terá sido usada, o número de ligações no
plugboard variava entre 5 e 8. A partir de 1 de Janeiro de 1939 esse número passa a variar
entre 7 e 10 tornando mais difícil o uso da Bomba. No entanto, outra questão se levanta
relacionada com o pressuposto fundamental para a aplicação do método da Bomba: a
ocorrência, num determinado dia, de três mensagens com três fêmeas iguais nas posições
1-4, 2-5 e 3-6.

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:

P (ocorrência de uma fêmea tripla) = 4.408 × 10−7 .

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

apenas um dia36 , os pressupostos em que se baseava o funcionamento do método da Bomba


não são muito credíveis e consequentemente a própria Bomba, pelo menos da forma como
é descrita nos estudos existentes, não era um bom método e, tal como refere Welchman
[Wel01], a sua importância terá sido demasiadamente exagerada e valorizada tanto por
Rejewski como pelos historiadores posteriores.

4.3.5.2 Folhas de Zygalski

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:

Informação disponível: Conjunto de mensagens de um determinado dia com os respe-


ctivos indicadores e ajustes-dos-indicadores;

Objectivo: Encontrar a ordem dos rotores e os ajustes dos anéis (fixos para todas as
mensagens do dia).

Suponhamos que, para um determinado dia, temos disponível um conjunto de cabeçalhos


de 28 mensagens contendo fêmeas (como o da Tabela 4.6). Relembremos que as três
primeiras letras do cabeçalho (letras minúsculas) representam os ajustes-do-indicador e as
seis letras seguintes (letras maiúsculas) correspondem ao indicador.

O uso das Folhas de Zygalski dependia de um determinado pressuposto: a não ocorrência


36
Segundo Hill [Hil04], o maior volume de tráfego diário terá sido atingido perto do final da guerra
(1945) e era apenas de cerca de 5000 mensagens.
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 136

ktl WOCWRP ewb IXDJJD gra FDRYDP ocp SANIAQ


svw DKRIKC zne ESFQXF mdo CTWYZW ptj XZIXPG
bwk TCLTSD fbg KQMKQD jvn USDMSA kgs OXTOXU
ndr OXBQSB cwi UBGUHS alq TBLTSN xet YXNYWF
eyd HCGHBY ivm VPOLYO agh SLMPZM jbr LPSTOS
edv PRSZRT prg QAAZAJ hpx YOEZOI xqo JQKHFK
grn UTSUQA bsu AQYAFK eyd BLAOIA bug RCJRVU

Tabela 4.6: Conjunto de cabeçalhos de 28 mensagens interceptadas num determinado dia

de avanço do rotor do meio (e consequentemente do rotor da esquerda) durante a dupla


cifra da chave-de-mensagem (que origina o indicador).

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.

No caso em estudo, removem-se todos os cabeçalhos tais que:


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 137

11 ≤ pN < 17 ⇔ pN ∈ {l, m, n, o, p, q}.

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.

eyd HCGHBY fbg KQMKQD cwi UBGUHS


bsu AQYAFK bwk TCLTSD ptj XZIXPG
kgs OXTOXU xet YXNYWF bug RCJRVU

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:

• As 26 prateleiras de cada estante representam as posições do rotor mais à esquerda


(L);

• As 26 caixas em cada prateleira representam as posições possíveis do rotor do meio


(M );

• Os 26 cartões em cada caixa representam as posições do rotor mais à direita (N ).

• 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

Vamos tomar como exemplo o primeiro cabeçalho:

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.

Desta forma, recolhendo vários cartões correspondentes a diferentes cabeçalhos contendo


fêmeas de vários tipos, se estes forem dispostos uns em cima dos outros e colocada uma
luz por baixo deles, apenas aqueles quadrados que deixarem passar a luz irão corresponder
a uma possível configuração dos anéis. Podem-se obter várias soluções que seriam testadas
numa máquina ENIGMA. Caso não houvesse sucesso isso significava que a suposição inicial
acerca da ordem dos rotores estava errada e assim teriamos que tentar outra sala, ou seja,
outra sequência de rotores.

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

Programa 4.4: Folhas de Zygalski (uma primeira ideia)

Podemos usar este programa da seguinte forma:

>>> l i s t a =[( ’KNR ’ , 1 ) , ( ’ABC ’ , 2 ) , ( ’SWA ’ , 3 ) , ( ’JKF ’ , 1 ) ]


>>> z y g s h e e t s ( l i s t a )
CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 140

[ ’ADG ’ , ’BCE ’ , ’BHB ’ , ’CCB ’ , ’CDD ’ , ’DBE ’ , ’FDA ’ , ’FGE ’ , ’GBB ’ ,


’HAF ’ , ’HGG ’ ]

O elevado número de cartões necessários, aliado às limitações de mão-de-obra do Biuro


Szyfrow, tornava este processo difícil de implementar manualmente e tal como Körner
[Kör98] refere “usando cartões ligeiramente mais complicados é possível reduzir o número
de cartões necessários de 263 para 26”. Na realidade, foram esses cartões “ligeiramente mais
complicados” que os criptanalistas polacos utilizaram para optimizar o método inventado
por Zygalski.

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.

Assim, a ocorrência de uma fêmea num cabeçalho como o do exemplo seguinte:

bru KPE KNT (fêmea 1-4),

implica que, na característica, a expressão P1 P4 associada ao ajuste-do-indicador bru


contém, pelo menos, um par de ciclos singulares.

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.

Figura 4.13: Folha de Zygalski

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.

À medida que se utilizavam cada vez mais indicadores e, consequentemente sobrepondo


mais folhas, podiam ocorrer duas situações:

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

Implementação das Folhas de Zygalski

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

2. Considerando a primeira letra (correspondente ao rotor L) dos ajustes-do-indicador


do primeiro cabeçalho que permite uma fêmea 1-4 (eyd) é criada a folha III-II-I Q E
da seguinte forma:
Utilizando uma ENIGMA com os rotores na ordem III-II-I, ajustes dos anéis QZZ
e com o rotor mais à esquerda (neste caso o rotor III) na posição E, a ENIGMA
percorre as 26 × 26 = 676 posições possíveis dos outros dois rotores e para cada uma
delas testa se existe uma letra que ao ser cifrada origina uma fêmea 1-4 no indicador.
Se uma determinada posição dos rotores permite pelo menos uma fêmea, perfura-
se o quadrado correspondente a essa posição (na nossa implementação “guardamos”
essa posição). Relembremos que cada quadrado na folha representa as coordenadas
(M, N ), onde M e N são as posições do rotor do meio e da direita, respectivamente.

3. Analisando os ajustes-do-indicador do segundo cabeçalho que produz fêmea 1-4 (fbg),


este vai originar uma folha que será colocada em cima da primeira folha mas, como
já vimos, com um determinado desfasamento. Para “simular” esse desfasamento, em
vez de usarmos os ajustes QZZ para os anéis, usamos

Q(Z+B-Y)(Z+G-D), ou seja, QCC.

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.

4. Continuando com o exemplo explorado, suponhamos que obtivemos a solução LJ


(posição do rotor M e do rotor N respectivamente). Um vez que, segundo o primeiro
ajuste-do-indicador eyd, as posições dos rotores M e N teriam que ser Y e D, res-
pectivamente, os ajustes dos anéis para esse dia seriam então Q(Y-L)(D-J), ou seja,
QNU.

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

mais à esquerda a testar e os conjuntos dos ajustes-dos-indicadores que produziram fêmeas.


Como output as coordenadas correspondentes aos ajustes dos anéis. Esta implementação,
ao contrário das Folhas de Zygalski originais, tem em conta todos os tipos de fêmeas.

a l f a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ "

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

Programa 4.5: Folhas de Zygalski


CAPÍTULO 4. A CONTRIBUIÇÃO POLACA 147

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

Em Novembro de 1938, usando as diversas técnicas abordadas ao longo deste capítulo, os


serviços secretos polacos estavam em condições de decifrar cerca de 75% das mensagens
interceptadas via rádio e, segundo Rejewski [Rej84a, p.265]:

“With slightly augmented personnel, we might have attained about 90 percent


of messages read.”

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.

No entanto, o aumento do número de ordens de colocação dos rotores na máquina (de


6 para 60 possibilidades) implicava a construção de 54 novas Bombas e a preparação de
mais 58 séries de Folhas de Zygalski. Os recursos materiais e humanos do Biuro Szyfrow
eram insuficientes para realizar tais tarefas e, assim, os polacos apenas conseguiam ler as
mensagens quando os três rotores originais estavam nas duas combinações abrangidas pelas
duas séries de Folhas de Zygalski existentes.

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

Em 25 de Julho de 1939, com a invasão da Polónia iminente, os polacos decidem partilhar


com os seus aliados os resultados obtidos entre 1932 e 1939 na criptanálise da ENIGMA.
Num encontro secreto perto da cidade de Pyry (Sul de Varsóvia), Rejewski, Zygalski e
Rózycki revelam a britânicos e franceses (entre os quais o capitão Bertrand) tudo o que
tinham descoberto até então. Rejewski [Rej84a] relata que, nesse encontro, “dissemos
tudo o que sabiamos e mostramos tudo o que tínhamos” – uma réplica da ENIGMA com
as ligações internas dos rotores deduzidas matematicamente, as Bombas, o Ciclómetro
e as Folhas de Zygalski – enquanto que “dos nossos convidados não aprendemos nada...
britânicos e franceses ainda não tinham conseguido ultrapassar as primeiras dificuldades”,
tais como as ligações internas dos rotores. De facto, sem os polacos, Knox e Turing41
poderiam nunca ter encontrado as ligações internas dos rotores antes de Maio de 1940,
altura em que o exército britânico captura, na Noruega, várias máquinas ENIGMA do
exército alemão. Nesse encontro, foram ainda oferecidas duas cópias da ENIGMA, que o
capitão Bertrand se encarregou de entregar aos respectivos departamentos de cifra francês
e britânico.

A invasão da Polónia pelas tropas de Hitler, a 1 de Setembro de 1939, marcou o início


da Segunda Guerra Mundial. Rejewski, Zygalski e Rózycki são obrigados a mudarem-se
para França, onde continuaram a trabalhar, perto de Paris, na criptanálise da ENIGMA
em colaboração com franceses e britânicos. Apesar de todo o trabalho desenvolvido pelos
polacos ter sido destruído antes da retirada da Polónia, os britânicos, dispondo de recursos
muito superiores aos do Biuro Szyfrow, rapidamente forneceram aos criptanalistas polacos
um conjunto completo de 60 séries de Folhas de Zygalski, para que pudessem, dessa forma,
continuar a decifrar mensagens do inimigo.

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

contributo muito importante no desenrolar dos acontecimentos durante a Segunda Guerra


Mundial. De facto, a ajuda fornecida pelos polacos aos britânicos foi determinante para
o sucesso dos trabalhos em Bletchley Park que, de acordo com muitos historiadores,
contribuíram largamente para a vitória dos Aliados na Batalha do Atlântico. David
Kahn [Kah91, p.278], vai mais longe e afirma que a quebra da cifra ENIGMA “poupou
o mundo a mais 2 anos de guerra, biliões de dólares e milhões de vidas.”
152
Apêndice A

Sistema de chaves da ENIGMA naval

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:

1. Seleccionar do conjunto de oito rotores disponíveis, os três que a lista de ajustes da


máquina especifica para esse dia;

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.

O operador de rádio iria então preparar os ajustes externos. Ele deveria:

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.

De seguida, o operador de rádio, utilizando um formulário de cifra (Figs. A.1 e A.2),


prepararia a chave individual da mensagem. Ele deveria:

Figura A.1: Cabeçalho de um formulário de cifra

1. Determinar a rede de chaves na qual a mensagem deveria ser incorporada;

2. Na lista de distribuição em vigor, encontrar os números das colunas no livro de código


atribuído a essa rede de chaves;

3. De uma dessas colunas, seleccionar aleatoriamente uma sequência de três letras


(indicador de rede);

4. Escrever esse indicador de rede nas últimas três casas da primeira linha da coluna
Book Groups (Buchgruppen) do formulário de cifra;

5. Escolher aleatoriamente uma letra dummy e escrevê-la na primeira casa da primeira


linha dessa coluna;

6. No livro de código, seleccionar aleatoriamente outra sequência de três letras (indica-


dor);
APÊNDICE A. SISTEMA DE CHAVES DA ENIGMA NAVAL 155

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;

9. Determinar a tabela de digramas em vigor para essa lista de chaves;

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

Figura A.2: Formulário de cifra


Apêndice B

Estudo dos singletons

B.1 Programa que calcula o número de singletons


def c a r a c t (H ) :
Y= [ ]
D={}
f or i in r a n g e ( l e n (H ) ) :
X,W= [ ] , [ ]
fo r j in ra n g e ( 3 ) :
X. append ( prod (H[ i ] [ j ] ,H[ i ] [ j + 3 ] , 0 ) )
c=0
fo r k in ra n g e ( l e n (X ) ) :
fo r w in r a n g e ( l e n (X[ k ] ) ) :
i f l e n (X[ k ] [ w])==1:
c=c+1
i f c in D:
s=D[ c ]
D[ c ]= s+1
else :
D[ c ]=1
return D

Programa B.1: Número de singletons nos conjuntos característicos

157
APÊNDICE B. ESTUDO DOS SINGLETONS 158

B.2 N.o de conjuntos característicos que contêm um de-


terminado número de singletons

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

Ligações internas dos rotores

C.1 Programas

C.1.1 Produtos UV, VW, WX, XY, YZ

O programa seguinte, produz todos os produtos U V , V W , W X, XY , Y Z possíveis (e


respectivos comprimentos) a partir das permutações P1 , P2 , P3 , P4 , P5 e P6 .

a l f a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ "

def prod (U, V, k ) :


B= [ ]
A= [ ]
D={}
f or i in a l f a :
i f i not in B :
p=i
X=[p ]
z=’’

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

Programa C.1: Produto de permutações

Note-se que no programa anterior a função produtos(H,k), que calcula os produtos já


referidos, pode ter como output os tipos de ciclos dos produtos bastando para isso fazer
k = 1. O número de produtos de cada tipo é depois calculado pelo programa seguinte.

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

Programa C.2: Número de produtos de cada tipo

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 P a i r S u b s c r ( done , a l 1 , a l 2 , ul1 , u l 2 ) :


i f al1 :
fo r i in ra n g e ( l e n ( a l 2 ) ) :
t l 1 , t l 2=copy . deepcopy ( a l 1 ) , copy . deepcopy ( a l 2 )
l =( t l 1 [ 0 ] , t l 2 [ i ] )
del ( t l 1 [ 0 ] , t l 2 [ i ] )
x=l e n ( a l 1 [ 0 ] )
while x :
( l , x)= r o t a t ( l , x )
ndone=copy . deepcopy ( done )
ndone . append ( l )
P a i r S u b s c r ( ndone , t l 1 , t l 2 , ul1 , u l 2 )
else :
APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 164

RSubscr ( done , ul1 , u l 2 )

def d e l e t e ( ) :
global L
L=[]

Programa C.3: Subscrições

O programa auxiliar seguinte permite comparar as subscrições produzidas pelo programa


anterior e também verificar se a solução N CN −1 é única.

def exe (D) :


C= [ ]
f or i in r a n g e ( l e n (D ) ) :
C. append ( e x e c u t e (D[ i ] ) )
return C

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)

Programa C.4: Unicidade das subscrições

O próximo programa calcula as 26 possíveis soluções para N a partir de N CN −1 .

a l f a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ "


c e s a r 1 =[’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’ ]

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

Programa C.5: Soluções para N


APÊNDICE C. LIGAÇÕES INTERNAS DOS ROTORES 167

C.2 Tipo de ciclos de UV, VW, WX, XY, YZ

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

D.1 Método do Relógio

No programa seguinte, as funções slide permitem escrever uma mensagem debaixo de


outra “deslizando-a” para a direita ou para a esquerda. A função kappa calcula o índice
de coincidência de Friedman.

def s l i d e D (m1, m2, k ) :


c=0
m=m1 [ k : l e n (m2)+k ]
f or j in r a n g e ( l e n (m2 ) ) :
i f m2 [ j ]==m[ j ] :
c=c+1
print f l o a t ( c ) / l e n (m2)

def s l i d e E (m1, m2, k ) :


c=0
m=m2 [ k : l e n (m2 ) ]
f or j in r a n g e ( l e n (m2)−k ) :
i f m1 [ j ]==m[ j ] :
c=c+1
print f l o a t ( c ) / l e n (m2)

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 )

Programa D.1: Índice de coincidência

D.2 Número de fêmeas

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.

a l f a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ "

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

Programa D.2: Número de fêmeas de cada tipo


APÊNDICE D. OUTROS PROGRAMAS 182

D.3 Fêmeas triplas

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

Programa D.3: Probabilidade de ocorrência de fêmeas triplas


Apêndice E

Tabela cronológica: desenvolvimento,


uso e criptanálise da ENIGMA

A tabela cronológica que se segue foi construída a partir de informações recolhidas de


[Kah91, Rej84a, Rej84c, Rej84b, Wel01, KW84, Orl03, Cop].

1918 Arthur Scherbius regista a patente para a máquina de cifra


ENIGMA e tenta vendê-la à marinha alemã.
1926 (Fev.) A marinha alemã começa a usar a máquina ENIGMA.
1928 (15 Jul.) O exército alemão começa a usar a máquina ENIGMA.
1928 O Departamento de Cifra polaco (Biuro Szyfrow ) reconhece o uso
da ENIGMA pelos alemães.
1928-1929 O Biuro Szyfrow adquire uma cópia da versão comercial da
ENIGMA.
1929 O Biuro Szyfrow organiza um curso de criptologia na Universidade
de Poznan para cerca de 20 estudantes de matemática.
1930 (1 Jun.) A máquina ENIGMA, após ser acrescentado um plugboard, começa
a ser usada, na sua forma final, pelo exército alemão.

183
APÊNDICE E. TABELA CRONOLÓGICA 184

1931 (Out.) Hans-Thilo Schmidt (conhecido pelo nome de código Asche),


funcionário do Departamento de Cifra germânico, aborda agentes
dos serviços secretos franceses (S.R.F.) e propõe a entrega de
documentos secretos.
1931 (8 Nov.) O capitão Gustave Bertrand, director dos S.R.F. recebe de Asche
o primeiro conjunto de documentos.
1931 (Nov.-Dez.) O Departamento de Cifra francês declara a ENIGMA inquebrável
e os documentos fornecidos por Asche são considerados inúteis. O
Departamento de Cifra britânico recebe os documentos secretos,
arquiva-os, e não oferece colaboração.
1931 (7-11 Dez.) Gustave Bertrand visita Varsóvia e revela ao Biuro Szyfrow os
documentos secretos fornecidos por Asche. Polónia e França
concordam em partilhar informação.
1932 (1 Set.) Os três melhores alunos do curso realizado em 1929 – Marian
Rejewski, Henryk Zygalski e Jerzy Rózycki – são contratados para
trabalharem, em Varsóvia, na criptanálise da ENIGMA.
1932 Baseando-se na análise da versão comercial da ENIGMA e nos
criptogramas interceptados, o criptanalista polaco Marian Rejewski
cria um modelo matemático para a ENIGMA na forma de um
conjunto de equações com permutações como incógnitas. No
entanto, o tempo necessário para encontrar uma solução tornava
o método impraticável.
1932 (Dez.) Asche entrega a Bertrand uma tabela de chaves diárias relativas a
dois meses. Estas chaves são partilhadas com os polacos. As tabelas
de chaves-diárias entregues por Asche permitem a Rejewski reduzir
o número de incógnitas, resolver a equação e, dessa forma, encontrar
as ligações internas dos três rotores da ENIGMA do exército.
1933 Os criptanalistas polacos desenvolvem o Método da Grelha e o
Método ANX e começam a decifrar mensagens do exército alemão.
1934 A primeira réplica da máquina ENIGMA militar é construída pela
AVA Radio Workshops em Varsóvia.
1935 Rózycki desenvolve o Método do Relógio que, muitas vezes, permi-
tia descobrir qual dos rotores estava na posição mais à direita na
máquina.
APÊNDICE E. TABELA CRONOLÓGICA 185

1936 Os criptanalistas polacos desenvolvem um método mecânico desi-


gnado por Ciclómetro que permitia encontrar as chaves-diárias.
1937 (1 Nov.) Entra em vigor um novo reflector na ENIGMA do exército.
1938 (15 Set.) O exército e a força aérea alemã alteram o procedimento de cifra
das mensagens, inviabilizando os métodos desenvolvidos até então.
1938 (Nov.) Os polacos desenvolvem um método mecânico designado por Bomba
que permitiria encontrar os ajustes dos anéis e posteriormente as
ligações no plugboard. São construídas seis Bombas (uma para cada
sequência de rotores em vigor na altura).
1938 (Nov.-Dez.) Zygalski desenvolve um método designado por Folhas de Zygalski.
O método era baseado num conjunto de folhas perfuradas que
permitia, tal como a Bomba, encontrar os ajustes dos anéis.
1938 (15 Dez.) São introduzidos dois novos rotores na ENIGMA do exército.
Passam a ser escolhidos 3 rotores de um conjunto de 5.
1939 (1 Jan.) O número de ligações no plugboard passa a variar entre 7 e 10
tornando muito difícil o uso da Bomba.
1939 (25-26 Jul.) Um encontro secreto tem lugar na floresta de Kabackie perto da
cidade de Pyry (Sul de Varsóvia), onde os polacos entregam aos
serviços secretos franceses e britânicos duas réplicas da máquina
e a descrição dos métodos desenvolvidos para solucionar a cifra
ENIGMA.
1939 (1 Set.) A invasão da Polónia pelas tropas de Hitler marca o começo da
Segunda Guerra Mundial.
1939 (Set.-Out.) Rejewski, Zygalski e Rózycki mudam-se para França, onde continu-
aram a trabalhar, perto de Paris, na criptanálise da ENIGMA em
colaboração com franceses e britânicos.
1940 (Maio) O exército e a força aérea alemã alteram, uma vez mais, o seu
procedimento de cifra. As forças alemãs ocupam Paris, obrigando
a uma nova retirada dos criptanalistas polacos exilados. Termina o
trabalho polaco na criptanálise da ENIGMA.
186
Referências

[Bau02] Friedrich Bauer. Decrypted Secrets: Methods and Maxims of Cryptology. Springer-
Verlag, Berlim, third edition, 2002.

[Bea99] David M. Beazley. Python Essential Reference. New Riders, 1999.

[Cop] Jack Copeland. Enigma. Artigo retirado de http://frode.home.cern.ch/frode/


crypto/Turing/0-19-825080-0.pdf em 22/11/06.

[Hil04] Marion Hill. Bletchley Park People. Sultton Publishing, 2004.

[Kah91] David Kahn. Seizing the Enigma: The Race to Break the German U-Boat Codes,
1939-1943. Arrow Books, London, 1991.

[Koz84] Wladyslaw Kozaczuk. Enigma. Arms and Armour Press, 1984.

[Kör98] T. W. Körner. The Pleasures of Counting. Cambridge University Press, 1998.

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

[Rej77] Marian Rejewski. An application of the theory of permutations in breaking the


enigma cipher. Applications of Mathematicae - Polish Academy of Sciences, 16,
1977.

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

[Rot95] Joseph Rotman. An Introduction to the Theory of Groups. Springer-Verlag, New


York, fourth edition, 1995.

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

[Sma] N. P. Smart. The enigma machine. Artigo retirado de http://www.cs.bris.ac.uk/


Teaching/Resources/COMS30124/Enigma/Enigma.pdf 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

ajustes-do-indicador, 63, 103, 121, 126 decifração, 25


anéis dos rotores, 34, 39, 40 disco de entrada, 32, 36, 40, 42
ANX (método), 103, 107–108 duplo-passo, 38, 39, 52
Asche, 82
ENIGMA, 31, 46
ataque, 26
comercial, 47
força bruta, 26, 45, 46
militar , 32
Bertrand, 82, 148 entalhes, 37, 47
Biuro Szyfrow, 59, 82
fêmeas, 121–125
Bletchley Park, 41, 81
fêmeas triplas, 127
Bomba, 103, 129–135
Folhas de Zygalski, 103, 135–147
característica (conjunto característico), 67 Friedman, 108
chave, 25
Grelha (método), 103–107
chave-de-mensagem, 61, 63, 126
chave-diária, 60, 103 indicador, 62, 63, 121, 126
Ciclómetro, 103, 114–119 indice de coincidência (K ), 108, 109
ciclos, 29
permutação, 26
disjuntos, 30
conjugadas, 84
estrutura (ou tipo), 30
involutiva, 26, 41
cifra, 25
produto (ou composição), 27, 28
monoalfabética, 26, 27
plugboard, 32, 42–44
polialfabética, 26
pontos fixos, 36, 41
simétrica, 26
cifra de César, 27, 68 Rózycki, 21, 59, 60, 103, 108
criptanálise, 26 redes, 51, 114
criptografia, 25 reflector, 31, 40–42
criptograma, 25 Rejewski, 21, 59, 60, 65, 78, 103

191
ÍNDICE 192

Relógio (método), 103, 108–113


rotores, 31, 33–40

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

Welchman, 81, 148

Zygalski, 21, 59, 60, 103

Você também pode gostar