Eduardo Augusto Moraes Silva

Propaganda
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
Download