Skip to content

vitorebatista/rsa-article

Repository files navigation

O RSA é um algoritmo de criptografia assimétrica amplamente utilizado que permite garantir o estabelecimento de comunicações seguras em ambientes abertos como a internet. O objetivo desse projeto é descrever conceitualmente o funcionamento do algotirmo RSA e alguns pontos de seu embasamento matemático, a implementação realizada e sua complexidade, com o foco especial na análise de performance dos processos de geração e de quebra de chave. Dentro dos resultados atingidos é possível identificar que a segurança de sistemas de criptografia está baseada primordialmente na garantia de que a fatoração de grandes chaves demanda um tempo relativamente alto, mesmo para grande capacidade computacional. Nota-se também que a utilização de testes probabilísticos como os de Fermat e Miller-Rabin, assim como heurísticas como Pollard-Rho, permitem que se tenha ganho de performance, mas sem comprometer a segurança do sistema de criptografia.

O artigo completo no formato SBC está disponível neste link.

Instalação

Necessário ter Pipenv e executar:

$ pipenv install 

Utilização

Para gerar os arquivos de chave pública, privada e os gráficos:

$ pipenv shell
$ python main.py

No main.py você pode alterar a variável bits_limit para visualizar na pasta \images o resultado da criptografia com um valor maior ou menor de bits.

Para realizar testes simples de criptografia de n bits:

$ pipenv shell
$ python test_encrypt.py

Para realizar testes simples de criptografia de n bits:

$ pipenv shell
$ python test_break.py

Para verificar a assertividade das funções de teste de primalidade para os algoritmos is_prime, is_prime_fermat e is_prime_miller:

$ pipenv shell
$ python test_prime.py

Exemplos de resultados:

Gráfico comparativo do tempo de criptografia para os métodos de Fermat e Miller-Rabin: Gráfico comparativo de geração de chaves RSA utilizando Fermat e Miller-Rabin

Gráfico comparativo do tempo de quebra de chave por meio de algoritmo de força bruta e Pollard Rho utilizando chave de 24bits: Gráfico comparativo do tempo de quebra de chave por meio de algoritmo de força bruta e Pollard Rho

Veja a difereça de tempo para quebra de chaves de 32bits utilizando força bruta, sendo que Pollar Rho houve um crescimento de tempo muito menor: Gráfico comparativo do tempo de quebra de chave por meio de algoritmo de força bruta e Pollard Rho

Integrantes do projeto:

Referências

Fermat Primality Test:

Find multiplicative inverse of x (mod y)

PollardRho Algorithm examples:

Matplot Spaghetti plot example:

RSA explanations:

Euclides:

About

RSA implementation and article in SBC standard

Resources

License

Stars

Watchers

Forks

Packages

No packages published