Código (criptografia) - Code (cryptography)

Uma parte do " Zimmermann Telegram " descriptografada pelos decifradores da Inteligência Naval Britânica . A palavra Arizona não estava no livro de código alemão e, portanto, teve que ser dividida em sílabas fonéticas.

Em criptologia , um código é um método usado para criptografar uma mensagem que opera no nível de significado; isto é, palavras ou frases são convertidas em outra coisa. Um código pode transformar "mudança" em "CVGDK" ou "salão de coquetéis". A Agência de Segurança Nacional dos EUA definiu um código como "Um criptossistema de substituição em que os elementos de texto simples são principalmente palavras, frases ou sentenças, e os equivalentes de código (chamados de" grupos de códigos ") normalmente consistem em letras ou dígitos (ou ambos) de outra forma combinações sem sentido de comprimento idêntico. " Um livro de código é necessário para criptografar e descriptografar as frases ou palavras.

Em contraste, as cifras criptografam mensagens no nível de letras individuais, ou pequenos grupos de letras, ou mesmo, nas cifras modernas, bits individuais . As mensagens podem ser transformadas primeiro por um código e, em seguida, por uma cifra. Essa criptografia múltipla , ou "supercriptografia", visa tornar a criptoanálise mais difícil.

Outra comparação entre códigos e cifras é que um código normalmente representa uma letra ou grupos de letras diretamente, sem o uso de matemática. Como tal, os números são configurados para representar estes três valores: 1001 = A, 1002 = B, 1003 = C, .... A mensagem resultante seria 1001 1002 1003 para comunicar ABC. Cifras, no entanto, utilizam uma fórmula matemática para representar letras ou grupos de letras. Por exemplo, A = 1, B = 2, C = 3, .... Assim, a mensagem ABC resulta da multiplicação do valor de cada letra por 13. A mensagem ABC, então, seria 13 26 39.

Os códigos têm uma variedade de desvantagens, incluindo suscetibilidade à criptoanálise e a dificuldade de gerenciar os complicados livros de código , então as cifras são agora a técnica dominante na criptografia moderna.

Em contraste, como os códigos são representacionais, eles não são suscetíveis à análise matemática dos elementos individuais do livro de códigos. Em nosso exemplo, a mensagem 13 26 39 pode ser decifrada dividindo cada número por 13 e, em seguida, classificando-os em ordem alfabética. No entanto, o foco da criptoanálise do livro de código é a frequência comparativa dos elementos de código individuais que correspondem à mesma frequência de letras nas mensagens de texto simples usando a análise de frequência . No exemplo acima, o grupo de códigos, 1001, 1002, 1003, pode ocorrer mais de uma vez e essa frequência pode corresponder ao número de vezes que o ABC ocorre em mensagens de texto simples.

(No passado, ou em contextos não técnicos, o código e a cifra costumam ser usados ​​para se referir a qualquer forma de criptografia ).

Códigos de uma e duas partes

Os códigos são definidos por "codebooks" (físicos ou nocionais), que são dicionários de codegroups listados com seu texto simples correspondente. Os códigos originalmente tinham os grupos de códigos atribuídos em 'ordem de texto simples' para conveniência do código projetado ou do codificador. Por exemplo, em um código que usa grupos de códigos numéricos, uma palavra de texto simples começando com "a" teria um grupo de baixo valor, enquanto outra começando com "z" teria um grupo de alto valor. O mesmo livro de código pode ser usado para "codificar" uma mensagem de texto simples em uma mensagem codificada ou "codetexto" e "decodificar" um codetexto de volta em mensagem de texto simples.

Para dificultar a vida dos decifradores de códigos, os criadores de códigos criaram códigos sem nenhuma relação previsível entre os grupos de códigos e a ordenação do texto simples correspondente. Na prática, isso significava que dois livros de código eram agora necessários, um para localizar grupos de códigos para codificação e o outro para procurar grupos de códigos para encontrar texto simples para decodificação. Esses códigos de "duas partes" exigiam mais esforço para serem desenvolvidos e duas vezes mais para serem distribuídos (e descartados com segurança quando substituídos), mas eram mais difíceis de quebrar. O Zimmermann Telegram em janeiro de 1917 usou o sistema de código diplomático alemão "0075" em duas partes, que continha mais de 10.000 frases e palavras individuais.

Código único

