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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy