segunda-feira, 28 de setembro de 2015

Hardcore Devel #33 - Criptografia - One Time Pad

Fala galera! Hoje nós vamos falar sobre uma técnica específica de criptografia.


E você já já vai entender qual é a dessa imagem.

Se você esta familiarizado com Álgebra Booleana, você sabe que isso é um XOR. Se você não está, isso é um "ou exclusivo". E ele é basicamente uma das operações mais importantes na criptografia dos computadores porque ele tem propriedades muito interessantes. Então antes de começar, permita-me ensinar um pouco sobre o XOR e essa álgebra.

Sem usar o MathJax.

É bem simples porque na álgebra booleana só vale 0 e 1. Portanto você pode enumerar os resultados de todas as operações possíveis com todos os elementos existentes. E, é isso que eu vou fazer, só que como eu não vou usar o MathJax, toda vez que você ler XOR, você vai imaginar aquela imagem nas devidas proporções como se fosse uma adição, ok?

Os resultados são os seguintes:
  • 0 XOR 0 = 0
  • 0 XOR 1 = 1
  • 1 XOR 0 = 1
  • 1 XOR 1 = 0
Pronto defini como o "ou exclusivo" se comporta quando a gente só pode usar 0 e 1. O lance é: na computação o mundo é binário, perfeito para se usar álgebra booleana. E você pode vetorizar essa álgebra(É assim que você monta os bytes através dos bits). Um XOR entre dois bytes de informação é simplesmente essa operação sendo executada nos pares das casas. Mais ou menos assim, sejam A e B dois bits de informação. Então A é composto por a1 e a2, e B é composto por b1 e b2. A operação A XOR B, gera um outro par de bits de informação C onde:

  • c1 = a1 XOR b1
  • c2 = a2 XOR b2

Acredito que a partir daí fica fácil ver como ele faz pra "n" bits de informação.

Dito isto, agora podemos falar do One Time Pad. Que é extremamente simples. Uma mensagem pra um computador é só um conjunto de bits. Você vai gerar uma chave K que tem o mesmo tamanho da mensagem M e vai gerar a cifra C da seguinte forma:

C = M XOR K

Simples, fácil e prático. E agora pra você descriptografar é só você fazer o seguinte:

M = C XOR K

Exatamente isso. Você aplica a mesma operação usando a mesma chave na cifra e você recupera a mensagem. Isso porque quando você faz A XOR A, o resultado é 0. E olhe só, o XOR é associativo e comutativo, ou seja, você pode trocar a ordem dos termos que não vai mudar em nada. Agora só falta mostrar porque isso funciona.

A força dessa criptografia depende diretamente do tamanho da mensagem. A sua chave é uma possibilidade entre 2 elevado ao tamanho da mensagem de possibilidades. Ou seja e quase impossível que alguém quebre a criptografia na base da força bruta quando a mensagem é grande.

Só que como tudo na vida. Existe algumas desvantagens.

Por exemplo, não é uma boa idéia usar o One Time Pad mais de uma vez. Isso porque se você usar a criptografia com mensagens diferentes com uma mesma chave. Isso faz sentido em qualquer tipo de ataque para quebrar criptografias de chave simétrica, que são aquelas que usam a mesma chave para cifrar e descifrar

Quando você encripta alguma coisa você adiciona tempo de processamento em cima de alguma coisa e isso pode atrasar as mensagens, ou seja, você não pode utilizar essa encriptação para mensagens infinitamente grandes, e nem pode replicá-la pelos pedaços das mensagens.

E por fim, ambos os lados precisam saber qual é a chave, e você não pode simplesmente transmitir a chave para que todos vejam, caso contrário todo mundo vai saber decodificar as mensagens e não vai adiantar de nada.

Mas esse tipo de encriptação serve como base para alguns outros tipos que são conhecidos como o DES, ou, um dos mais robustos atualmente, o AES. O DES já foi quebrado, então não é uma boa idéia utilizá-lo, mas o AES está vivo até hoje, e a base dele é o One Time Pad, obviamente com modificações.

E isso é tudo! Agora você ja pode brincar de encriptar e desencriptar coisas.

Nenhum comentário:

Postar um comentário