Primeiro, devemos assumir que Eva é apenas passiva. Com isso, quero dizer que ela sinceramente envia o cartão para Bob, e o que quer que ela traga de volta para Alice é de fato a resposta de Bob. Se Eva puder alterar os dados em uma ou em ambas as direções (e sua ação permanecer sem ser detectada), tudo será útil.
(Para honrar tradições de longa data, as duas partes honestas envolvidas na conversa são chamadas de Alice e Bob. No seu texto, você disse "você". Meu nome verdadeiro não é "Alice", mas responderei como se você tivesse escrito que Alice deseja verificar o número de telefone de Bob.)
A resposta simples (mas fraca) é usar uma função hash. Alice escreve no cartão: "devolva-me o hash SHA-256 do seu número de telefone". O SHA-256 é uma função de hash criptográfico que se acredita segura, na medida em que as funções de hash vão. Computá-lo à mão seria tedioso, mas ainda factível (são cerca de 2500 operações de 32 bits, em que cada operação é uma adição, mudança ou rotação de palavras ou uma combinação bit a bit de bits; Bob deve conseguir fazê-lo em um dia ou tão).
Agora, o que é fraco nisso? O SHA-256, sendo uma função hash criptográfica, é resistente a "pré-imagens": isso significa que, dada uma saída hash, é muito difícil recuperar uma entrada correspondente (esse é o problema que Eve enfrenta). No entanto, "muito difícil" significa "o método mais fácil é a força bruta: tentar possíveis entradas até encontrar uma correspondência". O problema é que a força bruta é fácil aqui: não existem tantos números de telefone possíveis (na América do Norte, são 10 dígitos, ou seja, apenas 10 bilhões). Bob quer fazer as coisas manualmente, mas não podemos assumir que Eva é tão limitada. Um PC básico pode experimentar alguns milhões de hashes SHA-256 por segundo, para que Eve seja executada em menos de uma hora (menos de 5 minutos se ela usar uma GPU).
Este é um problema genérico: se Bob é determinístico (ou seja, para uma determinada mensagem de Alice, ele sempre retornaria a mesma resposta), Eve pode simulá-lo. Ou seja, Eve sabe tudo sobre Bob, exceto o número de telefone, então ela virtualmente administra 10 bilhões de Bobs, que diferem apenas pelo número de telefone que eles assumiram; e ela espera que um dos Bobs virtuais retorne o que o verdadeiro Bob realmente retornou. A falha afeta muitos tipos de soluções "inteligentes" que envolvem nonces aleatórios e criptografia simétrica e assim por diante. É uma falha forte, e suas mentiras raiz na diferença enorme em poder entre Eva e Bob (computação agora, se Bob também tinha um computador tão grande como Eve, então ele poderia usar um lentofunção hash através do uso de muitas iterações; é mais ou menos do que se trata o hash de senha, com o número de telefone no lugar da senha; veja bcrypt e também esta resposta ).
Portanto, uma solução não fraca deve envolver alguma aleatoriedade da parte de Bob: Bob deve jogar uma moeda ou jogar dados repetidamente e injetar os valores em seus cálculos. Além disso, Eve não deve ser capaz de desvendar o que Bob fez, mas Alice deve ser capaz de fazê-lo, então algumas informações são transmitidas com confiança de Bob para Alice. Isso é chamado de criptografia assimétrica ou, pelo menos, acordo de chave assimétrica. O algoritmo mais simples dessa classe para calcular, mas ainda razoavelmente seguro, é o RSA com o preenchimento PKCS # 1 v1.5 . O RSA pode usar como expoente público. Portanto, o protocolo é assim:e=3
Alice gera um grande número inteiro em que e são inteiros primo de tamanho semelhante, de tal modo que o tamanho de é suficiente para garantir a segurança (isto é, pelo menos 1024 bits, a partir de 2012). Além disso, Alice deve providenciar para que e não sejam múltiplos de 3.p q n p - 1 q - 1n=pqpqnp−1q−1
Alice escreve no cartão.n
Bob primeiro coloca seu número de telefone em uma sequência de bytes, contanto que , conforme descrito por PKCS # 1 (isso significa: 00 02 xx xx ... xx 00 bb bb .. bb, onde 'bb' são os dez bytes que codificam o número de telefone e o 'xx' são valores aleatórios de bytes diferentes de zero, para um comprimento total de 128 bytes se for um número inteiro de 1024 bits).nnn
Bob interpreta sua sequência de bytes como um grande valor inteiro (codificação big-endian) e calcula (de modo que há algumas multiplicações com números inteiros muito grandes, depois uma divisão, o resultado sendo o restante da divisão). Isso ainda é possível manualmente (mas, novamente, provavelmente levará a maior parte de um dia). O resultado é o que Bob envia de volta para Alice.m 3 m o d nmm3 mod n
Alice usa seus conhecimentos de e para recuperar do enviada por Bob. A página da Wikipedia no RSA tem algumas explicações razoavelmente claras sobre esse processo. Quando Alice , ela pode remover o preenchimento (o 'xx' é diferente de zero, para que o primeiro byte 'bb' possa ser localizado sem ambiguidade) e, em seguida, ela tem o número de telefone, que pode ser comparado com o que ela tinha.q m m 3 m o d n mpqmm3 mod nm
O cálculo de Alice exigirá um computador (o que um computador faz é sempre elementar e factível à mão, mas um computador é diabolicamente rápido, portanto o "factível" pode levar muito tempo para ser praticado na prática; a descriptografia da RSA à mão levaria muitos semanas).
(Na verdade, poderíamos ter um cálculo manual mais rápido usando a criptografia McEliece , mas a chave pública - o que Alice escreve no cartão - seria enorme e um cartão simplesmente não faria; Eve precisaria transportar um livro completo de dígitos.)