Na criptografia, o Twofish é um algoritmo de criptografia desenvolvido por Bruce Schneir. É uma cifra de bloco de chave simétrica, o que significa que uma única chave é usada para criptografar e descriptografar. Twofish tem um tamanho de bloco de 128 bits e tamanhos de chave de até 256 bits.
Twofish está relacionado à cifra de bloco anterior Blowfish, que é uma cifra de relógio de 64 bits que usa um comprimento de chave variando entre 32 e 448 bits, também desenvolvida por Bruce Schneir. Twofish também está relacionado ao Advanced Encryption Standard (AES), uma cifra de bloco de 128 bits que o governo dos Estados Unidos adotou como especificação para a criptografia de dados eletrônicos pelo Instituto Nacional de Padrões e Tecnologia dos EUA em 2001. Enquanto Twofish era um dos finalistas para se tornar o padrão da indústria para criptografia, foi derrotado pelo AES por causa da velocidade mais lenta do Twofish.
Recursos do Twofish
Twofish tem características distintas que o diferenciam de outros protocolos criptográficos, incluindo o uso de uma caixa S (caixa de substituição) dependente de chave pré-computada, que é um componente básico de qualquer algoritmo de chave simétrica que realiza substituição. O S-box funciona para mascarar a relação entre a chave e o texto cifrado. Por causa da pré-computação, Twofish é vulnerável a ataques de canal lateral.
O algoritmo de criptografia emprega uma matriz de distância máxima separável, ou uma matriz que representa uma função com certas propriedades de difusão que têm aplicações úteis em criptografia. O Twofish tem uma estrutura Fiestel, que é uma estrutura simétrica utilizada na construção de cifras de blocos. Essa mesma estrutura também é usada no Data Encryption Standard (DES), um padrão de criptografia influente que era popular na década de 1970.
Twofish não foi patenteado e a implementação de referência foi colocada em domínio público, o que significa que o algoritmo é gratuito para qualquer pessoa usar sem restrições. Twofish é menos difundido do que Blowfish.