Попросите человека назвать случайное число от 1 до 100.
Он что-нибудь назовёт.
Попросите компьютер сделать то же самое.
И тут возникает проблема.
Обычный компьютер вообще не умеет делать что-либо случайно.
Внутри процессора нет маленького генератора хаоса. Компьютер — детерминированная машина: если дать ему одинаковые исходные данные и заставить выполнить одинаковые инструкции, результат будет одинаковым.
Но ведь случайные числа используются буквально повсюду:
— в играх;
— при перемешивании;
— в симуляциях;
— при генерации паролей;
— в криптографии.
Откуда они тогда берутся?
Псевдослучайность
Обычно компьютер использует генератор псевдослучайных чисел — PRNG.
Это математический алгоритм.
Ему дают начальное значение — seed, или «зерно», — а дальше он вычисляет последовательность чисел, которая выглядит хаотичной:
"42 → 17 → 91 → 3 → 68 → 54..."
Но она не случайна.
Запустите тот же алгоритм с тем же seed — и получите точно такую же последовательность.
То есть компьютер фактически не говорит:
««Выберу случайное число».»
Он говорит:
««Вычислю следующее число так, чтобы тебе было очень трудно заметить закономерность».»
И это свойство даже полезно.
Например, разработчик может сохранить seed случайно сгенерированного игрового мира — и потом воссоздать абсолютно тот же мир снова.
А как получить настоящую случайность?
Нужно обратиться к чему-то, что происходит в физическом мире.
Например, использовать электрический шум, тепловой шум или другие физические процессы. Существуют аппаратные генераторы случайных чисел, которые получают энтропию именно таким способом.
Операционные системы тоже собирают энтропию из различных трудно предсказуемых источников и используют её для безопасной генерации случайных данных.
Поэтому правильнее сказать так:
алгоритм сам по себе не способен создать истинную случайность из ничего.
Он может лишь превратить уже имеющееся начальное состояние в чрезвычайно убедительную имитацию случайности.
И вот тут появляется второй вопрос:
а существует ли вообще настоящая случайность в природе — или мы просто не знаем всех исходных условий?