Considerando, por enquanto, que você concorda em usar criptografia de chave simé- trica, mas que uma cifra de substituição simples não é suficientemente segura, outra opção é a cifra de chave única. Cifras de chave única funcionam com bits. Como é claro que você sabe, bit é uma abreviação de “dígito binário”, e um bit pode adotar apenas dois valores: 0 e 1. Os computadores digitais armazenam informações em sequências de bits. Algumas sequências de bits representam números, outras representam caracteres (usando os conjuntos de caracteres padrões ASCII ou Unicode) e ainda outras até representam instruções que o computador executa.
Cifras de chave única aplicam a operação exclusive-or ou XOR aos bits. Usamos ⊕ para denotar essa operação:
⊕ = ⊕ = ⊕ = ⊕ = 0 0 0 0 1 1 1 0 1 1 1 0
O modo mais simples de imaginar a operação XOR é que, se x é um bit, então x ⊕ 0 = x e x ⊕ 0 = 1 dá o oposto de x. Se x e y são bits, então se
(
x⊕ ⊕ =y)
y x: aplicar uma operação XOR a x com o mesmo valor duas vezes dará x.0⊕0=0;0⊕1=1;1⊕0=1;1⊕1=0:
Suponha que eu queira lhe enviar uma mensagem de um bit. Eu poderia lhe enviar um 0 ou um 1 como o texto cifrado, e nós teríamos de combinar se eu estava enviando o valor de bit que queria enviar ou o oposto desse valor de bit. Pelas lentes da operação XOR, teríamos de combinar se eu estava aplicando uma operação XOR àquele bit com 0 ou com 1. Então, se você fosse aplicar a operação XOR entre o bit do texto cifrado que recebeu e o bit ao qual eu tinha aplicado a operação XOR — a chave —, você recuperará o texto comum original.
Agora suponha que eu queira lhe enviar uma mensagem de dois bits. Eu poderia deixar ambos os bits em paz, trocar a ordem de ambos os bits, trocar a ordem do primeiro bit mas não a do segundo ou trocar a ordem do segundo bit, mas não a do primeiro. Novamente, nós teríamos de combinar de quais bits eu estaria trocando a ordem (se eu trocasse a ordem de algum). Em termos da operação XOR em dois bits, teríamos de combinar qual das duas sequências de dois bits 00, 01, 10 ou 11 era a chave com a qual eu estaria aplicando a operação XOR aos bits do texto comum para formar texto cifrado. Novamente, você poderia aplicar a operação XOR aos dois bits do texto cifrado com a mesma chave de dois bits com a qual eu tinha aplicado a operação XOR ao texto comum para recuperar o texto comum original.
Se o texto comum exigisse b bits — talvez ele compreenda caracteres ASCII ou Unicode que totalizam b bits —, eu poderia gerar uma sequência aleatória de b bits como chave, passar a você essa chave de b bits e aplicar a operação XOR, bit por bit, ao texto comum com a chave para formar o texto cifrado. Assim que você recebesse o texto cifrado de b bits, poderia aplicar a operação XOR a ele, bit por bit, com a chave para recuperar o texto comum de b bits. Esse sistema é denominado cifra de chave única ou ‘one-pad’,1 e a chave é denominada pad.
Contanto que os bits da chave sejam escolhidos aleatoriamente — e examinaremos essa questão mais adiante —, é quase impossível um bisbilhoteiro decifrar o texto cifrado adivinhando a chave. Mesmo que o bisbilhoteiro soubesse alguma coisa sobre o texto comum — por exemplo, que ele está em inglês —, para qualquer texto cifrado e qualquer texto comum potencial, existe uma chave que converte o texto comum potencial em um texto cifrado,2 e essa chave é a operação XOR bit por bit entre o texto comum potencial e o texto cifrado. (Isso porque, se o texto comum potencial é t, o
1 O nome vem da realização pré-computador da ideia pela qual cada participante tinha um bloqui-
nho (pad) de papel no qual uma chave estava escrita em cada folha, e os participantes tinham sequências de chaves idênticas. Uma chave podia ser usada uma única vez, e a folha onde ela estava escrita era arrancada do bloquinho, expondo a próxima chave. Esse sistema baseado em papel usava uma cifra de deslocamento, mas na base de letra por letra, na qual cada letra corres- pondente da chave dava a quantidade de deslocamento, de 0 a 25 para z. Por exemplo, visto que
z significa deslocar 25, m significa deslocar 12 e n significa deslocar 13, a chave zmn converte o texto comum dog no texto cifrado cat. Todavia, diferentemente do sistema baseado na operação XOR, deslocar as letras no texto cifrado na mesma direção com a mesma chave não recupera o texto comum; nesse caso, ele daria “bmg”. Em vez disso, você tem de deslocar as letras do texto cifrado na direção oposta.
2 Para o esquema letra por letra citado na nota de pé de página anterior, a chave zmn converte o texto
comum dog no texto cifrado cat, mas podemos chegar a esse texto cifrado com um texto comum diferente, elk, e uma chave diferente, ypj.
texto cifrado é c, e a chave é k; então, não somente t⊕ =k c, mas também t⊕ =c k; a operação ⊕ aplica-se bit por bit a t, k e c, de modo que a operação XOR entre o i -ésimo bit de t e o i-ésimo bit de k é igual ao i-ésimo bit de c.) Assim, criptografar com uma cifra de chave única impede o bisbilhoteiro de conseguir qualquer informação adicional sobre o texto comum.
Cifras de chave única dão boa segurança, mas as chaves exigem tantos bits quanto o texto comum; esses bits devem ser escolhidos aleatoriamente e as chaves precisam ser compartilhadas entre as partes com antecedência. Como o nome subentende, você deve usar uma cifra de chave única apenas uma vez. Se usar a mesma chave k para os textos comuns t1 e t2, então
(
t1⊕ ⊕k)
(
t2 ⊕ = ⊕k)
t1 t2, o que pode revelar onde osdois textos comuns têm os mesmos bits.