Cryptography-Digest Digest #788, Volume #8       Tue, 22 Dec 98 18:13:03 EST

Contents:
  WEAK2-EX -- A Poorman's 56-bit Data Encryption Algorithm (Mok-Kong Shen)
  Re: On living with the 56-bit key length restriction (wtshaw)
  Re: Code hidden in a piece of music (Jim Dunnett)

----------------------------------------------------------------------------

From: Mok-Kong Shen <[EMAIL PROTECTED]>
Subject: WEAK2-EX -- A Poorman's 56-bit Data Encryption Algorithm
Date: Tue, 22 Dec 1998 18:14:24 +0100

In order to cope with the 56-bit key length restriction, I have
recently released a 56-bit data encryption algorithm, WEAK3-EX, based
on prior work on my WEAK series of software which has as its original
basic design paradigm 'security through variability', including, in
particular, variable (unlimited) key length which unfortunately
conflicts with the current restriction. WEAK3-EX, by design, works only
with fixed key length of 56 bits. In order to somehow compensate for
the high reduction in strength due to the key length limitation I have
made use of a new, paradox sounding, paradigm, namely 'security through
inefficiency'. On the assumption that brute force is the only viable
attack, which could be easily ensured in my type of algorithms through
using a sufficiently high number of rounds (this being a user chosen
configuration variable), it is easy to show that by suitably setting a
scaling factor for the initialization time of the algorithm (see my
paper on WEAK3-EX for the mechanism connected with the scaling factor)
the average time required for brute forcing by the analyst can attain
any practically infeasible bounds.

There is, however, unfortunately one fairly unfavourable aspect of
WEAK3-EX: Its programming is a non-trivial task (mainly because of the
part implementing my compound PRNG) and hence the algorithm is very
unlikely to meet the requirements of a poorman's environment, namely
when (despite the fact that export of 56-bit hardware/software to his
(crypto-)technically underdeveloped country is legal) for one reason
or another no encryption hardware/software is available for use and he
has to quickly write an encryption program himself for confidential
communication with his partners. WEAK2-EX, a 56-bit stream encoding
scheme with fairly simple programming logic and small code volume, has
therefore been specifically developed to satisfy this need.

Globally speaking, WEAK2-EX is WEAK3-EX minus all its block encoding
features and minus my compound PRNG. What remains is in fact not very
much and consists basically of a standard PRNG (comprising of two
internal PRNGs each accepting a 28-bit seed) that is used to deliver
pseudo-random bit sequences to perform additon mod 2^32 operations
(we use this instead of the more common XOR) on groups of 20 input
words in a (user-selectable variable) number of rounds.

The same mechanism of scaling factor as used in WEAK3-EX is applicable
in WEAK2-EX. However, since there is no longer my compound PRNG, the
scaling factor now affects the record processing time instead of the
initialization time of the algorithm. This means that, while with
WEAK3-EX the user can pay once the price of the high initialization
time without slowing down the proper processing of the records, the
scaling factor in WEAK2-EX actually slows down the processing of these,
so that its function is less favorable if there are a large number of
records to be processed. Fortunately, however, it could be assumed that
precisely in a poorman's environment it is unlikely that messages are
voluminous and that furthermore longer processing time can usually be
tolerated in view of the likely prevailing exceptional severity of
one's needs in matters of communication.

Another scaling factor of processing time that one can employ in
WEAK2-EX is the number of rounds. (In WEAK2-EX stream encoding is
repeatedly applied to groups of twenty 32-bit words as many times as the
user specifies, up to an implementation defined limit). This feature is
of course also available in WEAK3-EX but plays there only a minor role
since it is less efficient (in time) compared to the scaling factor for
initialization time. The number of rounds is directly proportional to
the record processing time and hence can be used to influence the
encryption process in our present case just as well as using the
aforementioned scaling factor. In other words, the user of WEAK2-EX
can judiciously choose an arbitrary combination of the two said
scaling factors to achieve his goal of defeating brute forcing attempts
of the analyst.

