From: orb@cs.utexas.edu (Norman Richards)
Newsgroups: sci.crypt
Subject: more crypt breakers workbench
Date: 18 Dec 1992 02:43:10 -0600
Organization: U Texas Dept of Computer Sciences, Austin TX
Distribution: world
NNTP-Posting-Host: kara-kum.cs.utexas.edu

 Ok, I've been getting a lot of response via e-mail about this program.  I
also got a few helpful hints on using it and since I know there are several
people who are trying to figure it out (just judging by the number of
copies I've mailed out) I'll pass along the combined knowledge.

  First, cbw is used as a tool to decrypt text files that have been encrypted
via the standard unix crypt command.   The program breaks the message down
into 256 byte blocks.  The encryption program itself (to quote the docs) is
effectively encrypted by a single rotor enigma system.  Each block is 
encrypted slightly differently, but once you have successfully decrypted 
several blocks the software is able to find the pattern and decrypt the entire
file.

  So, the basis of the program is to provide a  set of tools for decrypting 
individual blocks and then piece the informations from these blocks together
in order to solve the entire system.

  There are four basic methods of attack, but two are a bit redundant 
and you can easily do your work without them.  The first is the bigram
guessing.  This is a fairly sophisticated attack based on the idea that
the text hopefully will conform to a know set of letter pairings, or bigrams.
You are given two parameters (as well as being able to select a bigram 
statistic file of your own creation) a cut-off level and a minimum 
probability.  The author suggests using several runs with values (1.5,.6)
(1.2,.4) and (1.0.15).  
  I don't find those to be very helpful.  What I will do is run it with
extremely high values like (8,.9).  If your stats file is good, you should
get a decent number of characters deduced.  If the results are reasonable
you can incorporate the whole section into your workspace.  Generally though
this doesn't seem to be a brilliant idea.  I generally look for places where
several characters have been deduced in a row and see (often with the help
of the dictionary lookup facility provided) if I can guess any words.  If 
so I will manually transfer them into the workspace window.  After I have
taken what I consider to be the best information from the guess I will
run the bigram analysis again at the same level, continuing to do so until
I can find no more useful date.  At that point, I reduce the levels slighty
to something like (5,.7) and then (2,.3), etc... until I find that the
levels are so low that it is either producing no new information or erroneous
information.    Somewhere along the lines, I will perhaps try the pword 
attack.
  Basically pword takes a dictionary specified by you and analizes it to see
if any of the words can fit into the cipher.  (again you have a threshold
level of how 'probable' the word is)  If you know the file is a C program,
a mail message or have reason to suspect the the content of the message, it
is fairly easy to construct a small dictionary of possible terms.  I
haven't had lots of luck with this, but sometimes it comes in handy.  The
one thing I do recommend is to keep the files small and concise.  If you
have too many words then unless your text is nearly complete allready you
will have quite a number of erroneous matches.  The other thing that seems 
helpful with this command is when you run it against a dictionary, look at
the possiblities given you in the guess window.  Consider each guess by 
manually entering it in the workspace and looking at the effect on
the text.  Knowing some characters gives you information on what the others
are and by entering them yourself, you can see how the characters affect
the cipher.  The human mind seems to be much better in this case of judging
whether the results on the entire text are reasonable.  If they are, keep
them.  If they just give you garbage elsewhere go back to the next guess.

  The last thing that I find really useful at this stage is that if you 
are trying to decide on manually guessing parts of the text, you can move
to a point in the text and hit ^T.  The computer will show you a list of
all the possible letters that could fit at that point and still provide
consistancy with the rest of the message.  (this is very helpful when you
are trying to narrow down a dictionary lookup that gave more responses than
you can handle)

  There is also a tri-grams analysis and and equivalence class guess, but 
according to the author the other functions are able to encompass the 
information you can gain from these.  Still, you might want to try it.  
Sometimes when I get stumped I will try a couple of these and might get
a character or two that pushes me onto something good.

  This part of the program I have down fairly well and can decipher the
majority of test messages I get.  (once you think you have it down, get
a friend to find a text file of some sort and encrypt it for you)  But,
I have yet to master the creation of 'zee permutation block.'   This is
the information that connects the encryption from several sequential 
blocks and deciphers the whole text so that you don't have to do 
evey single block.  (for a small file its nto too bad, but for a larger
file I would go crazy)  Basically, I have been 100% unseccessful at 
solving any portion of the zee-block and if anyone can provide information
on it - I would be more than grateful.  Basically, you have the ability
to 'knit' blocks together to solve a portion of the zee and then 'propogate'
the zee-block on an unknown block and see the information it decodes.  

  The final comment about the program is that it doesn't come with any
tools for creating the statistics files.  There is a provided file, but it
would seem more effective to create your own based on the type of text you
expect to be decoding.  The stat files are text and it is easy to observe
them to discover the format.  Writing an analysis program would be fairly
trivial but I personally haven't done it and I am sure there are programs
floating around the net that will give you the needed info.  

  Anyways, after messing with the program for a while, thats what I have
come up with.  If anyone has ideas for doing it more efficiently or knows
how to create the zee-blocks I would be delighted to know.  If you are looking
for the program, I got it from sunic.sunet.se.  Or, I can mail you a copy
if you want.  (assuming I am not gone for Christmas by the time the message
gets here :)  
  Enjoy...

______________________________________________________________________________
orb@ccwf.cc.utexas.edu              "Two roads diverged in a wood, and I -
                                     I chose to climb the nearest tree.
                                     And that has made all the difference."