En cryptographie, Blowfish est un chiffrement par blocs symétrique à clé, fabriqué en 1993 par Bruce Schneier et qui, depuis 1993, a été inclus dans un grand nombre de produits de cryptage. Blowfish a un bon taux de cryptage dans les logiciels et jusqu'en 2008, aucun modèle d'attaque cryptanalytique n'a été trouvé. Cependant, l'algorithme de chiffrement par blocs AES fait désormais l'objet d'une plus grande attention.
Schneier a conçu Blowfish comme un algorithme à usage général, destiné à remplacer l'ancien algorithme DES et à supprimer les problèmes et difficultés des autres algorithmes de cryptage. À l'époque où Blowfish a été lancé, de nombreux autres algorithmes étaient propriétaires ou secrets. Schneier a déclaré que "Blowfish n'est pas breveté et le restera dans tous les pays. L'algorithme est par la présente placé dans le domaine public, et peut être utilisé librement par n'importe qui".
Les principales caractéristiques de la conception comprennent des boîtes S dépendantes des clés et un calendrier des clés très complexe. Blowfish est l'un des chiffrages par blocs les plus rapides utilisés par de nombreuses personnes, sauf lors du changement de clés. Chaque nouvelle clé doit être prétraitée, ce qui prend le même temps que le cryptage d'environ 4 kilo-octets de texte, ce qui est très lent par rapport aux autres codes de chiffrement par blocs. Cela met fin à son utilisation dans certaines applications (comme dans les plus petits systèmes intégrés comme les premières cartes à puce), mais ce n'est pas un problème dans d'autres applications. Dans l'une des applications, c'est en fait une bonne chose : la méthode de hachage de mot de passe utilisée dans OpenBSD utilise un algorithme issu de Blowfish qui utilise l'horaire des touches lentes ; l'idée est que l'effort de calcul supplémentaire requis offre une protection contre les attaques par dictionnaire. Voir renforcement des clés.
Blowfish a une taille de bloc de 64 bits et une longueur de clé variable de 0 à 448 bits. Il s'agit d'un code Feistel à 16 chiffres et utilise de grandes boîtes S dépendantes de la clé. Sa structure est similaire à celle du CAST-128, qui utilise des S-boxes fixes.
En 1996, Serge Vaudenay a découvert une attaque de texte connu nécessitant 28r + 1 plaintexts connus pour être brisés, où r est le nombre de coups. De plus, il a également trouvé une classe de touches faibles qui peuvent être détectées et brisées par la même attaque avec seulement 24r + 1 plausibles connus. Cette attaque ne peut pas être utilisée contre les Blowfish ordinaires ; elle suppose la connaissance des S-box dépendantes des clés. Vincent Rijmen, dans ses articles de doctorat, a introduit une attaque différentielle de second ordre qui peut briser quatre coups et pas plus. Il n'y a toujours pas de moyen connu de briser les 16 coups, à part une recherche par la force brute. Un bogue d'extension de signe dans l'un des codes C publiés a été trouvé en 1996.
La version complète de Blowfish, connue du public jusqu'en 2008, n'a pas fait l'objet d'une bonne cryptanalyse. Cependant, en 2007, Bruce Schneier a noté que, bien que Blowfish soit toujours utilisé, il a recommandé d'utiliser le nouvel algorithme Twofish à la place