Skip to content

tarcisio-marinho/RSA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Implementação simples do Algoritmo de criptografia assimétrica RSA

Feito por diversão e aprendizado, não está de acordo com os padrões do algoritmo RSA atualmente. Não use para nada importante.

Quer saber mais sobre o RSA ?

https://medium.com/@tarcisioma/algoritmo-de-criptografia-assim%C3%A9trica-rsa-c6254a3c7042

Execução:

~$ python enconde.py

Insira o texto que você deseja criptografar
O programa criptografa e descriptografa o texto, mostrando o texto cifrado e depois o texto plano

https://en.wikipedia.org/wiki/RSA_(cryptosystem)

Este repositório contém o código gerador das chaves publicas e privada

O método de criação delas não segue nenhum padrão do algoritmo RSA foi algo criado por mim mesmo, seguindo algumas instruções básicas de criação

O algoritmo de geração das chaves é o seguinte:

Geração da Chave Pública:

  • gera o número P aleatório, P tem que ser primo
  • gera o número Q também aleatório e também primo
  • calcula N, sendo a multiplicação de P por Q
  • N = P*Q
  • calcula o totiente de N, phi(N), sendo Q-1 * P-1, pois eles são primos
  • phi(N)= (Q-1)*(P-1)
  • gera o número E, aleatório também, tendo que satisfazer a igualdade 1 < E < phi(N)
  • depois de gerado E, o mdc entre E e phi(N) tem que ser igual a 1
  • mdc(phi(N), E) == 1, se não satisfazer a isso, terá que ser gerado outro número aleatório E
  • A chave pública é composta por N e E

Geração da Chave Privada:

  • para encontrar o D, precisa satisfazer a igualdade mod(D^E, phi(N)) == 1
  • a função modular se dá pelo resto de divisão entre D^E e phi(N)
  • se for igual a 1, achou o D, se não, o D é incrementado até satisfazer a condição

Criptografar texto:

  • A chave privada é guardada pelo servidor, e a pública é enviada para o cliente
  • O cliente possuí o E e o N
  • Para o cliente criptografar o conteúdo que será enviado para o servidor ele tem que seguir o seguinte algoritmo:
  • para cada caracter na string que será enviada:
  • o valor da letra em ascii é elevado a E, ex: 111^E
  • o resultado é utilizado na função modular
  • mod(111^E, N) -> o resultado vai ser o valor criptografado e que será enviado para o servidor
  • esse processo se repete para todos os caracteres da string que será enviada

Descriptografar:

  • Para o servidor descriptografar o texto cifrado, ele deve seguir o seguinte algoritmo:
  • para o valor cifrado de cada caracter -> valor^D -> sendo D a chave privada
  • o resultado ele utiliza na função modular, mod(resultado, N) -> retornando ao valor 111
  • que deverá ser convertido para ascii
  • o processo repete para todos os caracteres criptografados do texto cifrado

Mais sobre o algoritmo RSA

https://pt.m.wikipedia.org/wiki/RSA

https://www.lambda3.com.br/2012/12/entendendo-de-verdade-a-criptografia-rsa/

http://www.lambda3.com.br/2012/12/entendendo-de-verdade-a-criptografia-rsa-parte-ii/

http://www.lambda3.com.br/2013/01/entendendo-de-verdade-a-criptografia-rsa-parte-iii/

Uso prático:

Eu fiz o uso desse algoritmo na implementação de um servidor e cliente SSH, usando o algoritmo RSA para troca de chaves entre o cliente e o servidor,
Código: https://github.com/tarcisio-marinho/SSH