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