Blowfish (cipher)

Blowfish
General
DesignersBruce Schneier[1]
First published1993[1]
SuccessorsTwofish
Cipher detail
Key sizes32–448 bits
Block sizes64 bits
StructureFeistel network
Rounds16
Best public cryptanalysis
Four rounds of Blowfish are susceptible to a second-order differential attack (Rijmen, 1997);[2] for a class of weak keys, 14 rounds of Blowfish can be distinguished from a pseudorandom permutation (Vaudenay, 1996).

Blowfish is a symmetric-key block cipher, designed in 1993 by Bruce Schneier and included in many cipher suites and encryption products. Blowfish provides a good encryption rate in software, and no effective cryptanalysis of it has been found to date for smaller files. It is recommended Blowfish should not be used to encrypt files larger than 4GB in size, Twofish should be used instead.[3]

Blowfish has a 64-bit block size and therefore it could be vulnerable to Sweet32 birthday attacks.[4]

Schneier designed Blowfish as a general-purpose algorithm, intended as an alternative to the aging DES and free of the problems and constraints associated with other algorithms. At the time Blowfish was released, many other designs were proprietary, encumbered by patents, or were commercial or government secrets. Schneier has stated that "Blowfish is unpatented, and will remain so in all countries. The algorithm is hereby placed in the public domain, and can be freely used by anyone."[5]

Notable features of the design include key-dependent S-boxes and a highly complex key schedule.

  1. ^ a b R. Shirey (August 2007). Internet Security Glossary, Version 2. Network Working Group. doi:10.17487/RFC4949. RFC 4949. Informational.
  2. ^ Vincent Rijmen (1997). "Cryptanalysis and Design of Iterated Block Ciphers" (PostScript). Ph.D. Thesis. Archived from the original on 2013-05-08.
  3. ^ Cite error: The named reference :0 was invoked but never defined (see the help page).
  4. ^ Cite error: The named reference :1 was invoked but never defined (see the help page).
  5. ^ Cite error: The named reference blowfish-paper was invoked but never defined (see the help page).