RSA

Simple RSA cryptographyc algorithm implementation

GPL-3.0 License

Stars
24

Implementao simples do Algoritmo de criptografia assimtrica RSA

Feito por diverso e aprendizado, no est de acordo com os padres do algoritmo RSA atualmente. No use para nada importante.

Quer saber mais sobre o RSA ?

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

Execuo:

~$ 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 repositrio contm o cdigo gerador das chaves publicas e privada

O mtodo de criao delas no segue nenhum padro do algoritmo RSA foi algo criado por mim mesmo, seguindo algumas instrues bsicas de criao

O algoritmo de gerao das chaves o seguinte:

Gerao da Chave Pblica:

  • gera o nmero P aleatrio, P tem que ser primo
  • gera o nmero Q tambm aleatrio e tambm primo
  • calcula N, sendo a multiplicao de P por Q
  • N = P*Q
  • calcula o totiente de N, phi(N), sendo Q-1 * P-1, pois eles so primos
  • phi(N)= (Q-1)*(P-1)
  • gera o nmero E, aleatrio tambm, 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 no satisfazer a isso, ter que ser gerado outro nmero aleatrio E
  • A chave pblica composta por N e E

Gerao da Chave Privada:

  • para encontrar o D, precisa satisfazer a igualdade mod(D^E, phi(N)) == 1
  • a funo modular se d pelo resto de diviso entre D^E e phi(N)
  • se for igual a 1, achou o D, se no, o D incrementado at satisfazer a condio

Criptografar texto:

  • A chave privada guardada pelo servidor, e a pblica enviada para o cliente
  • O cliente possu o E e o N
  • Para o cliente criptografar o contedo 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 funo 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 funo 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 prtico:

Eu fiz o uso desse algoritmo na implementao de um servidor e cliente SSH, usando o algoritmo RSA para troca de chaves entre o cliente e o servidor,
Cdigo: https://github.com/tarcisio-marinho/SSH