Tom7-skipstate generator
This is a modification to any clocked generator which
allows feedback different from the clock and improves over 'shrinking'
type generators.
Analysis
I believe that this is a better solution than using the clock
for feedback or 'shrinking' the generator. Shrinking provides good random
properties but is nondeterministic -- you are not guaranteed to get an
output in a finite amout of time. This seems unrealistic for
implementation, particularly in hardware. Clocking the generator is
deterministic but tends to produce longer strings of 1's and 0's (when the
generator remains unclocked, it produces the same output as in its last
state). Poorly designed clocking feedback can also yield embarassing
locking states, where none of the generators are being clocked and
continue to produce the same output.
Skipstate uses a separate 'skipstate' input, which is like a second
clock. When skipstate is high and clock is high (at time t-1), the
generator advances two states and outputs a bit. When clock is high
but skipstate is low, it advances one state and outputs a bit. When
clocks is low, the state is not advanced. In general, the clock input
remains permanently high in a skipstate generator.
If the original generator has a statistically random output, the
output from a skipstate generator (no matter what the input on the
skipstate line is, as long as it is independent) should also be
statistically random.
See some skipstate generator constructions.
It is my opinion that inelegance is often an indicator of poorness. It
strikes me that there were a few inelegant (arbitrary) decisions made:
Other variations of the skipstate generator might include:
/* C Implementation of Tom7-skipstate generator (using LFSR). This code is distributed under the GNU public license; see http://www.gnu.org/copyleft/gpl.html. I can't make any claims about the security of this algorithm because I am not a trained cryptographer, though it produces (as far as I can tell) statistically random output. This code should be thought about, but not used unless you know more about this than me. Tom 7 http://tom7.org/ */ #include Back to Tom's Cryptography Thingie.
|