En cryptographie, Twofish est un chiffrement par blocs de clés symétriques avec une taille de bloc de 128 bits et des longueurs de clés allant jusqu'à 256 bits.
En 1997, le NIST a annoncé un concours pour choisir un successeur au DES qui serait connu sous le nom d'AES. Twofish était l'un des cinq finalistes du concours pour la norme de cryptage avancée, mais n'a pas été sélectionné comme norme.
Twofish est apparenté à l'ancien bloc de chiffrement Blowfish. Les principales caractéristiques de Twofish sont l'utilisation de boîtes S pré-calculées dépendantes des clés, et un calendrier de clés relativement complexe. La moitié d'une clé n-bit est utilisée comme clé de cryptage proprement dite et l'autre moitié de la clé n-bit est utilisée pour modifier l'algorithme de cryptage (S-boxes dépendant de la clé). Twofish utilise certains éléments d'autres conceptions, par exemple la pseudo-transformation de Hadamard (PHT) de la famille de chiffres SAFER. Twofish utilise la même structure Feistel que le DES.
Sur la plupart des plateformes logicielles, Twofish est légèrement plus lent que Rijndael (l'algorithme choisi pour la norme de cryptage avancée) pour les clés de 128 bits, mais un peu plus rapide pour les clés de 256 bits.
Twofish a été conçu par Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall et Niels Ferguson ; l'"équipe élargie de Twofish" qui s'est réunie pour effectuer une cryptanalyse plus poussée de Twofish et d'autres concurrents de l'AES comprenait Stefan Lucks, Tadayoshi Kohno et Mike Stay.
L'algorithme Twofish est libre d'utilisation pour tous, sans aucune restriction. Le chiffrement de Twofish n'a pas été breveté et l'exemple logiciel de sa spécification a été placé dans le domaine public. Toutefois, Twofish n'est pas largement utilisé comme le Blowfish, qui est disponible depuis plus longtemps.