Um código único é uma palavra, frase ou símbolo pré-arranjado que se destina a ser usado apenas uma vez para transmitir uma mensagem simples, geralmente o sinal para executar ou abortar algum plano ou confirmar que foi bem-sucedido ou falhou. Os códigos únicos costumam ser projetados para serem incluídos no que parece ser uma conversa inocente. Feitos corretamente, eles são quase impossíveis de detectar, embora um analista treinado que monitora as comunicações de alguém que já levantou suspeitas possa reconhecer um comentário como "Tia Bertha entrou em trabalho de parto" como tendo um significado sinistro. Exemplos famosos de códigos únicos incluem:

Às vezes, as mensagens não são combinadas de antemão e contam com conhecimento compartilhado, esperançosamente, conhecido apenas pelos destinatários. Um exemplo é o telegrama enviado ao presidente dos Estados Unidos, Harry Truman , então na Conferência de Potsdam para se encontrar com o primeiro-ministro soviético Joseph Stalin , informando Truman sobre o primeiro teste bem-sucedido de uma bomba atômica .

"Operado nesta manhã. O diagnóstico ainda não foi concluído, mas os resultados parecem satisfatórios e já superam as expectativas. Comunicado de imprensa local necessário, visto que o interesse se estende por uma grande distância. Dr. Groves satisfeito. Ele retorna amanhã. Eu o manterei informado."

Veja também o one-time pad , um algoritmo de cifra não relacionado

Código idiota

Um código idiota é um código criado pelas partes que o utilizam. Esse tipo de comunicação é semelhante aos sinais manuais usados ​​pelos exércitos em campo.

Exemplo: Qualquer frase em que 'dia' e 'noite' são usados ​​significa 'ataque'. O local mencionado na frase a seguir especifica o local a ser atacado.

  • Texto simples: Ataque X.
  • Codetexto: Andamos dia e noite pelas ruas, mas não conseguimos encontrar! Amanhã iremos para o X.

Um dos primeiros usos do termo parece ser por George Perrault, um personagem do livro de ficção científica Friday, de Robert A. Heinlein :

O tipo mais simples [de código] e, portanto, impossível de quebrar. O primeiro anúncio dizia à pessoa ou pessoas interessadas para cumprir o número sete ou esperar o número sete ou dizia algo sobre algo designado como sete. Este diz o mesmo com relação ao item de código número dez. Mas o significado dos números não pode ser deduzido por meio de análise estatística porque o código pode ser alterado muito antes que um universo estatístico útil possa ser alcançado. É um código idiota ... e um código idiota nunca pode ser quebrado se o usuário tiver o bom senso de não ir com muita frequência ao poço.

O especialista em terrorismo Magnus Ranstorp disse que os homens que executaram os ataques de 11 de setembro nos Estados Unidos usaram o e-mail básico e o que ele chama de "código idiota" para discutir seus planos.

Criptoanálise de códigos

Embora seja fácil resolver uma cifra de substituição monoalfabética , resolver até mesmo um código simples é difícil. Descriptografar uma mensagem codificada é um pouco como tentar traduzir um documento escrito em uma língua estrangeira, com a tarefa basicamente equivalente a construir um "dicionário" dos grupos de código e as palavras em texto simples que eles representam.

Uma pegada em um código simples é o fato de que algumas palavras são mais comuns do que outras, como "the" ou "a" em inglês. Em mensagens telegráficas, o grupo de códigos para "PARAR" (ou seja, final de frase ou parágrafo) é geralmente muito comum. Isso ajuda a definir a estrutura da mensagem em termos de frases, se não seu significado, e isso é criptanaliticamente útil.

Progresso adicional pode ser feito em relação a um código, coletando muitos textos de código criptografados com o mesmo código e, em seguida, usando informações de outras fontes

  • espiões
  • jornais
  • bate-papo de coquetel diplomático
  • o local de onde a mensagem foi enviada
  • para onde estava sendo enviado (ou seja, análise de tráfego )
  • a hora em que a mensagem foi enviada,
  • eventos que ocorreram antes e depois de a mensagem ser enviada
  • os hábitos normais das pessoas que enviam as mensagens codificadas
  • etc.

Por exemplo, um determinado grupo de códigos encontrado quase exclusivamente em mensagens de um determinado exército e em nenhum outro lugar pode muito bem indicar o comandante desse exército. Um grupo de códigos que aparece em mensagens que precedem um ataque em um local específico pode muito bem representar esse local.