An implementation in Fortran 90 is attached below. A binary executable
file for PC can be downloaded via my main Web page.

I wish to thank TPS for suggesting this work and examining the program
code.

Construtive critiques, comments and suggestions for improvements are
sincerely solicited.

M. K. Shen

=========================================================

c This is a special version of WEAK2, an implementation of stream
c encoding using addition modulo 2^32 (instead of XOR). It is for use
c with 56-bit keys.
c
c WEAK2-EX is parallel to WEAK3-EX but is much more simple in
c programming. While WEAK3-EX has a user-choosable scaling factor of
c initialization time of the algorithm for defeating brute force
c analysis (arbitrarily selectable number of rounds serves to enable
c ensuring that brute force is the only viable means of attack),
c WEAK2-EX achieves the same goal through two user-choosable scaling
c factors of processing time (in place of initialization time). Thus
c WEAK2-EX is less efficient when compared to WEAK3-EX but has the
c adavantage of being readily implementable in a poorman's environment.
c
c In WEAK2-EX the multiple-seed standard PRNG employed in the original
c version WEAK2 is replaced by two different (single-seed) PRNGs which
c are activated alternatingly and which each accepts a seed of 28 bits,
c totalling 56 bits. One of the PRNG we choose is that of Park and
c Miller (original single-seed version), while the other is designed
c by L'Ecuyer (Comm. ACM 31 (1988), P.742-749,774). There is nothing
c very special about our choice. The user who has personal preference
c for other PRNGs can substitute these with his favourite (single-seed)
c PRNGs.
c
c In WEAK2-EX one scaling factor of processing time is the same as the
c scaling factor for initialization time of WEAK3-EX, being namely the
c number of pseudo-random numbers retrieved from the shuffling buffer
c (of Bays and Duncan) that are combined into one pseudo-random number
c through the addition mod 1 operation (device of Wichmann and Hill).
c The other scaling factor of processing time is simply the number of
c rounds. In the original WEAK2 a maximum of 20 rounds was provided.
c In WEAK2-EX the number of rounds can be as high as 5000. Using more
c rounds than is required to defeat other analysis methods (than brute
c force) serves to increase the average processing time of the analyst
c (which is equal to 2^55 times the processing time of the user for the
c same hardware). A judicious choice of these scaling factors may need
c some thought as well as a few trial runs on the hardware used (in
c order not to incur overly long total processing time of the user).
c
c Notes:
c
c   1. This scheme has been designed in response to a reader's comment
c      to WEAK1, pointing out the desirability of much shorter time of
c      implementation than 2 days under certain unfavourable
c      circumstances. It is a simplification of WEAK1 and should be
c      independently implementable from scratch in 2 to 5 hours with
c      average programming experience.
c
c   2. Pseudo-random generation in WEAK2-EX is the same as that of
c      the standard PRNG in WEAK3-EX. See
c      http://www.stud.uni-muenchen.de/~mok-kong.shen/#paper13
c
c   3. The implementation is scalable. The arbitrarily chosen maximum
c      value settings (Fortran parameter statements) may be trivially
c      changed, if needed. Also the file record length may be changed
c      if a couple of Fortran format statements are correspondingly
c      modified. The parameter statements for mgnseed and mnseed,
c      however, cannot be modified.
c
c   4. This is a pure stream encoding scheme. The user is reminded of
c      the critical importance of good key management. The variability
c      of the ensemble of seeds provided by the standard PRNG can be
c      advantageously exploited.
c
c   5. For the buffer length etc. the brackets in input prompts
c      indicate the valid ranges. The user should choose values
c      suitable for his applications. It is advisable not to always use
c      the same set of such input values but to vary the configuration
c      of the system over time. For processing time scaling factors
c      see comments at the beginning.
c
c   6. The implementation is for 32 bit processors. A check should be
c      be made in case communication partners use 32 bit processors
c      of different architechture.
c
c   7. The user is strongly advised (not to blindly trust the integrity
c      of codes written by third persons and therefore) to read and
c      critically examine our code before using it.
c
c Revision notes:
c
c   1. 16th July 1998: User input (not file content) is checked. Use of
c      the device of Wichmann and Hill is now optional.
c
c   2. WEAK1 has been updated to include the technique first introduced
c      in WEAK2. WEAK3 has been released.
c
c   3. Trivial modififications are done on 3rd August 1998.
c
c   4. Trivial modifications on 25th September 1998.
c
c   5. Weak2-Ex is created from WEAK2 for input of 56-bit keys on
c      22nd December 1998.
c
c Program written (copyright) by M. K. Shen on 6th July 1998.
c Last updated on 22nd December 1998.
c Tested on PC with INTEL Pentium II using the NAG FTN90 compiler.
c
c
c This program may be freely copied (but only in its entirety), 
c distributed and used for any civil (i.e. personal, academic or
c commercial) purposes conforming to the law, subject to the single 
c condition that in no case the author is to be held responsible for 
c any eventual damages in connection with its use. Any other usage is 
c herewith explicitly disallowed.
c
c
c Critiques, comments and suggestions for improvements are sincerely
c solicited. Author's addresses:
c Postal:  M. K. Shen, Postfach 340238, D-80099 Muenchen, Germany
c e-mail:  [EMAIL PROTECTED]  (valid in 1998)
c
c
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c
       program weak2ex
