A cifra de Vigenère é polialfabética. Ao contrário das cifras monoalfabéticas, a mesma letra pode ser cifrada de formas diferentes conforme sua posição no texto. Para isso, ela utiliza uma chave, o que representou uma evolução importante porque permite resistir, até certo ponto, à análise de frequência de letras.
O nome Vigenère da cifra vem do diplomata Blaise de Vigenère que descreveu essa cifra, junto com outras, em 1586 no livro “Traité des Chiffres”. No entanto, Giovan Battista Bellaso já havia descrito um método semelhante. Ele não era exatamente igual: primeiro usava uma palavra-chave para gerar cinco alfabetos, que depois eram combinados com uma segunda chave para cifrar o texto.
A cifra de Vigenère é simples. Usa-se uma tabela bidimensional com as letras de A a Z nos dois eixos. No eixo horizontal ficam as letras do texto simples e, no vertical, as letras da chave. Primeiro, a chave é repetida até que cada letra do texto tenha uma letra correspondente da chave. Para um texto de sete caracteres e uma chave de três, a chave é repetida duas vezes e sua primeira letra é acrescentada. Por exemplo, com o texto “Vigenere Cipher” e a chave “key”:
A chave é repetida quantas vezes forem necessárias para cobrir todo o texto simples. É importante escolher uma chave suficientemente longa: quanto menor ela for, mais se repetirá e mais fácil será para um atacante identificar padrões repetidos no texto cifrado.
Depois que cada letra do texto simples recebe uma letra correspondente da chave, o texto pode ser cifrado com a tabela.
| Texto simples | ||||||||||||||||||||||||||||
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |||
|
K |
||||||||||||||||||||||||||||
| A | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | ||
| B | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | ||
| C | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | ||
| D | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | ||
| E | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | ||
| F | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | ||
| G | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | ||
| H | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | ||
| I | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | ||
| J | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | ||
| K | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | ||
| L | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | ||
| M | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | ||
| N | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | ||
| O | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | ||
| P | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | ||
| Q | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | ||
| R | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | ||
| S | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | ||
| T | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | ||
| U | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | ||
| V | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | ||
| W | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | ||
| X | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | ||
| Y | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | ||
| Z | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | ||
Se todos os espaços forem mantidos, o texto cifrado será “fmeorcbi mmnripke”. Essa opção pode ser alterada nas configurações.
Consultar a tabela é simples para uma pessoa, embora seja lento. A cifra também pode ser calculada por adição. Soma-se à posição da letra do texto a posição da letra da chave menos 1. No exemplo, “V” é cifrado com “K”: K ocupa a posição 11 e V a posição 22. Assim, (11 − 1) + 22 = 32. Aplicando módulo 26, 32 % 26 = 6, que é a posição de “F”.
A decifragem segue o processo inverso. Na tabela, procura-se a linha da letra “K”, avança-se até encontrar a letra cifrada “F” e sobe-se até o alfabeto do texto simples, onde aparece “V”. Também é possível calcular por subtração: F está na posição 6 e K na posição 11, então 6 − (11 − 1) = −4. Se o resultado for negativo, aplica-se módulo 26: 26 − 4 = 22, a posição de “V”.
A cifra de Vigenère deixou de ser considerada segura desde que o major prussiano Friedrich Kasiski a quebrou em 1863. Mesmo assim, é interessante estudar os diferentes métodos de decifragem. O princípio atinge sua segurança máxima quando a chave tem o mesmo tamanho do texto simples ou é maior, é totalmente aleatória e usada uma única vez. Nesse caso, recebe o nome de one-time pad.
Na maioria dos casos, porém, a chave é menor que o texto. Nessa situação, pode-se usar o método de Kasiski. Charles Babbage também quebrou algumas cifras de Vigenère, mas não deixou registros que expliquem seu procedimento. O método de Kasiski procura sequências repetidas no texto cifrado para estimar o tamanho da chave. Depois de descobri-lo, agrupam-se as subsequências correspondentes para realizar uma análise de frequência nelas. Se o texto for longo o suficiente, torna-se possível decifrá-lo. No século XX, Friedman desenvolveu outro método para cifras polialfabéticas, incluindo Vigenère, conhecido como índice de coincidência que permite determinar se um texto foi cifrado por um método monoalfabético ou polialfabético e estimar o tamanho da chave.
Outro método, mais lento, é a força bruta. Analisar o texto cifrado para estimar o tamanho da chave permite reduzir o espaço de busca. A força bruta testa todas as possibilidades para um determinado tamanho e alfabeto. Se a chave contiver apenas letras minúsculas, a tarefa fica ainda mais simples.
Para dificultar a decifragem, pode-se usar um alfabeto próprio e incluir números ou sinais de pontuação. Uma chave muito longa melhora a segurança; historicamente, trechos inteiros de livros eram usados como chave para mensagens muito importantes. Ainda assim, Vigenère não deve ser usado hoje para proteger informações sensíveis, embora tenha permanecido sem ser quebrado por cerca de três séculos.