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/
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)
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.
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!