
The control file has a simple encryption demo using several Java packages:
which may be useful, for instance, in a study of the Solitaire encryption algorithm (SEA).

The code in the StreamCipher class shows the mechanics of the SEA, which turns a deck of cards into a random-number generator.
The security depends on the key, the ordering of the 54 cards (52 + 2 jokers). There are 54! permutations -- about 2x10^71 or 2^236 -- so a theoretical 236-bit key. And there are about 2 ways to pick a key. One, start with a used deck, then shuffle it at least 10 times. (The PlayingCards package lets the user choose a random-ordering seed and a number of shuffles.)
Or start with a standard order (e.g, by rank or by the order listed in a "bridge" column in the newspaper), then go through a single "dry run" of the SEA but do each "count cut" twice, with the second time according to a passphrase, essentially shuffling the deck in a repeatable way.
A bridge column gives about 95 bits of randomness, and each letter in the passphrase adds about 1.4 bits, so pick a passphrase of about 100 characters to use much of the 236-bit keyspace. (The PlayingCards package lets the user specify an order, but the SEA demo doesn't use passphrases yet. Still, the user can shuffle the specified deck in a repeatable way by choosing a random-ordering seed and a number of shuffles.)
So, maybe the PlayingCards package will be useful for picking SEA keys -- especially if it were adapted to a handheld KVM. Of course, it still remains to determine the goodness of the SEA: how much of the theoretical 236-bit keyspace it actually uses in practice.

Cryptome -- free Handbook -- Java and OOP
Another free-source project should become useful for building simulation tools.
Last modified: 4/19/2001
|