Criptografia Ponta a Ponta
Na primeira parte apresentada, todos que conheciam a palavra-chave seriam capazes de decifrar a expressão codificada. Surge, então, um novo problema – como mandar a palavra-código, ou chave, em segurança? Essa questão está intimimamente associada à criptografia moderna e algumas das soluções são utlizadas até hoje em senhas bancárias, codificação em redes, etc. As trocas de chave, em geral, são feitas por protocolos que,de alguma forma, geram códigos numéricos que podem, em exemplos diretos, serem associados a letras de diversas formas, por exemplo, via código ASCII ou posição no alfabeto.
Vamos utilizar talvez o primeiro método de troca de chaves simétrica proposto por Whitfield Diffie e Martin Hellman em 1976. Neste engenhoso porém simples processo, duas pessoas podem compartilhar palavras-chave sem jamais transmiti-la diretamente. Esse processo se dá a partir de um conjunto de números públicos e privados.
Vamos explicar o método por meio de uma atividade, por exemplo, em sala.
• Escolhem-se dois alunos para participarem da atividade, por exemplo, Enzo (E) e Valentina (V).
• Define-se uma tabela de conversão de números para letras, neste caso, 0 – a, 1 – b, 2 – c, \cdots, 25-z
• A dupla define dois números que serão públicos, como exemplo, a=17 e m=342. (Note que é necessária a condição a<m e quanto maiores os números, maior a possibilidade de chaves grandes e, portanto, menos decifráveis. A escolha será feita, naturalmente, de acordo com as ferramentas computacionais disponíveis – ou não – na apresentação.)
• Cada um escolhe, para si, um número (chave secreta), suponhamos que as escolhas de Enzo e Valentina sejam, respectivamente, \gamma_E=11 e \gamma_V=13.
• Enzo calcula 0<\lambda_E<m congruente a a^{\gamma_E}\mod m, em outra linguagem, o resto da divisão (inteira) a^{\gamma_E}\div m e envia para Valentina (não é necessário sigilo). Valentina faz o mesmo a partir de a^{\gamma_E}\mod m. Com os números propostos teríamos \lambda_E=251 e \lambda_V=35.
• A chave secreta \kappa entre os dois seria calculada por Enzo e Valentina da seguinte forma \kappa=\lambda_V^{\gamma_E}=\lambda_E^{\gamma_V}\mod m, com 0<\kappa<m. Com os números utilizados, teríamos \kappa=161 e, de maneira simplificada, poderíamos utilizar a palavra-chave bgb.
Por que funciona?
O segredo do método está no fato de que, supondo serem conhecidos a,\lambda e m em
a^\gamma=\lambda \mod m,
solucionar a equação acima, ou seja, encontrar o valor de \gamma é computacionalmente muito oneroso, principalmente se forem suficientemente grandes os números conhecidos. Isto posto, caso a transmissão de \lambda seja interceptada, será praticamente impossível encontrar o valor de \gamma e consequentemente descobrir a chave secreta.
Por outro lado, supondo que a pessoa 1 (P1) tenha como chave secreta \gamma_1, ela transmitirá a pessoa 2 (P2) o número a^\gamma_1\mod m e, analogamente, receberá o número a^\gamma_2\mod m.
A partir do número recebido, P1 fará a conta (a^\gamma_2)^{\gamma_ 1}\mod m que, pelas propriedades da exponenciação e da congruência módulo m, terá o mesmo valor do cálculo a ser efetuado por P2, qual seja, (a^\gamma_1)^{\gamma_ 2}\mod m. Desta feita, ambas as pessoas obterão o mesmo número sem jamais saber a chave secreta uma da outra, entretanto, sendo capazes de enviar códigos de uma ponta a outra.
Vamos implementar o método no aplicativo abaixo?
1. Define-se uma chave pública, ou seja, os valores de a e m.
2. Cada um dos participantes, em computadores diferentes, escolhe sua Chave Privada
3. A partir da Chave Privada \gamma, o aplicativo calcula a^\gamma\mod m e o gera o número Para Transferência.
4. Esse número deve ser passado de um participante para o outro por qualquer meio (whatsapp, papelzinho, grito, etc..)
5. Em posse do número (Chave da Pessoa 2 ), cada um dos participantes o escreve abaixo de Recebida e o aplicativo vai gerar, caso não tenha havido algum erro, exatemente a mesma Chave-Numérica e, consequentemente, a mesma Palavra-Chave.
Pronto! Com a palavra-chave (código) gerada, os particpantes podem trocar entre si mensagens criptografadas.
Para facilitar a brincadeira, abaixo o aplicativo para codificar-decodificar palavras cripografadas. Divirtam-se.