Introdução | Como funciona | Matemática | História | Contato
Esta interface python demonstra uma das técnicas mais sofisticadas de proteger dados utilizando um truque matemático incrível
A criptografia de ponta a ponta é um sistema de algoritmos matemáticos chamado RSA que embaralham seus dados de tal forma que ninguém sem acesso a senha poderá compreender o conteúdo.
Esse mini artigo vai demonstrar com detalhes e uma linguagem acessível como mensageiros online fazem para proteger suas mensagens de texto. Para isso, foi criada uma interface amigável utilizando:
- Python 3.8
- Qt Designer 5.14.1
Todos os códigos estão disponíveis acima com comentários
Uma versão portátil para Windows está disponível para download na pasta windeploy
Agora que você sabe que os dados são embaralhados, vamos aprofundar esse processo.
A criptografia funciona como uma transformada cuja função inversa é muito difícil de calcular. Ficou estranho né? Eu explico! Imagine o seno(x) = m. Na matemática, se quisermos encontrar o seno(x) cuja resposta é m, basta aplicar a função inversa arcoseno(m) que encontraremos x.
Exemplo: seno(90) = 1, logo, arcoseno(1) é igual a 90. Fácil né?
Assim como o seno, o algoritmo que estamos estudando é uma função com dado de entrada e saída:
m^e mod n = m'
E o inverso da nossa metáfora:
m'^d mod n = m
Onde m e 'm significa texto puro e o criptografado respectivamente.
A equação com e é utilizada para codificar o texto puro
A equação com d é usada para decodificar
Chamamos e e n de chave pública e d de chave privada
Nossa senha na verdade são três números (e, d e n), as "chaves". Qualquer pessoa pode ter acesso a e e n (elas são utilizadas para codificar a informação, mas apenas quem tiver d consegue resolver o enigma) Para encontrar as chaves são necessários uma sequência de passos:
-
Definir dois números primos.
Quanto maior esses números primos, mais seguro é a criptografia
Chamamos esses números primos de p e q. n é obtido a partir produto de p e q.
- Calcular função totiente φ(n) que é dado por (p-1)*(q-1).
A matemática garante que existe um e tal que 1 < e < φ(n) e o máximo divisor comum entre e e φ(n) é igual a 1.
- Achar d, o inverso modular de e
A chave privada ou d, pode ser encontrada rapidamente quando d*e mod φ(n) for igual a um.
*obs.: p e q são gerados aleatoriamente. e e d são encontrados por tentativa e erro em um laço até satisfazer as condições do algortimo dos dois últimos passos acima
p = 13, q = 17 | n -> p*q -> 13*17 = 221
φ(n) -> φ(221) = (p-1)*(q-1) -> (13-1)*(17-1) -> 12*16 = 192
e = MMC(φ(n),e) = 1 -> MMC(192,e) = 1 -> MMC(192,11) = 1 -> e = 11
d = d*e mod φ(n) = 1 -> d*11 mod 192 = 1 -> 35*11 mod 192 = 1 -> d = 35
Chave pública[e] = 11 | Chave privada[d] = 35 | Módulo[n] = 221
p = 13, q = 17 | n -> p*q -> 13*17 = 221
φ(n) -> φ(221) = (p-1)*(q-1) -> (13-1)*(17-1) -> 12*16 = 192
e = MMC(φ(n),e) = 1 -> MMC(192,e) = 1 -> MMC(192,11) = 1 -> e = 11
d = d*e mod φ(n) = 1 -> d*11 mod 192 = 1 -> 35*11 mod 192 = 1 -> d = 35
Chave pública[e] = 11 | Chave privada[d] = 35 | Módulo[n] = 221
Para embaralhar o texto, cada letra será convertida em um número com 6 caracteres, essa relação valor-letra pode ser chamada de cifra. Neste programa foi utilizado o padrão ASCII que enumera as letras e símbolos mais utilizados.
Vamos criptografar a palavra "IFPB"
Para simplificar os cálculos utilizaremos a tabela abaixo ao invés do padrão ASCII
LETRA | VALOR |
---|---|
I | 6 |
F | 1 |
P | 4 |
B | 7 |
Utilizando a cifra e a função m^e mod n para criptografar temos:
I ---> 6^11 mod 221 = 000141
F ---> 1^11 mod 221 = 000001
P ---> 4^11 mod 221 = 000166
B ---> 7^11 mod 221 = 000184
Nossa palavra "IFPB" codificada é: "000141000001000166000184"
- Quebrar a informação em bloco com 6 caracteres
000141000001000166000184
Utilizando a função m'^d mod n para decodificar temos:
000141^35 mod 221 = 6
000001^35 mod 221 = 1
000166^35 mod 221 = 4
000184^35 mod 221 = 7
- Utilizar a cifra
VALOR | LETRA |
---|---|
6 | I |
1 | F |
4 | P |
7 | B |
Nossa cifra“6147" convertida é: "IFPB"
obs.: utilize a calculadora do Windows ou esse site se quiser calcular esses números grandes!
RSA é um acrônimo para (Rivest-Shamir-Adleman). Cientistas criadores do algoritmo apresentado pela primeira vez em 1978 para uso militar e estratégico. A RSA Data Security Inc. (empresa que padroniza o algoritmo) recomenda gerar números primos p e q com 2048 bits de tamanho, ou seja, 617 dígitos. Isso garante proteção até 2030.
A teoria dos números é a base da criptografia assimétrica e sua força vem do problema da fatoração de inteiros. Problema esse tão difícil quanto o problema do caixeiro viajante ou logaritmo discreto
Sabendo que n é um produto de p e q e n trafega em rede insegura, podemos roubar essa informação e utilizar todos computadores do planeta para encontrar via força bruta, os dois fatores p * q que deram origem a n.
Basicamente, fatorar um semi primo (produto de dois números primos) p e q pode levar o tempo do universo se p e q forem grandes o suficiente!
A criptografia mudou o mundo para sempre. Essa técnica protege todo tipo de dado na internet. Desenvolvedores podem blindar seu software com chaves que garantem autenticidade. RSA também é utilizado em programas de vpn que torna impossível rastrear uma remetente web.
Sem criptografia a internet como conhecemos hoje não existiria
-
E-mail: [email protected]
Copyright (c) 2020 EduFreit4s