|
|
||
|
|
Um segundo esquema de codificação que nos vem à mente recorre a uma transposição ou baralhamento de letras, e já não uma substituição, seguindo um padrão [exemplo]. Mensagens muito curtas que recorram a este esquema não podem muitas vezes serem decifradas sem quaisquer ambiguidades, mas as muito longas tornam-se também aqui muito inseguras, existindo métodos gerais para a sua decifração já publicados desde 1878 para textos comuns em inglês.
O que poderá ser feita para tornar os códigos um pouco mais difíceis de decifrar?
Bem a ideia é fortalecer o esquema substituicional de modo a que cada letra do original não seja sempre trocada pela mesma substituta na forma codificada. Este tipo de sistema de codificação muitas vezes conhecido como a cifra de Vigenere, não substitui obviamente cada letra particular da mensagem original pelo mesmo substituto. O problema é mais uma vez a ocorrência não aleatória de letras e palavras em qualquer língua. E, se, contudo usássemos como chave um texto que nunca se repetisse a si próprio? Nestas cifras de Vigenere de chave contínua, as palavras e letras comuns que acabam por denunciar o código, nunca se repetiriam na forma codificada, de modo que teríamos finalmente a certeza de possuir um código inviolável.
De facto durante quase três séculos após a sua invenção pensou-se que essas cifras de chave contínua fossem mesmo absolutamente seguras. Em 1883, contudo, foi descoberto um método de decifração mesmo para códigos deste tipo. A chave de resolução envolve, mais uma vez, a frequência não aleatória de ocorrência das letras e das palavras que agora constituem quer a mensagem quer a chave. Pior do que isso, o desenvolvimento de técnicas computacionais rápidas na década de 50 tornou as cifras de chave contínua mais vulneráveis do que nunca.
A conclusão inevitável é que, para se obter uma segurança absoluta, a chave tem de ser aleatória, nunca se repetir e tem, por isso, de ter comprimento igual à soma dos comprimentos de todas as mensagens a serem codificadas [exemplo]. Contudo, essa conclusão necessita de uma clarificação adicional:
- Só é válida quando o código contém um grau de complexidade ( o termo entropia é por vezes usado) pelo menos tão grande como o da mensagem, isto é, a chave terá de possuir pelo menos tantos símbolos diferentes quantas as letras do alfabeto. Se por exemplo a chave é uma selecção aleatória de todas as 23 letras do alfabeto, a mensagem é segura.
A substituição aleatória letra a letra por meio de uma chave alfabética completa e única é, portanto, a solução da cifra inquebrável. Devido à garantia de segurança, chaves de uma única utilização como estas têm sido frequentemente encontradas na posse de agentes secretos estrangeiros detidos.
Apesar da sua absoluta segurança, no entanto, estes sistemas de chave de utilização única não são obviamente adaptados à transmissão de grandes quantidades de informação secreta, como a que seria necessária, por exemplo, em tempos de guerra.
Em regra geral os códigos são tanto mais difíceis de violar quanto mais informação estatística negarem a um possível decifrador.
Todos os sistemas de codificação até agora discutidos têm, apesar da suas formas variadas e graus de segurança diferentes, uma coisa em comum: são simétricos, no sentido de que tanto o codificador como o receptor têm de possuir a chave relevante do código antes de qualquer informação poder ser transmitida. Ora isso é um grande inconveniente e também uma perigosa ameaça à segurança, visto implicar não só uma identificação prévia de todas as possíveis pessoas ou organizações a quem possa ser necessário transmitir informações, como o envio a cada uma delas da chave (cuja confidencialidade terão de proteger). Caso sucedesse um desses receptores previstos cair, juntamente com a sua chave, em mãos inimigas, todo o sistema entraria em colapso, tornando-se inútil.
A reacção geral a esse facto tem sido, até há bem pouco tempo, do tipo : É pena, mas as coisas são mesmo assim!. Surpreendentemente, contudo, as coisas não são mesmo nada assim e essa conclusão espantosa foi extraída pela primeira vez em meados da década de 70. E, caso o leitor se tenha estado a perguntar onde os números primos entram no contexto, a resposta é no contexto de código assimétrico.
A ideia foi pela primeira vez publicada em 1976, por um grupo de investigadores da Universidade de Stanford, na Califórnia nos EUA.
Chamaram-lhe sistema de codificação de chave pública, porque, ao usá-lo, uma pessoa pode anunciar ao mundo inteiro o modo como outra pessoa que pretenda enviar-lhe uma mensagem secreta deverá codificá-la. Isso poderia ser feito, por exemplo, através de um catálogo público.
Ora, e isso é que é incrível, embora qualquer pessoa possa codificar uma mensagem para enviar à primeira, só esta a pode descodificar, consequentemente, torna-se completamente desnecessário a cada par de utilizadores potenciais trocar e guardar à custa da sua própria vida a mesma chave, antes de tomarem a decisão de efectuar qualquer comunicação. Cada receptor possui o seu próprio segredo de descodificação e só ele tem necessidade de o proteger.
Ao publicar as instruções de codificação, tornando-as universalmente conhecidas, o receptor potencial está deliberadamente a oferecer metade do segredo criptográfico.
O motivo porque o faz é que, a partir desse momento, qualquer pessoa lhe pode codificar informações, mesmo tratando-se de pessoas cuja existência ele nem sequer conhece. O receptor, contudo, continua a ser o único indivíduo do mundo a saber a outra metade da chave que é absolutamente necessária à descodificação.
Tudo isso soa um pouco a magia negra e, visto que, na verdadeira realização numa máquina, o método envolve a manipulação de números extremamente grandes, seremos obrigados a trivializar o procedimento para vermos como funciona. Vamos ilustrar a técnica usando números suficientemente pequenos para serem tratados com papel e lápis (ou, no pior dos casos, com o auxílio de uma calculadora).
Pense num número que seja produto de dois números primos. Nós escolhemos, por motivos de demonstração, o número 14, que é 7x2. Subtraia agora uma unidade a cada um desses primos, para dar 1 e 6, e multiplique esses dois números. Mas "porquê?", perguntará. Confie em nós ... por enquanto. Deixe-me simbolizar este novo número 1x6=6 pela letra grega F, visto que ele desempenha um papel muito importante nos sistemas de codificação, conforme veremos adiante.
Escolho agora um número que não tenha qualquer factor com F.Visto que 2 e 3 são os factores de F=6, isso deixa-nos por aberto a escolha de qualquer número que não seja divisível quer por 2 quer por 3. Vamos escolher o 5, pois é o meno dos número permitidos e pretendemos manter os nossos números tão pequenos quanto possível para a nossa demonstração "trivial".Esse número 5, juntamente com o nosso número original 14 são aqueles que anunciamos ao mundo no nosso catálogo público.
Se pretender codificar-nos uma mensagem, deverá proceder do seguinte modo:
1. Substituia as letras do alfabeto da forma óbvia A=1, B=2, C=3, e assim sucessivamente.
2. A codificação é então efectuada substituindo o número correspondente a cada letra por esse mesmo número elevado à quinta potência (sendo 5 o primeiro dos nossos números do catálogo), mas registando apenas o resto quando contando em grupos de 14 (o nosso segundo número do catálogo). Contamos em mód. 14.
O motivo exacto por que esta receita particular envolvendo o F dá sempre um número que se descodifica perfeitamente, está envolta nos mistérios da matemática avançada e das congruências. Mas lá funcionar, funciona, independentemente do tamanho que possam tomar os números com que tratamos. Essa é a questão essencial, pois, enquanto não nos deslocarmos para números extremamente grandes, (usando, como é evidente, um computador para efectuar a codificação e a descodificação), não conseguimos efectivamente nada de novo. O novo sistema tem também a vantagem adicional de todos os números de 24 a 99 se manterem em aberto para a representação de caracteres mais exóticos, como K, W, Y, !, @, #, *, (, ), $, %, &, e muitos outros.
O enorme poder do sistema de codificação assimétrica surge de duas formas distintas quando estão envolvidos grandes números. Suponhamos por exemplo, que escolhemos para o nosso número inicial (para tomar o lugar de 14 no exemplo trivial) um número de 60 algarismos, formado pelo produto de dois números primos de 30 algarismos cada. Somos agora capazes de codificar 30 letras e símbolos consecutivos (dois algarismos por símbolo) de cada vez. O código deixa, portanto de ser equivalente a uma substituição (de letras) uma a uma, passando a ser uma susbtituição 30 a 30 de um tipo extremamente pouco usual
Por exemplo, a alteração de uma única letra, digamos a letra número 14 do primeiro conjunto de 30 "letras" originais do texto, poderá muito bem alterar todos os "caracteres" de dois algarismos da forma codificada desse mesmo conjunto. O código é portanto, no essencial, inviolável, a não ser que o número secreto de descodificação (11 no nosso exemplo trivial) possa ser deduzido pelo potencial violador do código. Nós podemos deduzi-lo, visto que conhecemos a identidade exacta dos dois números primos originais envolvidos.
Podemos pois calcular o F e, a partir dele, escolher os expoentes de codificação e descodificação exactamente da forma efectuada no exemplo trivial.
O violador do código poderá fazer o mesmo apenas se conseguir factorizar o número de 60 algarismos em dois factores primos de 30 algarismos!
Ora o segredo da codificação assimétrica é de facto ser relativamente fácil (num computador moderno) a verificação de um número de 30 algarismos ser primo, ao passo que a tarefa de factorizar um número de 60 algarismos em dois números primos de 30 algarismos é extremamente árdua (chamam-se a estes números, do tipo do nosso exemplo do de 60 algarismos, de "números duros" de factorizar, em contraposição com os restantes "números fáceis" de factorizar).
Podemos pois, publicar o nosso número de 60 algarismos como parte da informação do nosso "catálogo público", com uma confiança razoável de que, apesar de toda a gente o conhecer, ninguém será capaz de o factorizar, "violando" o código.
Tal
como os métodos substitucionais se tornam invioláveis apenas
no limite em que se tem uma chave não repetitiva de "entropia"
suficiente, também o esquema assimétrico
se torna inviolável apenas no limite académico em que se
utilizam número de comprimento infinito. A vantagem essencial do
método assimétrico é que chave completa tem apenas
de ser conhecida do receptor potencial. É portanto, um sistema excepcionalmente
seguro do ponto de vista físico.