UM ESTUDO DO SISTEMA CRIPTOGRÁFICO RSA Trabalho de Conclusão do Curso Universidade Católica de Brasilia Departamento de Matemática Autor: Eduardo Augusto Moraes Silva Orientador: Sinval Braga de Freitas RESUMO Este artigo foi desenvolvido após um estudo histórico de como a criptografia evoluiu, passando por várias sociedades em distintas épocas. Citando estudiosos e inventores, viajamos nesta arte de esconder mensagens. Após esta pesquisa histórica, escolhemos um tema para ser estudado mais detalhadamente. Este tema foi o algoritmo RSA de criptografia. Estudamos todos os passos da codificação e decodificação para podermos desenvolver e implementar um algoritmo, com base no RSA, para criptografar dados. 1. INTRODUÇÃO A maioria dos formandos em Licenciatura Matemática não sabe como e onde podem ser aplicados os estudos que são desenvolvidos na universidade. Isso foi algo que me fez questionar os conteúdos trabalhados durante todo meu curso de graduação. Então resolvi fazer um estudo de como ela é importante nos diversos ramos do conhecimento humano. Pesquisei sobre várias aplicações da Matemática em diversas áreas da ciência como Biologia, Química, Física, Computação e outras. Esta última, Computação, foi a que mais me chamou a atenção, pois o tópico que escolhi para estudar, envolve uma das ramificações da Matemática com a qual mais me identifiquei, a Teoria dos Números. Assim pude perceber que os anos passados na universidade podem ser empregados em alguma parte da ciência humana muito importante para o homem. Mais precisamente no meu objeto de estudo o qual é o “ Sistema Criptográfico RSA”. A criptografia, que tem seus termos em grego “cripto” que significa secreto, e “graphos” que quer dizer escrita, estuda e desenvolve processos que cifram dados de maneira que somente os legítimos receptores das informações possuem os métodos necessários para desvendar a mensagem escondida. A diversidade dos meios de comunicação, a rapidez e a quantidade de informações (transferências bancarias, cartas de instruções para compra e venda de ações nas bolsas de valores informações diplomáticas, relatórios industriais...) que correm o mundo mudando opiniões e ações de acordo com as notícias que trazem, exigiram que se desenvolvessem métodos confiáveis de codificação de mensagens. E o sistema RSA é um deles. 2. HISTORIA DA CRIPTOGRAFIA A necessidade de ocultar informações não se deve somente as tecnologias desenvolvidas pelo homem. O homem sempre precisou esconder seus dados, suas estratégias de exércitos rivais, ladrões, entre outros inimigos. Então se vê que a criptografia é uma ciência, é quase uma arte, que nasceu quase junto com a escrita e a milhares de anos auxilia o homem em suas conquistas. Conhecer a historia da criptografia é viajar no vasto campo da criatividade humana, descobrindo os métodos criados e desenvolvidos por diversas sociedades para esconder suas informações. Do Oriente ao Ocidente, sabendo quais foram os grandes nomes dessa arte. Sua primeira aparição data de 1900 a.C. numa vila próxima ao rio Nilo (Egito), chamada Manet Khufu. Khnumhotep II era um dos arquitetos do faraó desta vila. Depois de conceber algumas construções, as quais precisavam ser documentadas, e seus conteúdos não podiam cair em mãos erradas, ele trocou algumas palavras e até trechos destes documentos para que suas informações não fossem encontradas por ladrões ou inimigos do Faraó. Uma contribuição muito significativa foi o “Livro de Jeremias”, escrito pelos Hebreus. Usando uma substituição simples pelo alfabeto reverso (o alfabeto é invertido de modo que no lugar do a esteja o z, b esteja o y, e assim sucessivamente). As cifras hebraicas mais conhecidas são o Atabesh, o Albam e o Atbah, as quais eram usadas principalmente em textos religiosos, e datam de 600 a 500 a.C.. Em 487 a.C. o escritor grego Tucídides descreve o dispositivo de codificação de transposição mais antigo e talvez o primeiro mecanismo criptográfico militar. Este mecanismo chamado “Bastões Licurgo” consistia em dois bastões do mesmo tamanho e diâmetro. Um bastão era entregue ao remetente da mensagem e outro ao destinatário. O primeiro enrola uma tira de couro em seu bastão, e escreve suas informações ao longo do bastão, depois ele desenrola a tira de couro do bastão, assim as letras escritas nesta tira se transformam em um monte de letras, umas escritas embaixo das outras, sem sentidos. O destinatário enrola a tira em seu bastão e visualiza a mensagem. Durante a Idade Média, a Europa viveu um processo de involução cientifica e na criptografia não foi diferente. Com a Europa passando pelo “período das trevas”, a contribuição árabe – Islâmica foi a mais significativa. Destaque para Al-Kindi, que escreveu um livro sobre decodificação de mensagens cifradas, fazendo análise de freqüência, este sendo o mais antigo sobre criptologia, (ciência que estuda as maneiras de ocultar e desvendar mensagens). Outro nome importante foi Ibn Dunainir, que escreveu o livro “Explicações Claras para a Solução de Mensagens Secretas” que contém cifras algébricas. Uma grande inovação, substituindo letras por números. Depois da Idade Média, o período da Renascença foi uma época de surgimento de novas idéias e invenções e a criptologia pegou carona nesta nova fase da sociedade Européia onde Leon Battista Alberti, François Viete e outros colocaram seus nomes em destaque nesta nova ciência. Alberti foi o inventor de um “disco de cifragem” implantando a primeira cifra poli alfabética, que dizem não foi quebrada até os anos 1800. Ele propõe dois ou mais alfabetos desordenados e alternados durante uma cifragem a fim de escapar de uma analise de freqüência dos criptanalistas potencias. Girolano Cardano foi o inventor de um sistema Criptográfico com autochave, “a Grelha de Cardano”. Esse sistema baseava-se da seguinte forma: o remetente pega um grelha e coloca encima da folha onde iria ser escrita a mensagem. Essa grelha contém alguns espaços em aberto da altura de das linhas, onde são escritas as letras da mensagem, depois ele retira a grelha e completa as lacunas com quaisquer letras. O destinatário pega a sua grelha e coloca sobre a mensagem assim pode ler as informações. François Viente Foi um dos maiores criptólogos de seu tempo. Trabalhando para o rei da França, ele foi o primeiro especialista a utilizar notações algébricas sistematizadas, e é mais conhecido como matemático que contribuiu para a teoria das equações. Os anos passaram e novas técnicas foram sendo desenvolvidas pelos criptógrafos de todo o mundo. (Nos EUA por volta de 1795) Thomas Jefferson inventa um aparelho que utilizava discos para uma substituição poli-alfabética. Este aparelho foi reinventado varias vezes, sendo utilizado pelos militares até a Segunda Guerra Mundial. Os computares marcaram uma nova era na historia dessa ciência. Com seus cálculos extremamente velozes e a comunicação rápida através dos fios telefônicos. Com isso, métodos mais elaborados e complexos tornaram-se necessários, e a criptologia indispensável nos dias de hoje. E o maior responsável por esse avanço na ciência foi Claude Elwood Shannon. Ele foi o criador das bases de uma teoria matemática da comunicação (com seu trabalho intitulado “Uma Teoria Matemática da Comunicação”, de 1948), uma nova área na matemática com as definições e conceitos básicos formulados, com os teoremas e resultados fundamentais já estabelecidos. Shannon escreveu um ensaio o qual nunca foi publicado resumindo conceitos e definições sobre criptologia em sua teoria. O trabalho é intitulado “Teoria Matemática de Sistemas Secretos”. Na década de 60, o Doutor Horst Feistel trabalhando em um projeto para um laboratório cria a cifra “lúcifer”, que serviria de base para vários métodos de criptografia inclusive o DES (Data Encryption Standard) que seria adotado pelo NBS (National Bureau of Standard) e pela NSA (National Security Agency) como padrão de Encriptação de dados para os EUA. O código DES e quebrado em 1997 por uma rede de 14.000 computadores, em 1998 é quebrado em 56 horas por pesquisadores e em 1999 em 22 horas e 15 minutos. Em 1976 Whitfield Diffie e Martin Hellmann já haviam lançado duvidas quanto à segurança do DES, com isso em seus livros “New Directions in Cryptography” lançaram a idéia de chave pública. Este livro servia de inspiração para três principiantes em encriptação de dados, Ronald L. Rivest, Adi Shamir e Leonard M. Adleman. Eles tiveram uma idéia baseada em chave pública e assinatura digital, com o apoio na dificuldade na fatoração de números grandes. Os amigos só publicaram o algoritmo em 1978 na “Comunication” da ACM( Association for Computing Machinery). O algoritmo leva o nome de RSA de acordo com as iniciais dos sobrenomes de seus criadores, Rivest, Shamir e Adleman. A criptografia vem evoluindo constantemente, como a criptografia de curva Elíptica sugerida por Miller, Criptografia Quântica e a criptografia diferencial desenvolvida por Biham e Shamir, pois cada vez é mais necessário o uso dessa ciência. 3. O QUE É O ALGORITMO RSA O algoritmo RSA foi criado por pesquisadores iniciantes na ciência da criptografia, Ronald Rivest, Adi Shamir e Leonard Adleman. Estes pesquisadores serviram-se de conceitos de Teoria dos Números como alicerce para a construção do que, hoje, é um dos mais conhecidos métodos criptográficos no mundo, utilizado no NETSCAPE NAVIGATOR, navegador de Internet, alem de ser usado em determinadas movimentações financeiras. O método não é muito complexo, chegando até certo ponto ser simples para aqueles que conhecem e tiveram uma sólida introdução à Teoria dos Números. O sistema utiliza-se de vários conceitos matemáticos como, aritmética modular, algoritmos de Euclides e Fermat, fatoração, além do tópico mais importante, números primos, onde está a dificuldade de se quebrar a sua segurança. A segurança deste sistema de criptografia está nos números primos, pois ele é baseado na dificuldade de se fatorar um número muito grande. Como as chaves de segurança, os números que são multiplicados entre si, contém pelo menos 150 algarismos, fatorar um número deste tamanho é praticamente impossível. 3.1. Como funciona o Método RSA Antes de iniciar o estudo precisaremos ter alguns pré-requisitos para entendermos o funcionamento do método. Devemos saber o que é Algoritmo Euclidiano Estendido, os teoremas de Fermat e Euler e a função de Euler. O Algoritmo de Euclides tem como objetivo calcular o máximo divisor comum entre dois inteiros a e b. Já o Algoritmo Euclidiano Estendido além de calcular o máximo divisor comum entre a e b, calcula simultaneamente α e β que satisfazem a seguinte equação: aα+bβ=d sendo d o Maximo divisor comum entre a e b. A função de Euler é definida da seguinte maneira, seja um número m pertencente aos naturais, e E(m) será o conjunto dos números x naturais menor que m e possui o mdc(m,x) = 1. O teorema de Euler demonstra que se a pertence aos inteiros e m pertence aos naturais é que mdc (m, a) = 1, onde: aϕ(n) ≡ ( mod m) O teorema de Fermat nos informa que seja p um primo e pertencente aos naturais. Então teremos: ap ≡ (mod m) A partir de agora tentaremos, em linhas gerais, mostrar os passos matemáticos percorridos para construção do RSA, equivalendo letras a números, encontrando as chaves de codificação e decodificação e codificando e decodificando as mensagens desejadas. O primeiro passo a ser dado é dar valores numéricos para cada letra do alfabeto, para que possamos trabalhar todas as letras usando estes valores que lhes foram atribuídos. É muito importante prestar atenção na numeração aplicada para que não ocorram erros na hora da conversão de número para letra. Um exemplo de numeração que pode ser atribuído para cada letra do alfabeto é: O espaço entre uma palavra e outra deve receber uma numeração também, então este será convertido no número 37. Algum cuidado deverá ser tomado quando formos denominar valores para cada letra, pois poderá haver confusões na hora da decodificação. Como por exemplo, se usássemos a seguinte numeração: Poderíamos ter problemas, por exemplo de na palavra beco ,por exemplo, b = 2 e e = 5, que juntas dariam o número 25 que corresponderia a letra y = 25. Assim a palavra beco poderia se tornar à palavra yco. Agora conheceremos dois personagens muito importantes do sistema de cifragem que está sendo estudado, dois números primos, os quais chamaremos de p e q, estes dois primos devem ser diferentes um do outro. Com eles vamos obter uma parte das chaves de codificação e decodificação. Esta parte da chave se chamará n, que será a multiplicação dos primos p e q. n = p.q De p e q também vem a outra parte da chave de codificação. De acordo com a definição da função de Euler, dado um primo p, temos (p)= p – 1, e do mesmo modo a função (n) com n=pq será: (n) = (pq) = (p) (q) = (p - 1)(q - 1) Já que o mdc (p, q)=1. A partir do momento que conhecemos (n) vamos procurar o menor primo que não divida (n), este valor completará nossa chave da cifragem, e será chamado de “c”. Nossa chave será o par (n, c). A próxima etapa é servir-se desta chave para codificarmos a mensagem sugerida. Neste momento trabalharemos com sistema de congruências. Dividiremos o enorme número, que obtivemos com a transformação das letras da frase em números, em pequenos blocos sempre menores que n, pois trabalharemos com a congruência módulo n, logo se o número escolhido for maior que o meu n, ele se transformará em outro módulo n. Em cada parte que foi dividida usaremos a seguinte congruência: Ac E (mod n) E é o resto da divisão de Ac por n, A é o bloco que faria parte da mensagem clara e c o menor primo que não divide (n), isto é c é invertível módulo (n). Após a codificação destes pequenos blocos não poderemos mais juntá-los, pois não conseguiríamos dividi-los novamente da mesma maneira, e não poderíamos decifrar os dados cifrados. Para seguirmos o caminho “inverso”, deveremos aproveitar mais uma vez de (n), pois a partir dele e de c é que vamos encontrar a outra metade da chave que denominaremos d, já que n é a outra. Assim o par (n, d) seria a chave de decodificação. Nós encontraremos d, o inverso de c módulo (n), aplicando o algoritmo euclidiano estendido em (n) e c. Usando o algoritmo de Euclides estendido em (n) e c, e sabendo que o mdc ( (n), c) =1, teremos a seguinte equação: (n)α α + cβ β=1 Como (n) E (mod (n)), teremos que cβ β = 1 em Fazendo β=d teremos que d é o inverso de c. (n). Logo β é o inverso de c em (n). Agora usando a congruência A Ed (mod n) decodificaremos os dados, saindo limpa e legível a parte A, ou seja, a mensagem clara. Mas para o método funcionar de acordo com o esperado teremos que verificar se, ao decodificarmos a parte codificada teremos a mensagem clara. Então temos que saber se: A Como vimos d é o inverso de c módulo qualquer. Como E Daí temos (E)d (mod n) (n), então cd=1+k (n), para k sendo um inteiro Ac (mod n) Acd A1+k Como pelo teorema de Euler A (n) (n) AA (n)k A(A (n) k ) (mod n) 1(mod n), temos Acd A(1)k A (mod n) Só que o teorema de Euler nos diz que para que A (n) 1(mod n), o mdc(A,n) = 1. Mas não podemos afirmar que sempre A será co-primo com n pois os valores podem variar entre 1 e n1. Agora o teorema de Fermat vem nos auxiliar a resolver este problema. Lembre-se que: cd=1+k (n) = 1 + k(p-1)(q-1) logo teremos: Acd = A1+ k(p-1)(q-1) A(A p-1 )k(q-1)(mod p) Usando o teorema teremos que supor que p não divide A. Se isto for verdade então Ap-1 (mod p), e por Fermat obtemos Acd 1 (mod p). 1 Nada parece ter melhorado. Usamos o teorema de Fermat, em vez de Euler, mas acabamos com o mesmo problema. Felizmente o fato de p ser primo nos permite tratar facilmente o caso em que p divide A. De fato, neste caso A 0 (mod p). Assim Acd A (mod p) Analogamente,podemos mostrar que Acd A (mod q). m outras palavras, Acd - A é divisível por p e q. Como p e q são primo distintos temos que mdc (p, q) =1, assim pq divide Acd - A, pela propriedade fundamental dos primos. Assim provamos que Acd A (mod n) quando n=pq. Para melhor compreensão do Sistema RSA de Criptografia, daremos um exemplo, simples, passo a passo como foi descrito anteriormente. Primeiramente devemos ter uma mensagem que deva ser escondida do grande público, e vamos criptografa-la. Usaremos a seguinte frase hipotética, mas que os americanos adorariam, como exemplo: “Achamos Osama Bin Laden no Tibet” A partir de agora utilizaremos somente números, então devemos converter cada letra em um número. Utilizaremos a numeração já mencionada anteriormente como base para exemplificação: Então teremos o seguinte número: 1113181123252937252911231137121924372211141524372425373019121530 Neste momento vamos gerar dois primos distintos para desenvolvermos nossas chaves. Usaremos, por não se tratarem de números muito grandes, e consequentemente a compreensão será facilitada, p = 5 e q = 11. Logo n = 55, (n) = 40, e o menor número primo que não divide (n) será 3. Depois de conhecermos n, (n) e c, fragmentaremos aquele imenso número, 1113181123252937252911231137121924372211141524372425373019121530, em partes sempre menores que n. Como exemplo: 1-11-31-8-1-12-32-52-9-37-25-2-9-1-12-31-13-7-12-19-2-43-7-2-21-11-41-52-43-7-2-42-537-30-19-1-21-5-30 Com essa etapa pronta pegaremos cada bloco e aplicaremos a primeira congruência mencionada juntamente com a chave de codificação de dados. Aplicaremos na terceira parte do todo para mostrar como exemplo. 313 29791 36 (mod 55) Após fazermos este processo com todos os blocos, teremos a mensagem criptografada. Ela seria a seguinte: 1-11-36-17-1-23-43-28-14-53-5-8-14-1-23-36-52-13-23-39-8-32-13-8-21-11-6-28-32-13-8-347-13-50-39-1-21-15-50 Desse modo quem pegar esta mensagem terá de encontrar a outra metade da chave de decodificação já que a primeira, como foi dito anteriormente, é o n. Essa pessoa terá de conhecer (n) para aplicar o algoritmo euclidiano estendido em (n) e c para encontrar d. Assim teremos que d = 27, pois (n)= 40 = 3(13) + 1 1 = 40 + 3(-13) Como -13 27 (mod 40) Logo 27 é o inverso de 3 módulo 40. Assim usaremos d = 27 e a congruência adequada para decodificar a mensagem codificada. 4. DESENVOLVIMENTO DO SOFTWARE Durante a pesquisa realizada sobre o algoritmo RSA foi desenvolvido, paralelamente, um software (programa para computadores) que visa criptografar dados. Este programa é um esboço do que vem a ser o conhecido sistema criptográfico criado por Rivest, Shamir e Adleman. Para o desenvolvimento do trabalho em condições reais de emprego do software produzido, foi utilizada a plataforma Turbo Pascal 1.5 para Windows. Alem da aritmética básica foram utilizados funções e algoritmos referentes à Teoria dos Números. Utilizamos a tabela ASCII (American Standard Code for Information Interchange) para a pré– codificação e decodificação da mensagem, determinando valores para cada uma das letras. Assim usamos a numeração já existente no computador, poupando o trabalho na criação de uma nova tabela de valores. ! " #$ % & '() ( * , - / - - 01 +! '. 2 3 +! 4 5 ' 7 +! 3 46 . +! . ' +! * 8 (9 9 : . 1 " * : . 1 & ; 1 , ;( ( 1 . / ;( ( 1 . 2 ;( ( 1 . ;( ( 1 . ') ( * . +! < . = - ! (' ( " : & - , ( 3 4 / 1 2 % . > 1 < 1 9 1 < 1 1+ " & , / 2 " & , / 2 " " " " " "" "& ", "/ "2 & & & & & &" ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A $ +! '1 3 3 1 '1? < * '3 1 @ 4 1 @ ' 7< * $ * ;< ;< ;< ;< ;< ;< " ;< & ;< , ;< / ;< 2 ; 1 $ .< : % < : % $ ' ' < +! 3 A && &, &/ &2 , , , , , ," ,& ,, ,/ ,2 / / / / / /" /& /, // /2 2 2 2 2 2 2" 2& 2, 2/ 22 B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g - A ( A ; A A A > A A A B A ) A A : A A A $ A # A 9 A A A A 7 A C A A = A D A '3 4 - . 4 4 ' * ' < . A 3 A A A A * A < A h i j k l m n o p q r s t u v w x y z { | } ~ " & , / 2 " & , / 2 " & , 4 A E A 0 A A A A A 1 A % A A A A A . A F A A G A 5 A '3 4. - . 4 ; / 2 " & , / Ç ü é â ã à å ç ê ë è A 4. '1 < 2 " & , / 2 " " " " " "" "& ", ï î ì Ä Å É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ "/ "2 & & & & & &" && &, &/ ƒ á í ó ú ñ Ñ ª º ¿ &2 , , , , , ," ¬ ½ ¼ ¡ « » ,& ,, ,/ ,2 / / / / / /" /& /, // /2 2 2 2 2 2 2" 2& 2, 2/ 22 " & , / 2 ! " # $ % & ' Ô " & , / 2 " & , / 2 " & , / 2 " & , / 2 ( ) * + , . / 0 1 2 3 ß 4 5 6 7 µ 8 9 : ; < = > ? @ ± A B C D ÷ E E F " " " " " · G H ² I 4.1. Algoritmo do Programa Aqui segue o algoritmo do software que foi desenvolvido ao longo deste estudo. program criptografia; uses wincrt; function EucliEst(c,fi:integer):integer; inverso { Funçao para encontrar o valor multiplicativo do c modulo fi} var a,b,d,x,u,w,y,v,z,q:integer; {variaveis da função} begin x:=fi; y:=c; u:=0; v:=1; w:=1; z:=0; repeat q:= (x div y); a:= (x - (q*y)); b:= (w - (q*u)); d:= (z - (q*v)); w:=u; z:=v; u:=b; v:=d; x:=y; y:=a; until (y=0); EucliEst:=z {função Retorna valor de encontrado na variavel z} end; var Vetor,vet_c,vet_aux,vet_e: array [1..1000] of longint; {variaveis do programa} chave: string[100]; den,c,i,j,y,fi,d: longint; soma: longint; primo_p,primo_q,n: longint; achei: boolean; begin j:=0; write('Digite a sua frase: '); readln (chave); for i:=1 to length(chave) do {loop para converter os caracteres em valores numericos correspondende a tabela ASCII colocando os valores obtidos em um vetor} begin vetor[i]:= ord(chave[i]); j:=j+1; end; writeln; write('Mensagem pré-codificada: '); for i:=1 to j do {loop para imprimir o vetor convertido em numero} begin write(vetor[i]); end; writeln; writeln; writeln; writeln('Entre com dois numeros primos p e q:'); {dois numeros primos para achar n e fi} writeln; write('P: '); readln(primo_p); write('Q: '); readln(primo_q); n:=primo_p*primo_q; {encontrado o valor de n atraves do produto entro os dois primos} fi:=(primo_p-1)*(primo_q-1); {encontrado o valor de fi atraves da funcao de fi de Euler} writeln; writeln('O valor obtido para "n" (primeira parte da chave) é igual a: ',n); writeln('O valor de "fi" de "n" é igual a: ',fi); writeln; for i:=1 to fi do {loop para encontrar o menor primo que nao divide fi} begin if (fi mod ((2*i)+1)) <> 0 then begin vet_c[i]:= (2*i)+1; end; end; achei:=false; i:=1; repeat if (vet_c[i] mod fi) <> 0 then begin c:=vet_c[i]; achei:=true; end; i:=i+1; until (achei = true); writeln('Valor de "c" (segunda parte da chave): ',c); writeln; for i:=1 to j do {loop para criptografar o vetor} begin soma:=1; for y:=1 to c do begin soma:=soma*vetor[i]; if soma > fi then begin soma:= (soma mod n); end; end; vet_e[i]:=(soma mod n); end; write('Mensagem codificada: '); for i:=1 to j do {loop para imprimir o vetor criptografado} begin write(vet_e[i]); end; den:=(EucliEst(c,fi)); {chamada da funçao} writeln; writeln; writeln; if den < 0 then {condição para encontrar o valor de "d"} begin d:= den + fi; end; if den > 0 then begin d:=den; end; writeln('Encontrado o valor de "d" (chave para decodificação): ',d); for i:=1 to j do {nesse loop o vetor codificado sera decodificado para os valores iniciais} begin soma:=1; for y:=1 to d do begin soma:=soma*vet_e[i]; if soma > fi then begin soma:= (soma mod n); end; end; vet_aux[i]:=(soma mod n); end; writeln; write('Mensagem numerica decodifica: '); for i:=1 to j do begin write (vet_aux[i]); end; writeln; writeln; write('Mensagem clara: '); for i:=1 to j do begin write(Chr(vet_aux[i])); {impressao da mensagem clara} end; readkey; donewincrt; End; 5. CONSIDERAÇÕES FINAIS Este artigo foi escrito Com o intuito de fazer uma conexão entre a Matemática teórica, ensinada na sala de aula, e a Matemática aplicada, mais precisamente na Computação. O objetivo era estudar o Sistema Criptográfico RSA e desenvolver e implementar um software com base no programa. O estudo do método foi repleto de minúcias, e todos os detalhes foram analisados a fundo para a criação e execução do programa. Com esse estudo consegui desvendar todos os segredos matemáticos que estão por trás desse algoritmo conhecido mundialmente, alcançando assim o objetivo traçado por mim no projeto feito a seis meses. Agradecimentos Agradeço as sugestões recebidas de diversos colegas, e principalmente de meu orientador, Sinval Braga de Freitas, que permitiram aprimorar o texto e eliminar diversas inconsistências. A todos os professores que me ajudaram durante a minha graduação com admirável compreensão a cada erro que eu cometia. A Universidade Católica de Brasilia que me deu oportunidade de desenvolver meu potencial chegando à plenitude. REFERÊNCIAS BIBLIOGRÁFICAS SANTOS, José Plínio de Oliveira. Introdução à teoria dos números. 2. ed. Brasília: CNPq, c2000 SHOKRANIAN, Salahoddin; SOARES, Marcus; GODINHO, Hemar. Teoria dos Números. 2. ed Brasília: Ed. da Universidade de Brasília, 1999 DOMINGUES, Hygino H.; IEZZI, Gelson. Álgebra moderna. 2. ed. São Paulo: Atual, 1992. RIBENBOIM,Paulo; Números Primos, Mistérios e Recordes. 1. ed. Rio de Janeiro: IMPA,2001 COUTINHO, Severino; Números Inteiros e Criptografia RSA. 2.ed. Rio de Janeiro: IMPA 2003 CÂMARA, Danilo Figueira; Geração de Chaves Seguras para o Sistema Criptográfico RSA. Dissertação de mestrado em Engenharia Elétrica, UnB.1996. TKOTZ,Viktoria; Historia da Criptografia. Disponível em < http://www.numaboa.com.br/criptologia>. Eduardo Augusto Moraes Silva ([email protected]) Departamento de Matemática, Universidade Católica de Brasilia