c
       implicit integer(a-z)
c
       parameter(maxint=2147483647)
c
c Number of words, number of bytes and number of hexadecimal digits
c in a record (of file type 1)
       parameter(nword=20,nbyte=nword*4,nhex=nword*8)
c
c Maximum number of rounds; dimension of array randb
c randbdim must be divisible by 3.
c Actual number of rounds is nround.
       parameter(mnround=5000,randbdim=900)
c
c mgnseed is equal to mnseed. See inituprng in the set of subprograms
c implementing the PRNG.
       parameter(mgnseed=2)
c
c
       common /crnwd/rnword(mnround,nword)
       common /rbblk/randb(randbdim),rbi
       common /com/nround
       integer gseeds(mgnseed)
c
       integer aa(nbyte),bb(nword)
       character *12 filein,fileout
       character *(nbyte) rec
       character *(nhex) rec1
       character *14 key
       character kc
       real t0,t1
c
c Bit mask
       maskr=2**16-1
c
c
       print *,
     1   "WEAK2-EX --- A Poorman's 56-bit Data Encryption Algorithm "
       print *,'Version   : 22nd December 1998'
       print *,'Copyright : Mok-Kong Shen, Munich, Germany'
       print *,' '
c
       print *,'give mode (1 = encryption, 2 = decryption)'
       read *,mode
       call rgcheck('mode ',mode,1,2)
c
c Plaintext file has
c    type 1 if 80 ASCII characters per record
c    type 2 if 80 hexadecimal digits ([0,9],[A,F]) per record and
c           there are even number of records
c Ciphertext file always has type 2
c Thus information in one record of file type 1 corresponds to two
c records of file type 2. It is an error if the record number of file
c type 2 is odd.
c Note that, if the input file is not generated by a program but, as
c is normally the case, prepared with a text editor, then the last
c line must be terminated by pressing the return key (but nothing else
c following that, including further pressing of the return key).
c Otherwise, the procesing will be in error.
c Note that file type 1 is restricted generally to contain printable
c characters only (because of possible difficulties caused by some
c non-printable byte values) while file type 2 can contain any binary
c information.
c Thus both types of files can, for example, be directly transported
c via e-mail without requiring additional transformations.
c The file type of plaintext file in encryption and decryption
c should be the same.
c Validity of content of input file is not checked.
c
       print *,'give input file name'
       read *,filein
       if (mode .eq. 1) then
         print *,'give input file type [1, 2] ',
     1           '(1 = ASCII, 2 = hexadecimals)'
         read *,ftype
         call rgcheck('ftype ',ftype,1,2)
       end if
       print *,'give output file name'
       read *,fileout
       if (mode .eq. 2) then
         print *,'give output file type [1, 2] ',
     1           '(1 = ASCII, 2 = hexadecimals)'
         read *,ftype
         call rgcheck('ftype ',ftype,1,2)
       end if
