Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enigma #36

Open
Lenakirara opened this issue Oct 17, 2020 · 0 comments
Open

Enigma #36

Lenakirara opened this issue Oct 17, 2020 · 0 comments

Comments

@Lenakirara
Copy link
Contributor

ENIGMA

Durante a Segunda Grande Guerra Mundial, os Aliados conseguiram interceptar grande parte das comunicações dos países do Eixo, porém estas mensagens viam criptografadas utilizando um dispositivo alemão conhecido como ENIGMA. Esta máquina era semelhante a uma máquina de escrever, porém as teclas eram ajustadas por 12 rotores internos. Sendo assim para descobrir o conteúdo das mensagens criptografadas deveria se configurar cada um destes rotores em determinada posição para que quando a mensagem fosse datilografada na ENIGMA, esta fizesse sentido.

Os aliados trabalharam por anos tentando quebrar a criptografia da ENIGMA até que em 1944 uma equipe de matemáticos criou uma máquina capaz de quebrar o código da ENIGMA. Porém esta máquina exigia uma complexa configuração e demorava uma quantidade de tempo para se ajustar e executar a quebra das mensagens em definitivo.

Com o passar do tempo os matemáticos chegaram a três configurações básicas, onde para cada configuração era exigido um tempo de ajuste das configurações. A Configuração A demorava 60 minutos para ser ajustada, a Configuração B demorava 40 minutos e a Configuração C demorava 20 minutos.

Entretanto para cada configuração ajustada, a Máquina tem um tempo para quebrar o código, sendo que para isso cada um dos rotores deveria ser “quebrado” individualmente. Infelizmente cada configuração quebra apenas um número de rotores da ENIGMA de cada vez, sendo que após as quebras dos rotores a Máquina deve ser reajustada (considerar novamente tempo de ajuste) para que volte a continuar a quebrar os códigos até que todos os rotores da ENIGMA tenham sido quebrados. Considere que a Configuração A quebra 6 rotores por ajuste, a Configuração B 2 rotores por ajuste e a Configuração C 6 rotores
Após a quebra de todos os rotores ainda sim é necessário um processo intermediário para a quebra das mensagens propriamente ditas. Este processo é realizado nas mensagens que são interceptadas e ele demora um tempo diferenciado para cada configuração. Na realidade este processo irá definir, após a quebra da ENIGMA, quantas mensagens serão quebradas por minuto pela máquina. Chegamos então aos seguintes valores, a Configuração A, irá conseguir quebrar 1 mensagem a cada 5 minutos, a Configuração B quebrará 1 mensagem por minuto e na Configuração C chega a marca de 1 mensagem a cada 30 minutos.
Como nem tudo é fácil na guerra os países do Eixo têm um protocolo onde a mensagem inicial que gera a chave da ENIGMA é modificada de tempos em tempos. Graças aos serviços de inteligência dos Aliados a informação do tempo de validade das chaves são conhecidas. Sendo assim todos os dias os Aliados interceptam as mensagens e tem em mãos o tempo de validade da chave da ENIGMA.

Objetivo do desafio é:

  1. Construir um algoritmo que receba o tempo de validade da Chave da ENIGMA (em minutos) e indique qual configuração A, B ou C que quebra a maior quantidade de mensagens até o final da validade da Chave. Informar a configuração que possuir melhor desempenho em um ciclo de chave único (1 período de validade) considerando que são interceptadas pelos Aliados, 1 mensagem por minuto.

  2. Indicar qual é a melhor configuração a ser realizada para se receber mensagens decodificadas no menor tempo possível?

  3. No caso de os países do Eixo descobrirem sobre a Máquina de decodificação aliada e suas configurações. Qual seria o tempo mínimo de troca de chaves que deveriam utilizar para que os Aliados não conseguissem decodificar nenhuma mensagem?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant