[117677] in Cypherpunks

home help back first fref pref prev next nref lref last post

pike

daemon@ATHENA.MIT.EDU (Anonymous)
Wed Sep 8 20:05:32 1999

Date: Thu, 9 Sep 1999 01:48:42 +0200 (CEST)
Message-Id: <199909082348.BAA08342@mail.replay.com>
From: Anonymous <nobody@replay.com>
To: cypherpunks@algebra.com
Reply-To: Anonymous <nobody@replay.com>


Fish
     Fish is an additive generator based on techniques used in the
shrinking generator [190]. It produces a stream of 32-bit words which can
be XORed with a plaintext stream to produce ciphertext, or XORed with a
ciphertext stream to produce plaintext. The algorithm is named as it is
because it is a Fibonacci shrinking generator.  
     First, use these two additive generators. The key is the initial
values of these generators. 

                                      Ai = (Ai-55 + Xi-24) mod 232 
                                      Bi = (Bi-55 + Bi-19) mod 232
    
    These sequences are shrunk, as a pair, depending on the least
significant bit of Bi: if it is 1, use the pair; if it is 0, ignore the
pair. Cj is the sequence of used words from Ai, and Dj is the sequence of
used words from Bi. These words are used in pairs - C2j,  C2j+1, D2j, and
D2j+1 - to generate two 32-bit output words: K2j and K2j+1.  

                                       E2j = C2j 0 (D2j ^ D2j+1) 
                                       F2j=D2j+1^(E2j^C2j+1)
                                       K2j = E2j  0  F2j
                                       K2i+1=C2i+1 0  F2j
    
    This algorithm is fast. On a 33 megahertz 486, a C implementation of
Fish encrypts data at 15 megabits per second. Unfortunately, it is also
insecure; an attack has a work factor of about 240 [45].
    
Pike
      Pike is a leaner, meaner version of Fish, brought to you by Ross
Anderson, the man who broke Fish [45]. It uses three additive generators.
For example:  

                                        Ai = (Ai-55 + Ai-24) mod 232
                                        Bi = (Bi-57 + Bi-7) mod 232
                                        Ci = (Ci-58 + Ci -19) mod 232
    
     To generate the keystream word, look at the addition carry bits. If
all three agree (all are 0 or all are 1), then clock all three generators.
If they do not, just clock the two generators that agree. Save the carry
bits for next time. The final output is the XOR of the three generators.  
     Pike is faster than Fish, since on the average 2.75 steps will be
required per output rather than 3. It is far too new to trust, but looks
good so far.  









  





home help back first fref pref prev next nref lref last post