Code Monkey home page Code Monkey logo

rsa's Introduction

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

rsa's People

Contributors

tarcisio-marinho avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

rsa's Issues

[bug, enhancement] Prime inconsistance

I was reading your article, and then decided to check this code! everything worked nice, but sometimes I experienced some weird issues happening with the decryption. After some debugging, I found that low or equal primes (such as 3 and 2, or 13 and 13) caused this issue.

I've already made a pull request for you :), with some other stuff that I specify in the PR description.

Here's the PR: #2

Cheers! 😄

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.