This page uses content from Wikipedia and is licensed under CC BY-SA.
|Key sizes||8 to 2048 bits|
|Block sizes||2048 bits|
In cryptography, BassOmatic was the symmetric-key cipher designed by Phil Zimmermann as part of his email encryption software PGP (in the first release, version 1.0). Comments in the source code indicate that he had been designing the cipher since as early as 1988, but it was not publicly released until 1991. After Eli Biham pointed out to him several serious weaknesses in the BassOmatic algorithm over lunch at the 1991 CRYPTO conference, Zimmermann replaced it with IDEA in subsequent versions of PGP.
The name is explained in this comment from the source code: "BassOmatic gets its name from an old Dan Aykroyd Saturday Night Live skit involving a blender and a whole fish. The BassOmatic algorithm does to data what the original BassOmatic did to the fish."
The algorithm operates on blocks of 256 bytes (or 2048 bits). The actual key size can be anywhere from 8 to 2048 bits. The 6 least-significant bits of the key are control bits, used to choose between several possible variations. The number of rounds is 1 to 8, depending on the 3 lowest control bits. Bit 4 selects between two possible key schedules: one using the key to seed a pseudorandom number generator, the other using BassOmatic itself. Making such variations key-dependent means that some keys must be weaker than others; the key space is not flat.
The chosen key schedule produces a total of 8 permutation tables, each a permutation of the numbers 0 to 255. Each round consists of 4 operations: XORing the block with one of the permutation tables, shredding or permuting individual bits throughout the block, an unkeyed diffusion called raking, and a substitution step using the permutation tables as S-boxes. The shredding step can either permute all 8 bit-planes independently, or in groups of 4, depending on control bit 3. The permutation tables stay the same through all rounds of encryption on a given block, but if control bit 5 is set, then the tables are regenerated after each block.