# How should I read these three-dimensional (pseudo)random-generated numbers representations?

Visiting this site: http://lcamtuf.coredump.cx/oldtcp/tcpseq.html#phase

I found graphical representations of random-generated sequence numbers, but I can't figure out how to interprete the plots.

Taking as example OpenBSD: and the Windows NT4 SP3 distribution: I can't understand why the ISN guessing attack feasibility is higher for the Windows NT4 SP3 one (attack feasibility: 97.00%) and lower for the "cube" of windows 2000 one.

I would expect to be the Windows NT4 the less easy to attack because in its distribution the points seems to be better distributed respect to the "cube" of Windows 2000 distribution.

Looking at the site I read that this a three-dimensional representation with these definitions for $x,y,z:$

$x[t] = seq[t] - seq[t-1]\\ y[t] = seq[t-1] - seq[t-2]\\ z[t] = seq[t-2] - seq[t-3]$

Where $t$ seems to be the time at which we pick the sequence number

But, given this, I can not understand how points plotted are related: for example, what I should think about two near (respectively: far) points? are sequence numbers with low differences or high differences?

• @MaartenBodewes Yes, precisely that one – Alessio Martorana Jun 27 '16 at 18:44
• Thank you very much either for the edit and for the welcome! =) I'll edit a bit the message to take it into account – Alessio Martorana Jun 27 '16 at 18:47

One of the key properties we want out of PRNGs is that they produce results that follow a desired probability distribution. Nearly all of the time we want our PRNGs to produce data with uniform distribution—all of the possible output values should have equal probability.

So let's assume that we are given a seq sequence whose values are samples drawn from a uniform distribution. We can now ask: what should be the distribution of the x, y and z sequences? Well, since they're defined as sums of values drawn from a uniform distribution, this is the same sort of distribution we get from throwing a pair of dice and adding their results, where a 7 is six times more likely than a 2. So the distribution we should ideally see in that page's data is:

1. A cube with a hard boundary (just like we can't roll a 1 or a 13 from the dice);
2. Centered around (0, 0, 0) (because the expected value of the subtractions is zero);
3. Denser toward the middle and sparser toward the boundary (just like throwing a seven is more likely than a two).

The Windows NT SP3 graph very obviously deviates from that pattern: I would expect to be the Windows NT4 the less easy to attack because in its distribution the points seems to be better distributed respect to the "cube" of Windows 2000 distribution.

What you should be thinking of is how closely does the distribution resemble the "ideal" one for the scenario in question. This is the approach that I took above:

1. I picked uniform distribution as the ideal for sequence numbers;
2. And from that it follows that I must pick the "dice roll" distribution as the ideal for x, y and z.

Then, any significant deviation from the ideal distribution should be seen as a potential flaw. Why? Because non-ideal distribution means that some values are more likely than they ought to be, and thus that the attacker will succeed faster than they ought to by trying such values first.

But, given this, I can not understand how points plotted are related: for example, what I should think about two near (respectively: far) points? are sequence numbers with low differences or high differences?

The magnitude of the distances between points isn't important. What's important is whether those distances are predictable at a higher-than-chance success rate. And this gets to the heart of the attacks they're analyzing here. By looking at the distributions of the differences they are able to build models that predict the ISNs for various operating systems with better-than-chance success rates.

Finally, look at your definition of seq and notice that the differences in question are between the elements of consecutive quadruples of the ISN sequence. If these differences are highly predictable, what it tells you is that you can easily guess the next sequence number just from knowing the previous ones, by guessing the next differences and adding them to the recently observed ISNs.