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.
fonte
Respostas:
Sim, este é um bloco único . Se o material principal nunca for reutilizado, é teoricamente seguro.
As desvantagens são que você precisaria de uma chave por par de principais de comunicação e de uma maneira segura de trocar o material da chave antes da comunicação.
fonte
Como a resposta de Vatine indica, seu algoritmo é basicamente um bloco único.
No entanto, para comentar uma de suas anotações:
Minha resposta é não, não é incrível. O diabo está sempre nos detalhes, e o diabo aqui está na troca de chaves. Seu método depende de uma troca de chaves cara a cara sem falhas. Não posso me dar ao luxo de enviar James Bond carregando um disco flash de 4 GB para todos os comerciantes da Internet toda vez que quiser comprar algo ou ter outras conexões seguras.
E, por último, o aspecto XOR do seu algoritmo não é importante. Uma cifra de substituição simples é adequada para um OTP. O ponto forte do OTP é que a chave nunca é reutilizada e supõe que James Bond esteja trocando as chaves na perfeição por ambas as partes (ou seja, troca segura de chaves anterior)
fonte
Embora o one-time-pad tenha uma garantia de privacidade incondicional (matematicamente comprovada) contra um invasor que só pode ler mensagens, ele tem alguns pontos fracos.
Um invasor interceptador que adivinha corretamente o texto sem formatação pode manipular o texto cifrado para o que quiser (com o mesmo comprimento).
Se um invasor inserir ou excluir alguma mensagem (ou parte dela), os ponteiros de Alice e Bob ficarão fora de sincronia e toda comunicação futura será interrompida.
Atualização: Isso pressupõe que ambas as partes controlem os dois ponteiros. Se você enviar o valor atual do ponteiro, estará vulnerável a ataques de duas vezes (se você permitir que o mesmo intervalo de chaves seja usado mais de uma vez) ou ataques do DOS (se você não permitir o mesmo intervalo de teclas) para ser usado mais de uma vez, por exemplo, excluindo-os).
Esses dois problemas são causados por falta de integridade e proteção de autenticação - você tem uma cifra perfeita, mas não possui MAC.
Adicione um MAC ao seu protocolo one-time-pad para torná-lo realmente seguro. Cada mensagem deve receber uma "soma de verificação" que garante que ela foi realmente enviada pelo suposto remetente e não foi modificada no meio. Além disso, você deve enviar algum número de sequência para que o destinatário saiba qual parte da chave usar quando uma mensagem anterior foi perdida (ou para rejeitar a mensagem se ela estiver duplicada) - inclua isso no cálculo da soma de verificação.
Um algoritmo MAC comum faria aqui, mas suponho que você queira usar algum MAC polinomial único para ter segurança correspondente ao seu teclado único. (Pegue a chave MAC dos bits antes ou depois da sua chave de criptografia, ou seja, não reutilize uma chave para os dois objetivos.)
fonte
Na verdade, não é totalmente seguro. O que o seu protocolo vaza é o COMPRIMENTO da mensagem comunicada.
Por exemplo, se o espião sabe que você responderá com "sim" ou "não" e vê o comprimento = 2, ele pode deduzir que é "não".
Na verdade, é incrível o quanto pode ser deduzido apenas de comprimentos conhecidos, se alguém puder adivinhar o contexto.
fonte