[Fwd: Re: [ciphertool-devel] next steps]
Status: Beta
Brought to you by:
wart
|
From: Wart <wa...@ko...> - 2004-04-01 01:41:00
|
I forgot to send this to ciphertool-devel. Sorry! On Tue, 2004-03-30 at 20:43, Alex Griffing wrote: > type > period > plaintext > ciphertext > key > keyword > author > title > language I would like to propose that this is the canonical set of information that defines a cipher. Any additional properties are not allowed to override the values above. For example, if an aristocrat cipher has the "key" and "k1key" properties defined, the "key" property must take precedence when an application creates a particular cipher instance. This will prevent problems if multiple attributes contain redundant information. But this also means that we need to come up with a standard way of describing cipher keys so that they are understandable to different applications. We also need a standard set of names for the different cipher types. The general format for keys that I've been using for substitution ciphers is a pair of strings delimited by quotation marks: cipher1.key="ciphertext" "plaintext" As an example: cipher1.type=aristocrat cipher1.key="abcdefghijklmnopqrstuvwxyz" "b c d " Note that this is only a partial key. It could also have been written as: cipher1.type=aristocrat cipher1.key="amw" "bcd" Transposition ciphers use an alphabetic key, where a=1, b=2, etc.: cipher1.type=columnar cipher1.key=cba Since the key structure can vary between cipher types, we will need to generate a list of key formats for all cipher types. The formats must allow for partial keys, as in the aristocrat example above. As an alternative, we could use multiple key properties to describe more complicated keys: cipher1.type=trisquare cipher1.key.part1=abcdefghiklmnopqrstuvwxyz cipher1.key.part2=abcdefghiklmnopqrstuvwxyz cipher1.key.part3=abcdefghiklmnopqrstuvwxyz Here is a list of the cipher names and key structures currently used by ciphertool. Most of these formats were chosen to match the internal key representations used by ciphertool. Feel free to make suggestions for changes. type=aristocrat # key="ct" "pt" # length of ct and pt strings in the key must be identical key="abcdefghijklmnopqrstuvwxyz" "bcdefghijklmnopqrstuvwxzya" key="abc" "def" type=amsco # key contains letters to indicate the order in which columns are read # a=1, b=2, etc. key="dacb" type=baconian key="abcdefghijklnopqrstuvwxyz" "aabbaabbaabbaabbaabbaabbaa" type=beaufort type=vigenere type=variant type=porta type=gronsfeld # key is a set of ct -> pt substitutions, in order. The # length of the pt/ct pairs must match. # If the period and key are both specified then the period # must match the key length. If only the key is specified # then the period is determined by the length of the key. # If only the period is specified then the key is a # string containing repeats of the letter 'a'. period=6 # In this example, 'a' stands for 'd' in column 1, 'a' # stands for 'e' in column 2, etc. key="denser" "aaaaaa" type=bazeries # The key is the polybius square, read off by rows, and # followed by the numeric decimation numbers. ACA standards # require that the polybius square e derived from the # decimation number. This key format does not impose # such a restriction. key="fortyheusandwvibcgklmpqxz 43275" type=bifid type=bigbifid # The key is a pair of strings containing plaintext letters # and their positions in the keysquare. The positions are # given as 2 digits indicating the row and column where the # letter appears in the key. '0' is used to indicate that # the row/column is not known. For example, "03" indicates # that the letter is in the 3rd column, but the row is not # known. "00" can be used to indicate that neither the row # nor the column is known, or the letter can simply be omitted # from the first string. The position string must be exactly # twice as long as the plaintext string. bigbifid and bigplayfair # keys use a 6x6 keysquare, so valid row and column values range # from 0 to 6. key="abcdefghiklmnopqrstuvwxyz" "24253132113334352241144223134344455121151252535455" key="abc" "012344" type=fmorse type=morbit type=pollux # The key is a pair of strings containing the plaintext # characters and their fractionated morse substitutes. The # fractionated morse substitution string must be exactly # 3 times as long as the plaintext string. The morbit # substitution string must be twice as long. The pollux # substitution string must be the same length as the # plaintext string. key="abcdefghijklmnopqrstuvwxyz" "..x.xx-..-.-.---.x--.-----x-x.-x-..--xx.-.x.....x.-.x.x.x.-xx-.x--x-xxx..x-xx-" key="abc" "..x.xx-.." type=foursquare type=twosquare # The key is a pair of polybius keysquares, read off by # rows. Spaces are used to indicate blank cells in # the keysquares. The first keysquare is the first # plaintext substitute, the second keysquare is the # second plaintext substitute. key="pdfsvibgqwcahoxteknyurlmz" "puzlefdcbaghikmsrqontvwxy" type=grandpre # The key is the 8x8 keysquare, read off by rows. Spaces # are used to indicate blank cells in the keysquare. key=gymkhanaacquaintrewardeddefiniteexposurenovelizeinjuriesambition type=grille # I'm not quite sure what the hell I was thinking with # this one... key=1342342142313321322441441311411243314143342412423421424324211232311243323313223224413411314234214213 type=gromark # The key is the k3mixed alphabet key=aemuicjqzlfnwrbhpysgoxvdkt type=homophonic # The key is a pair of ciphertext / plaintext strings. Use # spaces in the plaintext string to indicate unknowns. key="01 26 51 76" "xmas" key="01 26 51 76" "x s" type=columnar type=myszcowski type=nitrans # The key is the order in which the columns are read out # from the tableau. These types use letters instead of # numbers for the key values in order to support # periods > 9. For the myszcowski, duplicate letters # may be used. If a letter is duplicated then the next # letter in the sequence is skipped. key=cdab key=aacceeeh type=nicodemus # The nicodemus key is a pair of strings representing # the vigenere/variant/beaufort encoding key and the # order in which the keys are read off. key="bumblebee aihbgdcef" type=phillips type=playfair type=bigplayfair # The key is the polybius keysquare, read off by rows. # Spaces are used to denote empty cells in the keysquare # The key must be exactly 25 letters long, except for # the bigplayfair key which must be 36 characters long. key=maeksoyflvrbgnwtchpxudiqz type=ragbaby # The key is the 24 letter keyed alphabet key=sailorbcdefghkmnpqtuvwyz type=route # The key is a pair of numbers indicating which route was # used to read/write the plaintext. See # http://ciphertool.sourceforge.net/cipher/route.html # for a list of the 48 defined routes. key=23 11 type=swagman # Please don't make me try to explain this one... I # get confused every time I look at it. key=2415345321312455341212534 type=trifid # The key is the 27 character keyed alphabet. key=quickstep#abdfghjlmnorvwxyz --Wart |