um estudo teórico e computacional do criptosistema de

Propaganda
UM ESTUDO TEÓRICO E COMPUTACIONAL DO CRIPTOSISTEMA DE CHAVE
PÚBLICA RSA
Lilian Berton (IC-Voluntária), Marlon Soares (Orientador),
e-mail: [email protected]
Palavras-chave: Criptografia, criptosistema RSA, teoria dos números
Resumo:
Este trabalho trata do criptosistema de chave pública RSA sob dois enfoques. Um
deles teórico, a partir do estudo dos conceitos e resultados da Álgebra Abstrata
aplicados ao criptosistema, e outro computacional, que resultou na sua
implementação.
Introdução
A criptografia, cujo termo vem do Grego kryptós, “escondido”, e gráphein, “escrita”,
trata do estudo de conceitos e técnicas que visam a codificação de uma informação,
ou seja, a transformação desta para uma forma ilegível. O processo inverso da
codificação é denominado decodificação, sendo que, em geral, para cada um deles
é necessária uma função conhecida por chave. Os algoritmos de codificaçãodecodificação, juntamente com as mensagens a serem codificadas, as chaves e o
texto codificado formam o que é conhecido por criptosistema.
A utilização de redes de computadores, em especial o surgimento da Internet,
tornou necessária a criação de novos sistemas criptológicos denominados
criptosistemas de chave pública. Tais criptosistemas, diferentemente dos clássicos,
usam uma chave de codificação pública que pode ser livremente divulgada, sem
comprometer a segurança dos dados ou da chave privada de decodificação. Dentre
os criptosistemas que usam chave pública o mais conhecido é o RSA, proposto em
1978 por R. L. Rivest, A. Shamir e L. Adleman, cuja segurança baseia-se na extrema
dificuldade computacional em fatorar números grandes como um produto de
números primos.
Neste trabalho é feito um estudo aprofundado deste criptosistema,
envolvendo as teorias matemáticas que o fundamentam e a sua implementação.
Materiais e Métodos
Inicialmente o trabalho foi desenvolvido com base em [4] e [5], sendo estudados os
principais conceitos e resultados de Álgebra Linear. Tal estudo teve por objetivo
aprofundar os conhecimentos necessários para ingressar num programa de pósgraduação em Matemática ou áreas afins.
Num segundo momento, com base em [2], [3] e [7], foram estudados vários
tópicos da Álgebra Abstrata, principalmente da Teoria dos Números. Nesta etapa,
dentre os conceitos e propriedades estudados, destacam-se: os conceitos de
divisibilidade, congruência módulo n e primalidade; o Teorema de Fermat e o
Teorema do Resto Chinês; as propriedades dos anéis Zn e da função  de Euler.
Posteriormente, respaldados em [1] e [2], foi estudado e implementado o
criptosistema de chave pública RSA, descrito teoricamente por Rivest, Shamir e
Adleman, em [6].
Resultados e Discussão
O criptosistema de chave pública RSA consiste basicamente do seguinte. Após
calcular (n), onde n = pq, com p e q primos, escolhe-se um número natural e, tal
que e  (n) e mdc(e, (n)) = 1, e determina-se um número natural d satisfazendo a
congruência ed  1 mod (n). A chave pública será o par (n,e) e a chave privada
será o par (n,d). Assim, dada uma mensagem T, obtém-se sua codificação C pela
relação C = Te mod n. Por sua vez, dada uma mensagem codificada C, obtém-se a
mensagem T que a originou pela relação T = Cd mod n.
No que segue mostraremos a validação teórica do RSA, ou seja, que dada
uma mensagem T, onde T é um número natural, e as chaves (n,e) e (n,d), tem-se
Ted  T mod n, onde ed  1 mod (n).
De fato, haja vista que ed  1 mod (n) temos, da definição de congruência
módulo n, que (n)| (ed – 1). Então, pela definição de divisibilidade, existe um
inteiro k tal que ed – 1 = k(n) ou, como p e q são primos, que ed = 1+k(p – 1)(q –
1). Assim, obtemos que Ted  T 1+k(p–1)(q–1) mod p, ou seja, que Ted  T(Tp–1)k(q–1) mod
p. Se a classe residual módulo p gerada por T for invertível em Zp, como p é primo
temos, pelo Teorema de Fermat, que Tp–1  1 mod p, assim Ted  T(1)k(q–1) mod p e,
portanto, Ted  T mod p. De forma análoga prova-se que Ted  T mod q e então, de
uma conseqüência do Teorema do Resto Chinês, que Ted  T mod n.
Com relação à implementação do RSA utilizou-se a linguagem de
programação Java Standard Edition, versão 5.0 e a ferramenta BlueJ, versão 2.1.3.
Como a segurança do RSA baseia-se na extrema dificuldade em fatorar números
grandes como um produto de números primos, as chaves (n,e) e (n,d) devem ser
tais que n tenha muitos dígitos (na prática, os primos que geram n têm mais de 100
dígitos cada). Todavia, as principais dificuldades encontradas foram com relação a
isto, mais precisamente, encontrar uma biblioteca que armazenasse números
grandes. Após várias pesquisas optou-se por trabalhar com a Big Integer.
Ressaltamos que, mesmo possibilitando trabalhar com números grandes, como o
tempo de processamento torna-se muito alto, quando da inserção de números
grandes, nos exemplos testados utilizou-se números primos com até 8 dígitos.
No RSA, bem como em outros métodos de codificação-decodificação, os
caracteres utilizados na mensagem criptografada devem ser convertidos em
números, sendo que a tabela mais utilizada para essa conversão é o código ASCII.
Todavia, percebeu-se, durante a fase de testes, que o uso de uma única tabela
poderia gerar um padrão de codificação e, por conseguinte, a decodificação da
mensagem criptografada. Assim, a implementação conta com três tabelas distintas,
que são sorteadas aleatoriamente.
Apesar de não constar nos objetivos iniciais, considerou-se também o
problema de determinar se um número é primo, e foram estudados alguns testes de
primalidade, dando ênfase ao teste de Miller-Rabin. Embora este teste seja
probabilístico, com a probabilidade de um número composto ser declarado primo,
usando k números de teste, de, no máximo, 1/4k, como sua execução é em tempo
polinomial é possível aplicá-lo várias vezes, diminuindo consideravelmente a
margem de erro.
No que segue será apresentado um dos exemplos testados após a
implementação.
Exemplo:
Tomando os números primos p = 27795571 e q = 33333331 obtemos n = pq =
926518968477001. Assim, (n) = 27795570 * 33333330 = 926518907348100 e,
como a chave codificadora deve ser tal que tal que e  (n) e mdc(e, (n)) = 1,
toma-se e = 7 e, então, a chave codificadora será (n,e) = (926518968477001, 7).
Como d deve ser tal que ed  1 mod (n), toma-se d = 264719687813743 e, então,
a chave decodificadora será (n,d) = (926518968477001, 264719687813743). A
seguir é inserida uma mensagem, por exemplo: “Numero primo”, cada letra é
transformada em um número decimal correspondente em uma tabela sorteada
aleatoriamente e a mensagem será transformada nos números correspondentes.
Codificando a mensagem que foi transformada em números decimais de
acordo com uma das tabelas obtém-se:
5567548918437623479278222169653287586016550339731085609199627136050
9896275944673024910091072135352107012287679245496169826056973516819
626653205121917565568854912594467302491009
Decodificando-a obtém-se novamente a mensagem original: “Numero primo”.
Conclusões
Durante o desenvolvimento do projeto foi possível perceber que o algoritmo usado
para descrever o criptosistema RSA é essencialmente simples. Todavia, a sua
validação teórica envolve conceitos algébricos não-triviais como, por exemplo, as
propriedades dos anéis Zn, e na sua implementação surgem alguns problemas como
a dificuldade em trabalhar computacionalmente com a aritmética modular.
Além disso, o trabalho foi muito importante, pois possibilitou, dentre outras
coisas, aprofundar os conhecimentos teóricos em Álgebra Linear e Álgebra Abstrata,
estabelecer a relação entre determinados conceitos matemáticos e sua aplicação
computacional (mais precisamente uma aplicação da Álgebra à Computação),
conhecer uma aplicação prática do conceito de números primos e trabalhar com a
biblioteca Big Integer.
Referências
[1] COUTINHO, S. C. Números Inteiros e Criptografia RSA. Edição 2ª, IMPA, 2000.
[2] EVARISTO, J. PERDIGÃO, E. Introdução à Álgebra Abstrata. EDUFAL, 2002.
[3] HEFEZ, A. Curso de Álgebra. Volume 1, IMPA, 1983.
[4] KOLMAN, R. Introdução à Álgebra Linear com Aplicações. Edição 6ª, PrenticeHall do Brasil, 1996.
[5] LIMA, E. L. Álgebra Linear. Edição 3ª. IMPA, 1999.
[6] RIVEST, R. L. SHAMIR, A. ADLEMAN, L. A Method for Obtaining Digital
Signatures and Public Key Cryptosystems, volume 21, Communications of the ACM,
p. 120-126, 1978.
[7] SANTOS, J. P. Introdução à Teoria dos Números, IMPA, 2003.
Download