c Range check of gnseed, gseeds, gbufflen, gwichs is
c taken care of by the subprogram inituprng
       print *,'give 56-bit key in 14 hexadecimal digigts',
     1         ' (0-9 or A-F in upper case)'
       read *,key
       do i=1,14
         kc=key(i:i)
         if (.not. ((lge(kc,'0') .and. lle(kc,'9')) .or.
     1              (lge(kc,'A') .and. lle(kc,'F')))) then
           print *,'Error : key digit ',kc,
     1             ' is out of ranges [0-9] and [A-F]'
           stop
         end if
       end do
       read(key,260) gseeds(1),gseeds(2)
       gnseed=2
       print *,'give buffer length of standard PRNG [1, 2000]'
       read *,gbufflen
       print *,'give first processing time scaling factor ',
     1         '[2, 2147483646]'
       print *,'(this determines the number of times to perform ',
     1         'addition mod 1'
       print *,' operations in the standard PRNG. larger value leads ',
     1         'to correspondingly'
       print *,' longer processing time)'
c gwichs determines the number of times to perform addition mod 1
c operations (device of Wichmann and Hill).
       read *,gwichs
       print *,'give number of rounds [1, 5000]'
       print *,'(this can serve also as the second processing time ',
     1         'scaling factor'
       print *,' larger value leads to correspondingly longer ',
     1         'processing time)'
       read *,nround
       call rgcheck('nround ',nround,1,mnround)
c
c subprogram clock@ is specific to NAG FTN 90 compiler
c substitution with another name may be needed for other compilers
       call clock@(t0)
c
c
c Initialization of PRNG
       call initsprng(gseeds,mgnseed,gnseed,gbufflen,gwichs)
c Open files
       open(10,file=filein)
       open(20,file=fileout)
c Initialize index to array randb for call of cmprnword
       rbi=randbdim
c Number of records processed
       recn=0
c
 210   format(a)
 220   format(80z2.2)
 230   format(20z8.8)
 260   format(2z7.7)
c
c
       goto (300,400) mode
c
c
c Encryption
c
c
 300   do
c Input 1 or 2 plain text record depending on ftype
         if (ftype .eq. 1) then
c Read 1 record of ASCII characters
           read(10,210,err=810,end=310) rec
           recn=recn+1
c Convert to integers
           do i=1,nbyte
             aa(i)=iachar(rec(i:i))
           end do
c Convert to hexadecimal digits
           write(rec1,220) aa
         else
c Read 2 records of hexadecimal digits
           read(10,210,err=810,end=310) rec1(1:nbyte)
           read(10,210,err=810,end=820) rec1(nbyte+1:nhex)
           recn=recn+2
         end if
c
c Convert to binary words
         read(rec1,230) bb
c
c Compute words of pseudo-random bits in array rnword for use in
c the rounds
         call cmprnword
c
c Execute the rounds
         do nr=1,nround
           do i=1,nword
c Perform addition modulo 2^32 with a word of random bits
             bb(i)=bb(i)+rnword(nr,i)
           end do
         end do
c
C Convert to hexadecimal digits in rec1
           write(rec1,230) bb
c
c Write out 2 cipher text records in hexadecimal format from rec1
         write(20,210) rec1(1:nbyte)
         write(20,210) rec1(nbyte+1:nhex)
       end do
c
 310   if (ftype .eq. 1) then
         recn1=recn*2
       else
         recn1=recn
       end if
       print *,recn,' records processed and ',recn1,' records ',
     1         'written to ',fileout
       goto 900
c
c
c Decryption
c
 400   do
