How does the Mersenne's Twister work?
posted February 2016
Someone asked that question on reddit, and so I replied with a high level answer that should provide a clear enough view of the algorithm:
From a high level, here's what a PRNG is supposed to look like:
you start with a
seed (if you re-use the same
seed you will obtain the same
random numbers), you initialize it into a
state. Then, every time you want to obtain a
random number, you transform that
state with a one-way function \(g\). This is because you don't want people to find out the state out of the
You want another
random number? You first transform the
state with a one way function \(f\): this is because you don't want people who found out the
state to be able to retrieve past
states (forward secrecy). And then you use your function \(g\) again to output a
Mersenne Twister (MT) is like that, except:
- your first
stateis not used to output any
stateallows you to output not only one, but 624
randomnumbers (although this could be thought as one big
- the \(g\) function is reversible, it's not a one-way function, so MT it is not a cryptographically secure PRNG.
With more details, here's what MT looks like:
the \(f\) function is called "twist", the \(g\) function is called "temper". You can find out how each functions work by looking at the working code on the wikipedia page of MT.