Nella crittografia, Blowfish è un cifrario a blocchi simmetrico a chiave, realizzato nel 1993 da Bruce Schneier e dal 1993 è stato incluso (messo insieme) in un gran numero di prodotti di crittografia. Blowfish ha un buon tasso di crittografia nel software e fino al 2008 non è stato trovato alcun modello di attacco criptanalitico di esso. Tuttavia, l'algoritmo di cifratura a blocchi AES ha ora una maggiore attenzione.
Schneier ha realizzato Blowfish come algoritmo generico, da utilizzare in sostituzione del vecchio algoritmo DES e per eliminare i problemi e le difficoltà di altri algoritmi di cifratura. Al momento del rilascio di Blowfish, molti altri algoritmi erano proprietari o segreti. Schneier ha detto che "Blowfish non è brevettato, e lo rimarrà in tutti i paesi. L'algoritmo è reso di pubblico dominio e può essere liberamente utilizzato da chiunque".
Le caratteristiche principali del design includono le S-box dipendenti dalla chiave e un programma di chiavi molto complesso. Blowfish è uno dei cifrari a blocco più veloci utilizzati da molte persone, tranne quando si cambia chiave. Ogni nuova chiave deve essere pre-processata, il che richiede lo stesso tempo della cifratura di circa 4 kilobyte di testo, che è molto lenta rispetto agli altri cifrari a blocchi. Questo ne blocca l'uso in alcune applicazioni (come nei più piccoli sistemi embedded come le prime smartcard), ma non è un problema in altre applicazioni. In una delle applicazioni, in realtà, è buona: il metodo di password-hashing utilizzato in OpenBSD utilizza un algoritmo che deriva da Blowfish che fa uso del programma a chiave lenta; l'idea è che lo sforzo computazionale extra richiesto fornisce protezione contro gli attacchi dei dizionari. Vedere il rafforzamento delle chiavi.
Blowfish ha una dimensione di blocco di 64 bit e una lunghezza variabile della chiave da 0 a 448 bit È un cifrario Feistel a 16 giri e utilizza grandi S-box dipendenti dalla chiave. La sua struttura è simile a quella di CAST-128, che utilizza S-box fisse.
Nel 1996, Serge Vaudenay ha trovato un attacco di plaintext noto che ha bisogno di 28r + 1 plaintexts noto per rompere, dove r è il numero di colpi. Inoltre, ha anche trovato una classe di chiavi deboli che possono essere rilevate e rotte dallo stesso attacco con solo 24r + 1 plaintexts conosciuto. Questo attacco non può essere usato contro i normali Blowfish; presuppone la conoscenza delle S-box dipendenti dalla chiave. Vincent Rijmen, nei suoi documenti di dottorato, ha introdotto un attacco differenziale di secondo ordine che può rompere quattro colpi e non di più. Ancora non c'è un modo conosciuto per rompere tutti i 16 colpi, a parte una ricerca di forza bruta. Un bug di estensione del segno in uno dei codici C pubblicati è stato trovato nel 1996.
Non esiste una buona crittoanalisi sulla versione completa del Blowfish conosciuta pubblicamente fino al 2008. Tuttavia, nel 2007, Bruce Schneier ha notato che, mentre il Blowfish è ancora in uso, ha raccomandato di utilizzare il nuovo algoritmo Twofish