Os números primos e a segurança nos computadores
Este artigo irá me dar um prazer incrível, porque une duas coisas das quais gosto muito, matemática e informática ! Vou falar sobre chaves de segurança e números primos. Não de uma forma complexa e cheio de contas, mas tentando contar de uma forma simples de entender.
Nossa conversa lá atrás, entendendo o que é um número primo. Lembra daquela história da tabuada, que os professores faziam a gente decorar até a tabuada do nove ? kkkkk. Certeza de que sim !!! Todo número é formado pela multiplicação de outros números especiais. Estes números especiais são os números primos. Talvez o nome não explique o que eles são, e talvez até o nome devesse ser números diferenciais ou exclusivos, mas afinal eu não sou um Euler para dar nome às coisas ! Os números primos são números que não são formados pela multiplicação de dois números. Ou, de forma inversa, são números que não podem ser divididos por nenhum outro. Olha só, vamos pegar os primeiros números, começando do 1. O número 1 só pode ser dividido por ele mesmo, mas os matemáticos decidiram dar uma destinação especial a ele, muito além dos primos. O 2 é um primo, porque nenhum número divide ele. Aliás, o 2 é o único número primo par, porque todos os outros números pares dividem por 2. O 3 é um número primo, e o quatro não, porque 4=2 x 2. O 5 é um número primo, já o 6 divide por 2 e por 3. Agora vem o teorema fundamental da Aritmética. TODO número é formado pela multiplicação de dois números primos. O número 6 é igual a 3 x 2. Não conseguimos encontrar outra multiplicação que dê 6. O 7 é um número primo, porque ninguém consegue dividí-lo. O 8 é igual a 2 x 2 x 2. O 9 é igual a 3 x 3. Não existem outros dois números que multiplicados dêem 9.
Fantástico, e como usamos isto ? Calma, calma. É importante dizer que existem infinitos números primos. Sempre lá na frente existe um número que não pode ser dividido ou decomposto por multiplicações. Isto já foi provado matematicamente. E não existe uma conta fácil que identifique qual é o próximo primo. Olha só os primeiros até o 100 são :
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,53, 59, 61, 67, 71, 73, 79, 83, 89 e 97
Percebe que não estão igualmente divididos ? As vezes tem um espaço maior, as vezes um espaço menor entre eles. E como sabemos que um número é primo ? Bom, podemos utilizar a técnica da força bruta, que também é o princípio do "crivo de Eratósthenes". Pegamos o número e saímos dividindo pelos que vêm antes dele. Se conseguirmos encontrar uma divisão que não sobre resto, quer dizer que ele pode ser decomposto e portanto não é um número primo. Ahhhhh, mas isto é fácil, só fazer um programinha de 4 linhas eu calculo se qualquer número é primo. Verdade mesmo, mas tenta calcular o seu algorítmo para um número com 128 dígitos ! Mas vamos pegar um número primo menor, o 999983. Batendo o olho nele, de primeira pode achar que é divisível por 3! Pahhhh, errado. Este número é primo. O maior primo descoberto até hoje tem 17.425.170 dígitos. Isto mesmo, faça um algorítmo para descobrir se um número com 17 milhões de dígitos é primo. Vai esperar bastante. Talvez umas mil vidas ou mais, kkkkk. Fantático, sabemos que um número primo não pode ser dividido por outro, e que números muito grandes são difíceis de saber se são primos. Mas o que isto tem a ver com segurança da informação ?
Agora é que vem. Imagine que deseja proteger uma informação. O número 3, que você quer enviar para outro computador. Se multiplicarmos o número que desejamos proteger por um número primo grande, muito muito grande mesmo, teremos outro número. Vamos pegar o número primo 999983 e multiplicar por 3. O resultado será 2999949. Pelo que já vimos, o número primo 999983 não pode ser dividido por mais ninguém. Portanto, a única conta no universo que gera o número 2999949 é 999983 x 3. Se quem estiver do outro lado, recebendo a informação, tiver o número primo 999983, pode facilmente dividir 2999949 por 999983 e obterá o número 3. Se por um lado é difícil saber se o número é primo, por outro lado tendo o número primo, é fácil dividir dois números e encontrar um resultado.
Claro que desta forma não dá muito certo, porque afinal eu quero enviar o 3 e acabo mandando o 2999949 para o outro lado. Gasto muitos dígitos para proteger, não funciona na prática. Mas aí entram as particularidades de cada algorítmo que usa números primos. Por exemplo, no RSA, usa um algoritmo inventado por euler para encontrar o totiente, que é a quantidade de co-primos de um número, e usamos este co-primo como parte da codificação, para tornar a conta menor. Não vamos entrar nesta matemática, para simplificar este artigo. Mas este artigo aqui, explica isto de uma forma bem legal !
E tem algo que pode acabar com nossa vida ? Bem, se houvesse uma heurística, que não fosse força bruta, e que permitisse decompor qualquer número em seus multiplicadores originais de forma rápida, ou ao menos olhar para um número e saber se é primo sem muitas contas, praticamente todos os algorítmos de segurança existentes poderiam seriam quebrados, e você precisaria voltar ao banco para fazer qualquer operação. Ainda bem que isto não é possível hoje em dia. Mas no dia que alguém descobrir, o bug do milênio não será nem uma gota dos problemas que teremos. Mas aí é teroria da conspiração, né ?
Os matemáticos buscam desesperadamente este algorítmo, não para dificultar sua vida, mas porque isto resolveria muitos outros problemas da matemática.
De onde vêm e porque existem os números primos, é uma daquelas coisas que fazem a matemática ser algo lindo e misterioso.
Se você gostou do artigo, e quiser ler mais, pode encontrar outros artigos meus aqui 👇
#glaucoreis
CTO Security | CCSP | Security Architect & Advisor | Security Technical Leader | Membro ANPPD®
3 aComo sempre um belo artigo e muito didático! Parabéns Glauco.
Senior Cloud Architect @ IBM | PMP, IBM Cloud & Azure SME
3 aExcelente artigo Glauco Reis! Adiciono que: - Hoje o algoritmo mais rápido para fatoração é o number field sieve (https://en.m.wikipedia.org/wiki/General_number_field_sieve) - Importante lembrar que se estima que em 15 a 20 anos, teremos computadores quânticos com qubits suficientes para que estes cálculos deixem de ser um problema para os computadores. A hora é agora para todos pensarmos em uma criptografia no mundo pós comoditizacao de computação quântica