c
c Input 2 cipher text records in hexadecimal format into rec1 
         read(10,210,err=810,end=410) rec1(1:nbyte)
         read(10,210,err=810,end=820) rec1(nbyte+1:nhex)
         recn=recn+2
c
c Convert to binary word
           read(rec1,230) bb
c
c Compute words of pseudo-random bits in array rnword for use in
c the rounds
         call cmprnword
c
c Execute the rounds from higher numbered ones downwards (reverse of
c that for encryption)
         do nr=nround,1,-1
           do i=1,nword
c Perform subtraction modulo 2^32 with a word of random bits
             bb(i)=bb(i)-rnword(nr,i)
           end do
         end do
c Write the hexadecimal digits to rec1
           write(rec1,230) bb
c
c Write out 1 or 2 plain text record depending on ftype
         if (ftype .eq. 1) then
C Convert to integers
           read(rec1,220) aa
C Convert to ASCII characters
           do i=1,nbyte
             rec(i:i)=achar(aa(i))
           end do
C Write out 1 record of ASCII characters
           write(20,210) rec
         else
c Write out 2 records of hexadecimal digits
           write(20,210) rec1(1:nbyte)
           write(20,210) rec1(nbyte+1:nhex)
         end if
       end do
c
 410   if (ftype .eq. 1) then
         recn1=recn/2
       else
         recn1=recn
       end if
       print *,recn,' records processed and ',recn1,' records ',
     1        'written to ',fileout
       goto 900
c
c
 810   print *,'error in reading ',filein
       goto 900
 820   print *,'error: ',filein,' does not have even number of records'
c
c
 900   call clock@(t1)
       print *,'processing time = ',t1-t0,' sec'
       end
c
c
cccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccc
c
c This is adapted from WEAK3-EX with uprng replaced by sprng and
c change of parameters.
c
c Filling the array randb with pseudo-random bits for use by cmprnword.
c
       subroutine randblock
       implicit integer(a-z)
       parameter(mnround=5000,randbdim=900)
       parameter(cc=2**24,ms3=255,ms2=ms3*256,ms1=ms2*256)
       common /rbblk/randb(randbdim),rbi
       real sprng
       k=0
c randbdim is divisible by 3
       do i=1,randbdim/3
c Obtain 24 bits from each call to uprng. 4 calls are needed to
c get 3 words of 32 bits.
c There are 24 bits in the mantissa part of a real number of 32 bit
c processors. Hence it is not sensible to obtain more than 24 bits
c from a pseudo-random number delivered by sprng.
         h1=sprng()*cc
         h2=sprng()*cc
         h3=sprng()*cc
         h4=sprng()*cc
         randb(k+1)=ior(ishft(h1,8),ishft(h2,-16))
         randb(k+2)=ior(ishft(h2,16),ishft(h3,-8))
         randb(k+3)=ior(ishft(h3,24),h4)
         k=k+3
       end do
       end
cccccccccccccccccccccccccccccc
c
c This is adapted from WEAK3-EX with change of parameters.
c
c Generation of words of pseudo-random bits for performing addition
c modulo 2^32 in the rounds.
c The global varialbe rbi is to be initialized to randbdim before
c first call of this subroutine.
c
       subroutine cmprnword
       implicit integer(a-z)
       parameter(mnround=5000,randbdim=900)
       parameter(nword=20,nbyte=nword*4,nhex=nword*8)
       common /crnwd/rnword(mnround,nword)
       common /rbblk/randb(randbdim),rbi
       common /com/nround
       do i=1,nround
         do j=1,nword
           if (rbi .eq. randbdim) then
             call randblock
             rbi=1
           else
             rbi=rbi+1
           end if
           rnword(i,j)=randb(rbi)
         end do
       end do
       end
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c The following set of subprograms are taken from the implementation
c of WEAK3-EX.
c  
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c Check whether k is in [k1, k2].
c
       subroutine rgcheck(string,k,k1,k2)
       character (*) string
       if (k .lt. k1 .or. k .gt. k2) then
         print *,'Error : ',string,k,' is out of range [',k1,',',k2,']'
         stop
       end if
       end
