Digamos que Alice e Peter tenham um cartão de memória flash USB de 4 GB. Eles encontram e salvam nos dois bastões dois arquivos nomeados alice_to_peter.key
(2GB) e peter_to_alice.key
(2GB) que contêm bits gerados aleatoriamente. Eles nunca se reencontram, mas se comunicam eletronicamente. Alice também mantém uma variável chamada alice_pointer
e Peter mantém a variável chamada peter_pointer
, ambas inicialmente definidas como zero.
Quando Alice precisa enviar uma mensagem para Peter, ela envia (onde n
é o enésimo byte da mensagem):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(e para segurança máxima, a parte usada da chave pode ser apagada)
Peter recebe encrypted_payload_to_peter
, lê alice_pointer
armazenado no início da mensagem e faz:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
E para segurança máxima, após a leitura da mensagem, apague também a parte usada da chave.
- EDIT: De fato, este passo com este algoritmo simples (sem verificação de integridade e autenticação) diminui a segurança, veja a publicação de Paŭlo Ebermann abaixo.
Quando Peter precisa enviar uma mensagem para Alice, eles fazem o inverso, desta vez com peter_to_alice.key
e peter_pointer
.
Com esse esquema trivial, eles podem enviar todos os dias pelos próximos 50 anos 2 GB / (50 * 365) = ~ 115 kB de dados criptografados nas duas direções. Se eles precisarem de mais dados para enviar, poderão usar chaves maiores, por exemplo, com os HDs de 2 TB de hoje (chaves de 1 TB), seria possível trocar 60 MB / dia pelos próximos 50 anos! São muitos dados na prática; por exemplo, usando compressão, são mais de uma hora de comunicação de voz de alta qualidade.
Parece-me que não há como um invasor ler as mensagens criptografadas sem as chaves, porque mesmo que possuam um computador infinitamente rápido, com força bruta podem obter todas as mensagens possíveis abaixo do limite, mas esse é um número astronômico de mensagens e o atacante não sabe qual delas é a mensagem real.
Estou certo? Esse esquema de comunicação é realmente absolutamente seguro? E se for seguro, ele tem seu próprio nome? A criptografia XOR é bem conhecida, mas estou procurando o nome desse aplicativo prático concreto usando chaves grandes em ambos os lados? Estou humildemente esperando que este aplicativo tenha sido inventado por alguém antes de mim. :-)
Nota: Se é absolutamente seguro, é incrível, porque com os atuais dispositivos de armazenamento grandes e de baixo custo, seria muito mais barato fazer comunicação segura do que com criptografia quântica cara, e isso tem segurança equivalente!
EDIT:
Eu acho que isso será mais prático no futuro, pois os custos de armazenamento diminuem.Pode resolver a comunicação segura para sempre.Hoje, você não tem certeza se alguém ataca com sucesso as cifras existentes, mesmo um ano depois, e torna inseguras as implementações muitas vezes caras. Em muitos casos, antes que a comunicação ocorra, quando os dois lados se encontram pessoalmente, é a hora de gerar as chaves. Eu acho que é perfeito para comunicação militar, por exemplo, entre submarinos que podem ter HDs com teclas grandes e a central militar pode ter um HD para cada submarino. Também pode ser prático na vida cotidiana, por exemplo, controlar sua conta bancária, porque quando você cria sua conta, encontra-se com o banco etc.