* We have a medium-sized security hole: some words of plaintext will be exactly as long as crypt()'s maximum input size. For these words, the concatenated crypt hashes will contain a long stretch that is exactly the same for each packet in the group. Hmmm. Switch to MD5? * It occurs to me that since our serial numbers are really being used to improve encryption security, not to determine packet order, then we don't actually need the serial numbers to be in order. We could, in fact, generate *random* serial numbers and everything would still work. Gulp. * Natural Language A.I. Perhaps we can create a large, custom dictionary with *two* fields: first, the word itself, and second, the part of speech {noun|verb|adjective|pronoun|preposition}. When creating fake words, chaff.pl can do a lookup of the "real" word and choose random words that are the same part of speech, i.e. real word "big" ---> chaffwords might be "small", "smelly", "foolish". real word "house" --> chaffwords might be "mouse", "computer", "fish". Categorizing every word in the dictionary is a ridiculous task. Perhaps such a database already exists?