"O gênio da criptografia saiu da garrafa." (Jan Koum, criador do WhatsApp)
Antes de começarmos a escrever programas de cifragem, vamos dar uma olhada no processo de criptografar e descriptografar com apenas lápis e papel. Isso ajudará você a entender como as cifras funcionam e a matemática que envolve a produção de suas mensagens secretas. Neste capítulo, você aprenderá o que queremos dizer com criptografia e como os códigos são diferentes das cifras. Então, você usará uma cifra simples chamada cifra de César para criptografar e descriptografar mensagens usando papel e lápis.
O que é criptografia?
Códigos e cifras
A cifra de César
Fazendo criptografia com matemática
Encriptação dupla
Historicamente, qualquer um que tenha precisado compartilhar segredos com outros, como espiões, soldados, hackers, piratas, comerciantes, tiranos e ativistas políticos, tem confiado na criptografia para garantir que seus segredos permaneçam secretos. Criptografia é a ciência de usar códigos secretos. Para entender como é a criptografia, observe os dois trechos de texto a seguir:
Cifra 1: nyrNvNwz5uNz5Ns6620Nz0N3z2v9Nyvr9y0QNnvNwvtyNzNw964N6!9N5vzxys690,NvN2z5u3vNzNrNy64v,NvNt644!5ztrvNzN yv90,Nr5uNzNsvt64v0NyvN7967v9BN6wNr33QN-m63 rz9v
Cifra 2: !NN2Nuwv,N9,vNN!vNrBN3zyN4vNN6Qvv0z6nvN7N0yv4N4zzvNNvyNNN99z0zz6wz0y3vv269w296vyNNrrNyQst560N94Nu5yrN5nz5vv5t6v63zNr5 N75sz6966NNvw6
O texto à esquerda é uma mensagem secreta que foi criptografada, ou transformada em um código secreto. É completamente ilegível para qualquer um que não saiba como decifrá-la, ou transformá-la de volta na mensagem original. A mensagem à direita é uma sequência de carateres aleatórios sem significado oculto. A criptografia mantém uma mensagem secreta de outras pessoas que não conseguem decifrá-la, mesmo que coloquem as mãos na mensagem criptografada. Uma mensagem criptografada parece exatamente um algo aleatório.
Um criptógrafo usa e estuda códigos secretos. Claro, essas mensagens secretas nem sempre permanecem secretas. Um criptoanalista, também chamado de decifrador de códigos ou hacker, pode hackear códigos secretos e ler mensagens criptografadas de outras pessoas. Este estudo ensina como criptografar e descriptografar mensagens usando várias técnicas. Mas infelizmente (ou felizmente), o tipo de hacking que você aprenderá neste estudo não é perigoso o suficiente para causar problemas com a lei.
Diferentemente de cifras, códigos são feitos para serem compreensíveis e publicamente disponíveis. Códigos substituem mensagens por símbolos que qualquer um deveria ser capaz de procurar para traduzir em uma mensagem.
No início do século XIX, um código bem conhecido veio do desenvolvimento do telégrafo elétrico, que permitiu uma comunicação quase instantânea entre continentes por meio de fios. Enviar mensagens por telégrafo era muito mais rápido do que a alternativa anterior de enviar um cavaleiro carregando uma bolsa de cartas. No entanto, o telégrafo não podia enviar diretamente cartas escritas desenhadas em papel. Em vez disso, ele podia enviar apenas dois tipos de pulsos elétricos: um pulso curto chamado de "ponto" e um pulso longo chamado de "traço".
Para converter letras do alfabeto nesses pontos e traços, você precisa de um sistema de codificação para traduzir o inglês para pulsos elétricos. O processo de conversão do inglês em pontos e traços para enviar por telégrafo é chamado de codificação, e o processo de tradução de pulsos elétricos para a língua original quando uma mensagem é recebida é chamado de decodificação. O código usado para codificar e decodificar mensagens por telégrafos (e mais tarde, rádio) era chamado de código Morse, conforme mostrado na Tabela 1. O código Morse foi desenvolvido por Samuel Morse e Alfred Vail.
Tabela 1: Codificação Internacional de Código Morse
Ao tocar em pontos e traços com um telégrafo de um botão, um operador de telégrafo poderia comunicar uma mensagem em português para alguém do outro lado do mundo quase instantaneamente!
Em contraste com os códigos, uma cifra é um tipo específico de código destinado a manter mensagens secretas. Você pode usar uma cifra para transformar um texto compreensível em português, chamado texto simples, em algo sem sentido que esconde uma mensagem secreta, chamada de texto cifrado. Uma cifra é um conjunto de regras para conversão entre texto simples e texto cifrado. Essas regras geralmente usam uma chave secreta para criptografar ou descriptografar que somente os comunicadores conhecem. Neste livro, você aprenderá várias cifras e escreverá programas para usar essas cifras para criptografar e descriptografar texto. Mas primeiro, vamos criptografar mensagens manualmente usando ferramentas simples de papel.
A primeira cifra que você aprenderá é a cifra de César, que recebeu esse nome em homenagem a Júlio César, que a usou há 2000 anos. A boa notícia é que ela é simples e fácil de aprender. A má notícia é que, por ser tão simples, também é fácil para um criptoanalista quebrá-la. No entanto, ainda é um exercício de aprendizado útil.
A cifra de César funciona substituindo cada letra de uma mensagem por uma nova letra após deslocar o alfabeto. Por exemplo, Júlio César substituiu letras em suas mensagens deslocando as letras do alfabeto para baixo em três, e então substituindo cada letra pelas letras em seu alfabeto deslocado.
Por exemplo, cada A na mensagem seria substituído por um D, cada B seria um E, e assim por diante. Quando César precisava mudar letras no final do alfabeto, como Y, ele voltava para o início do alfabeto e mudava três lugares para B. Nesta seção, criptografaremos uma mensagem manualmente usando a cifra de César.
Para tornar a conversão de texto simples em texto cifrado usando a cifra de César mais fácil, usaremos uma roda de cifras, também chamada de disco de cifras. A roda de cifras consiste em dois anéis de letras; cada anel é dividido em 26 slots (para um alfabeto de 26 letras). O anel externo representa o alfabeto de texto simples, e o anel interno representa as letras correspondentes no texto cifrado. O anel interno também numera as letras de 0 a 25. Esses números representam a chave de criptografia, que neste caso é o número de letras necessárias para mudar de A para a letra correspondente no anel interno. Como o deslocamento é circular, deslocar com uma chave maior que 25 faz os alfabetos se enrolarem, então deslocar em 26 seria o mesmo que deslocar em 0, deslocar em 27 seria o mesmo que deslocar em 1, e assim por diante.
Você pode acessar uma roda de cifra virtual online aqui. A Figura 1 mostra como ela se parece:
Figura 1.1: Roda de cifra
Uma roda de cifra de papel para impressão também está disponível aqui. Recorte os dois círculos e coloque-os um em cima do outro, colocando o menor no meio do maior. Insira um alfinete ou prego no centro de ambos os círculos para que você possa girá-los no lugar.
Usando o papel ou a roda virtual, você pode criptografar mensagens secretas manualmente.
Para começar a criptografar, escreva sua mensagem em português em um pedaço de papel. Para este exemplo, criptografaremos a mensagem A SENHA SECRETA E ROSALIND. Em seguida, gire a roda interna da roda de cifra até que seus slots coincidam com os slots na roda externa. Observe o ponto ao lado da letra A na roda externa. Anote o número na roda interna ao lado deste ponto. Esta é a chave de criptografia
Por exemplo, na Figura 1., o A do círculo externo está sobre o número 8 do círculo interno. Usaremos essa chave de criptografia para criptografar a mensagem em nosso exemplo, conforme mostrado na Tabela 2:
Tabela 2: Mensagem encriptada com a Cifra de César com a chave no valor 8.
Para cada letra na mensagem, encontre-a no círculo externo e substitua-a pela letra correspondente no círculo interno. Neste exemplo, a primeira letra na mensagem é A (o primeiro A em “A SENHA...), então encontre a letra A no círculo externo e então encontre a letra correspondente no círculo interno, que é a letra I. Então a mensagem secreta sempre substitui um A por um I. (Se você estivesse usando uma chave de criptografia diferente, cada A no texto simples seria substituído por uma letra diferente). A próxima letra na mensagem é S, que se transforma em A. A letra E se transforma em M. Cada letra na roda externa sempre criptografa para a mesma letra na roda interna. Para economizar tempo, depois de procurar o primeiro A em “A SENHA…” e ver que ele criptografa para I, você pode substituir cada A na mensagem por I, então você só precisa procurar uma letra uma vez.
Após criptografar a mensagem inteira, a mensagem original, A SENHA SECRETA E ROSALIND, se torna I AMVPI AMKZMBI M ZWAITQVL. Observe que caracteres que não sejam letras, como os espaços, não são alterados.
Agora você pode enviar esta mensagem criptografada para alguém (ou mantê-la para você), e ninguém poderá lê-la a menos que você diga a eles a chave secreta de criptografia. Certifique-se de manter a chave de criptografia em segredo; o texto cifrado pode ser lido por qualquer um que saiba que a mensagem foi criptografada com a chave 8.
Para decifrar um texto cifrado, comece pelo círculo interno da roda de cifras e depois vá para o círculo externo. Por exemplo, digamos que você receba o texto cifrado P CDKP HTCWP T QXDXCUD. Você não conseguiria decifrar a mensagem a menos que soubesse a chave (ou a menos que fosse um hacker inteligente). Felizmente, seu amigo já lhe disse que usa a chave 15 para suas mensagens. A roda de cifras para essa chave é mostrada na Figura 2:
Figura 2: Cifra de César com a chave no valor 15.
Agora você pode alinhar a letra A no círculo externo (aquele com o ponto abaixo) sobre a letra no círculo interno que tem o número 15 (que é a letra P). Então, encontre a primeira letra na mensagem secreta no círculo interno, que é P, e olhe para a letra correspondente no círculo externo, que é A. A segunda letra no texto cifrado, C, decifra para a letra N. Decifre o resto das letras no texto cifrado de volta para o texto simples, e você obterá a mensagem A NOVA SENHA E BIOINFO, como mostrado na Tabela 3:
Tabela 3: Decriptografar a mensagem com a cifra de César com o valor da chave em 15.
Se você usou uma chave incorreta, como 16, a mensagem descriptografada seria Z MNUZ RDMGZ D AHNHMEN, que é ilegível. A menos que a chave correta seja usada, a mensagem descriptografada não será compreensível.
A roda de cifras é uma ferramenta conveniente para criptografar e descriptografar com a cifra de César, mas você também pode criptografar e descriptografar usando aritmética. Para fazer isso, escreva as letras do alfabeto de A a Z com os números de 0 a 25 abaixo de cada letra. Comece com 0 abaixo do A, 1 abaixo do B e assim por diante até que 25 esteja abaixo do Z. A Tabela 4 mostra como deve ser:
Tabela 4: Enumerando o alfabeto de 0 a 25.
Você pode usar esse código de letras para números para representar letras. Esse é um conceito poderoso, porque permite que você faça contas com letras. Por exemplo, se você representar as letras GATO como os números 6, 0, 19 e 14, você pode adicionar 3 para obter os números 9, 3, 22 e 17. Esses novos números representam as letras JDWR, como mostrado na Tabela 4. Você acabou de "adicionar" 3 à palavra gato! Mais tarde, seremos capazes de programar no computador para fazer essa conta para nós.
Para usar aritmética para criptografar com a cifra de César, encontre o número sob a letra que você deseja criptografar e adicione o número da chave a ele. A soma resultante é o número sob a letra criptografada. Por exemplo, vamos criptografar OI. COMO VAI VOCE? usando a chave 10. (Você pode usar qualquer número de 1 a 25 para a chave.) Primeiro, encontre o número sob O, que é 14. Em seguida, adicione 10 a este número: 14 + 10 = 24. Como o número 24 está sob a letra Y, a letra O criptografa para Y.
Da mesma forma, para criptografar a letra I (8), adicione 8 + 10 = 18. O número acima de 18 é S, então I é criptografado para S, e assim por diante.
Este processo funciona bem até a letra V. O número abaixo de V é 21. Mas 21 mais 10 é 31, e a lista de números só vai até 25. Se a soma do número da letra e da chave for 26 ou mais, você precisa subtrair 26 dela. Neste caso, 31 − 26 = 5. A letra acima do número 5 é F, então V criptografa para F usando a chave 10. Quando você criptografa cada letra na mensagem, o texto cifrado será YS. MYWY FKS FYMO?
Para decifrar o texto cifrado, subtraia a chave em vez de adicioná-la. O número da letra F do texto cifrado é 5. Subtraia 10 de 5 para obter −5. Como nossa regra de “subtrair 26” para criptografar, quando o resultado é menor que 0 ao decifrar, precisamos adicionar 26. Como −5 + 26 = 21, a letra F do texto cifrado decifra para V.
Como você pode ver, você não precisa de uma roda de cifras para usar a cifra de César. Tudo o que você precisa é de um lápis, um pedaço de papel e alguma matemática simples!
Você pode pensar que criptografar uma mensagem duas vezes usando duas chaves diferentes dobraria a força da criptografia. Mas esse não é o caso da cifra de César (e da maioria das outras cifras). Na verdade, o resultado da criptografia dupla é o mesmo que você obteria após uma criptografia normal. Vamos tentar criptografar uma mensagem duas vezes para ver o porquê.
Por exemplo, se você criptografar a palavra PEIXE usando a chave 3, você está adicionando 3 ao número da letra do texto simples, e o texto cifrado resultante seria SHLAH. Se você então criptografar SHLAH, dessa vez usando a chave 4, o texto cifrado resultante seria WLPEL porque você está adicionando 4 ao número da letra do texto simples. Mas isso é o mesmo que criptografar a palavra PEIXE uma vez com uma chave de 7.
Para a maioria das cifras, criptografar mais de uma vez não fornece força adicional. Na verdade, se você criptografar algum texto simples com duas chaves que somam 26, o texto cifrado resultante será o mesmo que o texto simples original!
Exercício 01: Criptografar as seguintes entradas do Dicionário do Diabo de Ambrose Bierce com as chaves fornecidas:
AMBIDESTRO: Capaz de escolher com igual habilidade um bolso direito ou um esquerdo. (chave: 4)
GUILHOTINA: Uma máquina que faz um frances encolher os ombros com razao. (chave: 17)
IMPIEDADE: Sua irreverencia para com minha divindade. (chave: 21)
Exercício 02: Decifre os seguintes textos cifrados com as chaves fornecidas:
ZXAI: JB IGPYT PH KTOTH JHPSD EDG THRDRTHTH CP PBÉGXRP T PBTGXRPCDH CP THRDRXP. (chave: 15)
MQTSWXSV: YQ EWTMVERXI VMZEP EW LSRVEW TÚFPMGEW. (chave: 4)
Exercício 03: Criptografe a seguinte frase com a chave 0: Este é um exemplo bobo.
Exercício 04: Aqui estão algumas palavras e suas criptografias. Qual chave foi usada para cada palavra?
ROSEBUND - LIMYVOX
YAMAMOTO - PRDRDFKF
ASTRONOMIA - HZAYVUVTPH
Exercício 05: O que essa frase retorna quando criptografada com a chave 8 descriptografa com a chave 9? “UMMSVMAA: Cvkwuuwv xibqmvkm qv xtivvqvo i zmdmvom bpib qa ewzbp epqtm”.
A cifra de César e outras cifras semelhantes foram usadas para criptografar informações secretas por vários séculos. Mas se você quisesse criptografar uma mensagem longa — digamos, um livro inteiro — poderia levar dias ou semanas para criptografar tudo manualmente. É aqui que a programação pode ajudar. Um computador pode criptografar e descriptografar uma grande quantidade de texto em menos de um segundo!
Para usar um computador para criptografia, você precisa aprender a programar, ou instruir, o computador a fazer os mesmos passos que acabamos de fazer usando uma linguagem que o computador possa entender. Felizmente, aprender uma linguagem de programação como Python não é tão difícil quanto aprender uma língua estrangeira como japonês ou russo. Você também não precisa saber muita matemática além de adição, subtração e multiplicação. Tudo o que você precisa é de um computador!
Vamos passar para o Capítulo 2, onde aprenderemos como usar a IDLE do Python para explorar o código uma linha de cada vez.