cccccccccccccccccccccccccccccc
c
c Copying of seeds and initialization of pointers and filling of the
c shuffling buffer of the output of the multiple seed PRNG parkms.
c After this is called, the standard PRNG sprung can be used.
c Copying is done to render the set of Fortran subprograms independent
c of the main program, thus facilitating their employment by main
c programs written in other languages than Fortran.
c This subprogram is not directly called by the user.
c
       subroutine initsprng(gseeds,mgnseed,gnseed,gbufflen,gwichs)
       implicit integer(a-z)
       parameter(maxint=2147483647)
       parameter(mnseed=2,mbufflen=2000)
       integer gseeds(mgnseed)
       common /msp/seeds(mnseed),nseed,sqi
       common /bds/buffer,bufflen,buffi,wichs
       real buffer(0:mbufflen-1)
       real parkecuyer
       nseed=gnseed
       call rgcheck('gnseed ',nseed,1,mnseed)
       bufflen=gbufflen
       call rgcheck('gbufflen ',bufflen,1,mbufflen)
       wichs=gwichs
c We require that wichs be at least 2
       call rgcheck('gwichs ',wichs,2,maxint-1)
       do i=1,nseed
         seeds(i)=gseeds(i)
         call rgcheck('gseeds ',seeds(i),1,2**28-1)
       end do
c Initialization of pointer used in parkecuyer             
       sqi=0
c Initialization of pointer of buffer used in sprng
       buffi=0
c Filling of buffer
       do i=0,bufflen-1
         buffer(i)=parkecuyer()
       end do
       end
cccccccccccccccccccccccccccccc
c
c Standard PRNG.
c This corresponds to sprng of WEAK3-EX
c
c Algorithm of Bays and Durham is used to shuffle the output of parkms.
c Method of Wichmann and Hill is used to combine wichs successive
c numbers output from the shuffling buffer to form the output of sprng.
c Returns a pseudo-random number in [0,1).
c Requires initialization by initsprng.
c
       real function sprng()
       implicit integer(a-z)
       parameter(mnseed=2,mbufflen=2000)
       common /bds/buffer,bufflen,buffi,wichs
       real buffer(0:mbufflen-1)
       real parkecuyer,rr,rr2
c Obtain one number from the shuffling buffer
c Algorithm of Bays and Durham
       rr=buffer(buffi)
       buffer(buffi)=parkecuyer()
       buffi=rr*bufflen
c Obtain further numbers from the shuffling buffer and combine
       do i=2,wichs
c Algorithm of Bays and Durham
         rr2=buffer(buffi)
         buffer(buffi)=parkecuyer()
         buffi=rr2*bufflen
c Addition of rr and rr2 mod 1 (device of Wichmann and Hill)
         rr=rr+rr2
         if (rr .ge. 1.0) rr=rr-1.0
       end do
c Avoid rounding to 1.0.
       if (rr .ge. 0.999999) rr=0.999999
       sprng=rr
       end
cccccccccccccccccccccccccccccc
c
c If sqi=0 the PRNG of Park and Miller is called.
c If sqi=1 the PRNG of L'Ecuyer is called.
c sqi ensures that the two PENGs are called alternatingly.
c
c This is not directly called by the user.
c
c Returns a pseudo-random number in [0,1)
c nseed is number of seeds.
c The streams corresponding to different seeds are used in round
c robin fashion.
c The global variable sqi is to be initialized to 0 before first
c call of this function.
c All seeds must be in [1, 2^31-2].
c
       real function parkecuyer()
       implicit integer(a-z)
       parameter(mnseed=2,mbufflen=2000)
       common /msp/seeds(mnseed),nseed,sqi
       real random
c
       if (sqi .eq. 0) then
         sqi=1
c Use PRNG of Park and Miller
         seed=seeds(1)