Os berços podem ser uma dádiva imediata para as definições dos grupos de códigos. Conforme os grupos de códigos são determinados, eles podem gradualmente construir uma massa crítica, com mais e mais grupos de códigos revelados a partir do contexto e de suposições fundamentadas. Os códigos de uma parte são mais vulneráveis ​​a essas conjecturas educadas do que os códigos de duas partes, uma vez que se o número de código "26839" de um código de uma parte for determinado como "bulldozer", então o número de código inferior "17598" provavelmente representará uma palavra de texto simples que começa com "a" ou "b". Pelo menos, para códigos simples de uma parte.

Vários truques podem ser usados ​​para " plantar " ou "semear" informações em uma mensagem codificada, por exemplo, executando um ataque em um determinado momento e local contra um inimigo e, em seguida, examinando as mensagens de código enviadas após o ataque. Erros de codificação são um suporte particularmente útil em um código; as pessoas cometem erros de forma confiável, às vezes desastrosos. O plantio de dados e a exploração de erros também funcionam contra cifras.

  • A maneira mais óbvia e, pelo menos em princípio, a mais simples de decifrar um código é roubar o livro de códigos por meio de suborno, roubo ou invasão de grupos - procedimentos às vezes glorificados pela frase "criptografia prática" - e isso é uma fraqueza dos códigos e cifras, embora os livros de códigos sejam geralmente maiores e usados ​​por mais tempo do que as chaves de cifras . Embora um bom código possa ser mais difícil de quebrar do que uma cifra, a necessidade de escrever e distribuir livros de código é seriamente problemática.

Construir um novo código é como construir uma nova linguagem e escrever um dicionário para ela; era um trabalho especialmente grande antes dos computadores. Se um código for comprometido, toda a tarefa deve ser feita tudo de novo, e isso significa muito trabalho para os criptógrafos e os usuários do código. Na prática, quando os códigos eram amplamente usados, eles geralmente eram alterados periodicamente para frustrar os decifradores de códigos e para limitar a vida útil de livros de códigos roubados ou copiados.

Depois que os códigos são criados, a distribuição do livro de códigos é logisticamente desajeitada e aumenta as chances de o código ser comprometido. Há um ditado que diz que "Três pessoas podem guardar um segredo se duas delas estiverem mortas" ( Benjamin Franklin - Wikiquote ) e, embora possa ser um exagero, um segredo se torna mais difícil de guardar se for compartilhado entre várias pessoas. Os códigos podem ser considerados razoavelmente seguros se forem usados ​​apenas por algumas pessoas cuidadosas, mas se exércitos inteiros usarem o mesmo livro de códigos, a segurança se tornará muito mais difícil.

Em contraste, a segurança das cifras geralmente depende da proteção das chaves de cifras. As chaves criptográficas podem ser roubadas e as pessoas podem traí-las, mas são muito mais fáceis de alterar e distribuir.

Superencifragem

Era comum cifrar uma mensagem depois de codificá-la primeiro, para aumentar a dificuldade da criptoanálise. Com um código numérico, isso era normalmente feito com um "aditivo" - simplesmente um número de chave longo que era adicionado dígito a dígito aos grupos de código, módulo 10. Ao contrário dos livros de código, os aditivos eram alterados com frequência. O famoso código da Marinha japonesa, JN-25 , tinha esse design.

Referências

  1. ^ Uma história da segurança das comunicações dos EUA; as palestras David G. Boak , National Security Agency (NSA), Volumes I, 1973, Volumes II 1981, parcialmente lançado em 2008, partes adicionais desclassificadas em 14 de outubro de 2015
  2. ^ "16.2: Cifras de substituição" . Mathematics LibreTexts . 2020-01-22 . Página visitada em 2021-09-19 .
  3. ^ "Zimmermann Telegram: The Original Draft" , 2007, Joachim von zur Gathen, "Cryptologia", Volume 31, Edição 1
  4. ^ Sexta-feira (1982) por Robert A. Heinlein
  5. ^ Radio Free Europe / Radio Liberty: "Oriente Médio: Militantes islâmicos levam a jihad para a Internet" Por Jeffrey Donovan , 16 de junho de 2004.

Fontes

  • Kahn, David (1996). The Codebreakers: The Comprehensive History of Secret Communication from Ancient Times to the Internet . Scribner.
  • Pickover, Cliff (2000). Cryptorunes: Códigos e escrita secreta . Pomegranate Communications. ISBN 978-0-7649-1251-1.
  • Boak, David G. (julho de 1973) [1966]. "Códigos" (PDF) . A History of US Communications Security; as palestras de David G. Boak, vol. I (edição de revisão da desclassificação de 2015). Ft. George G. Meade, MD: Agência de Segurança Nacional dos EUA. pp. 21–32 . Recuperado em 23-04-2017 .

Veja também