DEV Community

Cover image for Uma Introdução Simples ao RSA
Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on Edited on

Uma Introdução Simples ao RSA

Você já deve ter ouvido falar de RSA – aquele negócio de criptografia, chaves assimétricas –, certo? Mas você sabe o que é, como funciona e de onde vem o nome? Nessa thread, vou dar uma visão geral bem simples pra você entender e arrasar no próximo date ou churrasco.


Vamos direto ao ponto! RSA é um algoritmo de criptografia de chaves assimétricas (ou chaves públicas). E chaves assimétricas aqui significa que são valores diferentes, mas matematicamente relacionados pra que a criptografia e descriptografia funcionem certinho.


O nome RSA vem dos sobrenomes dos seus 3 criadores: Ron Rivest, Adi Shamir e Leonard Adleman. RSA é provavelmente o sistema de criptografia mais conhecido atualmente e foi divulgado em 1977.


Voltando na questão das chaves assimétricas ou públicas. Essa parte é interessante porque pra que duas partes se comuniquem de forma segura, elas não precisam compartilhar uma senha – elas compartilham apenas uma informação pública e cada uma tem sua "senha" – chave privada.


Vamos supor que A queira se comunicar com B de forma segura. No RSA, A tem uma chave pública e uma chave privada e B também tem uma chave pública e outra privada. A e B trocam livremente suas chaves públicas. Sem problemas se terceiros acessarem essas chaves públicas.


Quando A precisa enviar uma mensagem pra B, A usa a chave pública de B para criptografar uma mensagem e então a envia para B. B então usa sua chave privada para descriptografar essa mensagem. E vice-versa para quando B quiser enviar mensagens para A.

Tranquilo até aqui?


O algoritmo pra criptografar e descriptografar é super simples. Imaginando que toda informação que trocamos entre computadores seja representada por números, vamos a um exemplo de que "oi" seja representado por 111 e 115.

https://cryptii.com/pipes/text-decimal


As chaves públicas do RSA na verdade são pares de números. Vamos supor que a chave pública seja (143, 17) e a privada seja (143, 113). A fórmula pra criptografar é (para cada caractere):

c ^ 17 mod 143

...onde c é 111 e depois 115


Então "oi" que é 111 e 115, seria representado por 89 e 124. Se formos na tabela ASCII, o valor criptografado seria "Y|".

Pra descriptografar, a fórmula usa valores da chave privada:

d ^ 113 mod 143

...onde d é 89 e depois 124


Vamos descriptografar 89 e 124 então:

89 ^ 113 mod 143 = 111
124 ^ 113 mod 143 = 115

Tá-dá! Temos 111 e 115 de novo que representa "oi"!


A parte que acho mais legal do RSA é a geração das chaves. Mas como já existem muitos materiais na internet sobre como fazer isso, fiz apenas uma representação visual porque não achei nada assim e talvez isso te ajude a entender.

https://www.cryptool.org/en/cto/rsa-step-by-step/

Geração de Chaves RSA

Geração de Chaves RSA com Exemplos


Bom, isso aqui foi o básico do básico sobre RSA de uma forma extremamente simplificada.

O RSA tem umas coisas bem interessantes que valem ser mencionadas. Continua aqui pra você ser a pessoa mais legal no jantar do natal desse ano e soltar essas pros seus primos.


A fortaleza do RSA é ser baseado em números primos e seu produto. Isso porque fatorar dois números primos gigantes (n) é extremamente custoso. Um computador normal levaria muuuuito tempo pra fazer isso. Com computadores quânticos o negócio já muda de figura.


Se alguém descobrir um algoritmo pra quebrar o número n em q e p, basicamente a segurança da maioria da internet estaria seriamente comprometida. Ou você acha mesmo que não têm governos que interceptam mensagens criptografadas e guardam tudo pra tentar descriptografar? Humpf...


Outra coisa interessante sobre RSA é que as chaves são comutativas no sentido que a chave pública pode ser usada também pra descriptografar algo que foi criptografado com a chave privada. E isso é usado para assinaturas.


Ou seja, de forma simplificada, eu criptografo algo com minha chave privada e qualquer um poderia descriptografar com minha chave pública para comprovar minha autenticidade. Por exemplo, isso é usado em emails.


RSA ainda é muito usado. Por exemplo, no TLS 1.2, o RSA pode ser usado pra troca de chaves.


Se achou esse conteúdo legal, posso te sugerir algumas coisas:

  • Procure por detalhes relacionados a RSA em certificados de sites – p.ex. a chave pública (geralmente em formato hexadecimal).

  • Escreva o algoritmo para gerar chaves e (des)criptografar na sua linguagem favorita.


Muito obrigado se leu até aqui!


Acesse https://gist.github.com/zanfranceschi/aae284f2446adf00c0bc240d2d43cf33 para um exemplo prático em Python.

Top comments (2)

Collapse
 
guilhermecfmello profile image
Guilherme

Muito interessante o fluxograma da geração das chaves, mostrar exemplo com valores de entrada ajuda demais. Pessoalmente só confio na teoria depois que consigo ver/testar um pouco por conta própria hahah.
Seria bom se isso fosse um padrão dos artigos.

Collapse
 
fernando_ginezdasilva_8 profile image
Fernando Ginez da Silva

Parabéns pela didática, cheguei aqui porque um amigo curtiu o teu post no LinkedIn. Gostei muito do artigo e principalmente do exemplo com pequenos números - faz toda a diferença para quem gosta de exercitar e “rodar” para entender. Abraço!