Como codificar e decodificar uma palavra na sua HP utilizando o método de criptografia RSA
>Você já utilizou sua calculadora para efetuar cálculos de aritmética modular? É possível calcular potências com expoentes maiores que mil, em aritmética modular, em sua calculadora científica? A resposta para a segunda pergunta é sim. Esse artigo proporcionará ao leitor algum contato com as operações matemáticas envolvidas em um exemplo simples de codificação e decodificação utilizando o método RSA.
Primeiramente preciso falar que esse tópico com certeza foi um dos mais marcantes em meus estudos de matemática. Eu já havia lido sobre criptografia RSA no curso de Redes, porém havia sido uma abordagem puramente teórica e bastante abstrata. Até então não tinha achado nada de especial em criptografia. No curso de Matemática Discreta, comecei a enxergar com outros olhos a aritmética modular e as equações diofantinas lineares. Até que, após algumas reuniões e algumas conversas informais com alguns colegas e professores, resolvi pesquisar mais sobre o assunto e dei-me conta da relevância do tema. Acredito que possa existir alguma utilização de uma variante desse algoritmo em questões de segurança e acesso de pequenas aplicações. Além do mais, não é difícil encontrar por aí o porquê de existir tanto fascínio no método RSA: foi uma das grandes inovações em criptografia de chave pública, é considerado um dos métodos mais seguros já implementados e é fundamentado na teoria clássica dos números, além de ser amplamente utilizado na Internet. Assim, decidi divulgar o resultado dos meus estudos e compartilhar com os leitores dessa edição um exemplo prático de codificação e decodificação de uma palavra utilizando o método RSA de forma bem simples.
É importantíssimo notar que o leitor não encontrará no artigo provas matemáticas e muito menos definições teóricas, visto que para isso seria necessário no mínimo um curso completo de Matemática Discreta. Irei apenas transcrever o método de resolução de um dos exercícios que chamou a atenção de um grupo de estudantes que estava se preparando para uma prova final.
O Rivest-Shamir-Adleman (RSA) é um sistema de criptografia no qual, de acordo com Welsh (veja artigo na seção de Recursos), a segurança é fundamentada na crença de que não existe método rápido de fatorar números que resultam do produto entre dois números primos grandes. De acordo com o mesmo autor, os procedimentos de codificação e decodificação utilizando esse método são os seguintes:
Antes de qualquer coisa, precisamos pré-codificar a palavra em uma sequência de números. Nesse pequeno exemplo, a palavra escolhida foi “OVOS” e a tabela de pré-codificação é a seguinte.
Para quebrar a mensagem em blocos nesse exemplo, é necessário que os blocos sejam formados pelo maior número possível menor que n. Normalmente, p e q são números primos grandes formados por centenas de algarismos. Nesse exemplo simples, serão utilizados números pequenos. Os valores escolhidos para p e q são os números primos 29 e 47, respectivamente. n = pq n = 29.47 n = 1363 Assim, cada bloco precisa ser o maior número possível menor que 1363. Percorrendo a sequência 24312428 da esquerda para a direita, observa-se que o número 2431 é maior que n. Portanto o primeiro bloco será o número 243. A sequência restante é representada por 12428. Seguindo o raciocínio, 12428 é maior que 1363, logo o segundo bloco será o número 1242. O último bloco, finalmente, será formado pelo número 8. Nesse artigo, será executada a codificação e decodificação apenas do primeiro bloco. Os cálculos do segundo e do terceiro bloco ficam a cargo do leitor, caso haja interesse.
A chave codificadora é dada pela fórmula C(b) = be (mod n). Usando uma variante do algoritmo Euclidiano, o e escolhido é 17. Substituindo os parâmetros e e n obtém-se a fórmula: C(b) = b17 (mod 1363).
Substituindo p e q na seguinte fórmula O(n) = (p – 1)(q – 1), tem-se que O(n) = 1288. Para determinar d, faça o mdc(O(n), e). Para conferir, lembre-se da propriedade do inverso: d = e-1 se ed (mod O(n) )= 1.
Calculando o mdc entre 1288 e 17:
Tendo em mãos as regras de codificação e decodificação, o exercício prossegue com a aplicação da fórmula de codificação no primeiro bloco.
Note que para realizar os cálculos abaixo são necessários apenas lápis, borracha e calculadora científica. A sequência de cálculos abaixo mostra uma maneira de calcular 32 elevado à potência 985 módulo 1363.
Fica assim compartilhado um método simples de efetuar o processo de codificação e decodificação seguindo o método RSA. Também está provado que com uma calculadora na mão, é perfeitamente possível fazer potenciações em aritmética modular com tranquilidade, mesmo que o expoente não seja tão pequeno. Se mais alguém além de mim e de meus colegas de estudo criar interesse pelo assunto, tenho certeza que o objetivo deste artigo terá sido atingido.
WELSH, Dominic. (1988) Codes and Cryptography. Oxford University Press, New York.
RSA na Wikipedia: http://en.wikipedia.org/wiki/RSA
»Esta é uma publicação eletrônica da Sociedade Brasileira de Computação ? SBC. Qualquer opinião pessoal não pode ser atribuída como da SBC. A responsabilidade sobre o seu conteúdo e a sua autoria é inteiramente dos autores de cada artigo.