So, Kolmogorov Complexity gives us an interesting way to think about randomness.
It's certainly a useful notion
in many areas of computer science.
But, it's not going to give us a practical way
to tell if the sequence is random.
It won't even give us a theoretical way to do that because it's uncomputable.
The next thing we might think about trying is statistical tests.
And, this in fact often used as part of an argument
that something produces random numbers.
It should be part of that argument, but it can never be the whole argument.
The only thing we can do with a statistical test
is show that something is non-random.
We can't ever prove that it is random.
We can always find some non-random sequence
that satisfies all of our statistical tests.
So, we're left with our best argument
is how the sequence is actually generated.
If we know how the sequence is produced,
we can have some confidence that it satisfies
the randomness requirements we have,
at least for generating a good key.
And, the real requirement there is unpredictability.
We want to know if our sequence is a sequence of numbers like this;
where each xi is under the reign of 0 to 2 to n-1
That even an attacker who's seen the first m numbers in the sequence
can only guess the next one with the same probability they would have
if they were just guessing by chance,
only 1 out of 2, 2 to the n, the size of the elements in the sequence.
So, that's the property we want.
If we're going to get that property--and we can't do it
by using Kolmogorov complexity because that's uncomputable
and we can't do it with statistical tests because they can only show non-randomness--
the way we're going to try to achieve that
is by generating the sequence in a way that produces values
that are unpredictable to the attacker.
