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!