THE 1990S

Blowfish

In 1993, as the Data Encryption Standard was showing its first signs of weakness with its 56-bit key becoming vulnerable to brute-force attacks, Bruce Schneier introduced Blowfish to the world—a symmetric encryption algorithm that would revolutionize the approach to computer security.

He had not chosen this path by chance. Proprietary solutions dominated the market, often accompanied by restrictive patents and prohibitive costs. The idea of a free, no-cost, and high-performance algorithm was taking shape in the mind of this American cryptographer who wanted to democratize access to strong encryption. Blowfish was born from this vision: to offer a credible alternative to established standards, free from legal or financial constraints.

The technical specifications of Blowfish broke with the practices of the time. Unlike DES with its fixed key, this new algorithm accepted variable-length keys, ranging from 32 to 448 bits. This flexibility addressed the diverse needs of users, whether individuals seeking basic protection or governments requiring maximum security. The heart of the algorithm relied on a 16-round Feistel network, a proven architecture enhanced by a remarkable innovation: key-dependent S-boxes.

These substitution boxes constituted Blowfish’s signature. Rather than using fixed tables like its predecessors, the algorithm generated its own S-boxes from the provided key. Initialization began with the decimals of π, ensuring the absence of secret backdoors, then modified them through a complex process involving the key used. This approach made each implementation unique while preserving the desired cryptographic properties.

The official presentation took place in 1994 at the Fast Software Encryption workshop in Cambridge. The reception was mixed: while the technical innovation impressed, the cryptographic community remained cautious about this newcomer. The first security tests followed one another. Serge Vaudenay identified classes of weak keys in versions reduced to fewer than 14 rounds, but these vulnerabilities did not affect the standard version. Vincent Rijmen developed a second-order differential attack against a 4-round variant, a brilliant technical demonstration that did not in any way challenge the robustness of the complete algorithm.

The commercial adoption of Blowfish exceeded its creator’s expectations. Citi-Software Ltd’s Access Manager integrated it into its password manager, leveraging its execution speed to secure sensitive data. The AEdit word processor made it its document encryption engine, while Markus Hahn’s Blowfish Advanced CS used it for secure file deletion. This proliferation of implementations testified to the confidence the industry placed in this free algorithm.

Performance was one of Blowfish’s major assets. On 32-bit processors, it required only 18 clock cycles per encrypted byte, a remarkable performance compared to DES’s 45 cycles or IDEA’s 50 cycles. This efficiency came from the judicious choice of simple operations: XOR, addition on 32-bit words, access to pre-calculated tables. The subkey arrays fit in the cache of processors like the 80486 or 68040, thus optimizing memory accesses.

However, this execution speed came with a downside: initialization. Subkey generation required the equivalent of 521 encryption iterations, a long process that penalized applications requiring frequent key changes. This characteristic naturally directed Blowfish toward uses where the key remained stable: file encryption, established secure communications, data storage.

The theoretical security of Blowfish impressed with its mathematical solidity. Schneier had calculated that a 197-bit key would resist even if all the energy produced by the Sun were converted into computational operations. These projections, though hypothetical, illustrated the considerable security margin offered by the algorithm. A 128-bit key required billions of powerful computers for millions of years to be broken by brute force.

The key-dependent S-boxes reinforced this security by complicating differential cryptanalysis. Each key generated its own substitution tables, making it difficult to establish exploitable patterns. The Feistel network ensured optimal diffusion: after a few rounds, each output bit depended on all input bits, a central property for resisting statistical attacks.

Despite its undeniable qualities, Blowfish revealed certain limitations over time. Its 64-bit block size, standard in the 1990s, seemed insufficient given the growing security requirements that now favored 128-bit blocks. The algorithm’s memory footprint, with its multiple tables, posed problems on resource-constrained embedded systems such as smart cards.

These constraints did not prevent Blowfish from establishing itself durably. Thirty years after its creation, the algorithm still powers numerous systems, testament to its solid and balanced design. Its successor Twofish, a finalist in the 1998 AES competition, adopted several of its innovations while correcting the identified limitations. But Blowfish retained its followers, attracted by its ease of integration and proven performance.

Blowfish’s impact went far beyond the technical realm. It demonstrated that a free cryptographic algorithm could rival the most sophisticated commercial solutions. This success inspired developers and researchers, contributing to the rise of the free cryptography movement. OpenSSL and other projects like GnuPG relied on this demonstration to legitimize their collaborative approach.

The public analysis that Blowfish received also validated Kerckhoffs’s principle, according to which the security of a cryptographic system must rely only on the secrecy of the key, not on that of the algorithm. This transparency, far from weakening security, strengthened it by subjecting the algorithm to the critical scrutiny of the international scientific community.

Blowfish remains an essential pedagogical reference for understanding the mechanisms of modern symmetric cryptography. Its history illustrates the transition from hardware encryption to software encryption, the democratization of cryptographic tools, and the growing importance of performance on consumer architectures. This successful synthesis between theoretical security and practical efficiency made it a model for many subsequent algorithms.