c
c Algorithm of Park and Miller
         hi=seed/127773
         lo=mod(seed,127773)
         test=16807*lo-2836*hi
         if (test .gt. 0) then
           seed=test
         else
           seed=test+2147483647
         end if
         random=real(seed)/2147483647
c Avoid rounding to 1.0.
         if (random .ge. 0.999999) random=0.999999
c
c Store back new seed value
         seeds(1)=seed
       else
         sqi=0
c Use PRNG of L'Ecuyer
         seed=seeds(2)
c
c Algorithm of L'Ecuyer
         a1=53668
         a2=52774
         b1=40014
         b2=40692
         c1=12211
         c2=3791
         m1=2147483563
         m2=2147483399
         q1=s1/a1
         s1=b1*(s1-a1*q1)-c1*q1
         if (s1 .lt. 0) s1=s1+m1
         q2=s2/a2
         s2=b2*(s2-a2*q2)-c2*q2
         if (s2 .lt. 0) s2=s2+m2
         z=s1-s2
         if (z .lt. 1) z=z+2147483562
         random=z*4.656613e-10
c Avoid rounding to 1.0.
         if (random .ge. 0.999999) random=0.999999
c
c Store back new seed value
         seeds(2)=seed
       end if
c
c Return random to caller.
       parkecuyer=random
       end

------------------------------

From: [EMAIL PROTECTED] (wtshaw)
Subject: Re: On living with the 56-bit key length restriction
Date: Tue, 22 Dec 1998 12:10:16 -0600

In article <[EMAIL PROTECTED]>, "Dr.Gunter Abend"
<[EMAIL PROTECTED]> wrote:
> 
> Why not using a common compression algorithm in order to make
> frequency analysis unfeasible? 
.....
> 
> It is not necessary that this algorithm produces very good
> compression. The most important feature is not the reduction of the
> message size but the impossibility of a frequency test of the coded
> data. Of course, this doesn't increase the key length, but it makes
> brute force attacks slower.
> 
> Is there any such kind of compression algorithm that doesn't itself
> produce a strongly non-random frequency distribution?

You flatten out the distribution somewhat if you exclude characters not
apt to be used in plaintext.  This is one of the justifications for using
a restricted character set, not just because it is an historic method. 
Otherwise, you can surely guess that usual text will be slim on symbol
usage.
-- 
What goes around, comes around.
You reap what you sow.
Do unto others as you would have them do unto you.
The wheels of the gods grind most slowly, but exceedingly fine.
People in glass houses should not cast stones.
Let those who are without sin cast the first stone.
Judge not that ye be judged.

------------------------------

From: [EMAIL PROTECTED] (Jim Dunnett)
Subject: Re: Code hidden in a piece of music
Date: Tue, 22 Dec 1998 21:53:04 GMT
Reply-To: Jim Dunnett

On Sun, 20 Dec 1998 20:59:46 -0600, "Steve Sampson"
<[EMAIL PROTECTED]> wrote:

>What!  You mean you can graduate 12th grade without Latin?
>What do they do at the annual Toga party?  Speak English  :-)
>
>
>Jim Dunnett wrote
>>Markus Kuhn wrote:
>>
>>>Brushing up your school Latin before reading the book might be
>>>helpful ... ;-)
>>>
>>Didn't know anyone still spoke it.

You'd probably need it in Latin America. Possibly.

(Dan Quayle?)

-- 
Merry Xmas from  Jim.        | The best advice I could give to Hague is to
olympus%jimdee.prestel.co.uk | resign and let some other poor sod try to 
dynastic%cwcom.net           | square the circle. Only someone as mad as
nordland%aol.com             | Redwood is fit for this unhappy role.
marula%zdnetmail.com         | - Ken Livingstone.
Pgp key: wwwkeys.uk.pgp.net:11371

------------------------------


** FOR YOUR REFERENCE **

The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:

    Internet: [EMAIL PROTECTED]

You can send mail to the entire list (and sci.crypt) via:

    Internet: [EMAIL PROTECTED]

End of Cryptography-Digest Digest
******************************

Reply via email to