Сегодня мы посмотрим, как ваш компьютер действительно генерирует случайное число и, самое главное, действительно ли оно «случайное»?

Что такое случайное число на самом деле?

Итак, чтобы понять, что такое случайное число, нам сначала нужно понять, что на самом деле означает «Случайное». Допустим, вы хотите бросить дротик в доску, которая имеет определенное значение для каждой позиции приземления вашего дротика. Здесь нельзя предсказать исход. Будет ли это 10 или 540, никто точно не знает (если только вы не Деннис Ритчи в метании дротиков!). Теперь это будет случайный вывод, поскольку мы действительно не знаем результата. Итак, в двух словах, случайное число — это число или результат, который не имеет никакой зависимости или практически невозможно воспроизвести.

Как компьютеры действительно производят случайное число?

Это подводит нас к следующему вопросу: как мой ноутбук или смартфон выдает случайное число? Кхм... нет.

Что!?

Да, это не так. Это правда. Никакая детерминированная вычислительная система не может создать действительно случайное число, никогда. Независимо от того, какую систему, ОС или язык программирования вы используете. Никакое число, сгенерированное с помощью randint() или подобной функции, никогда не даст вам действительно случайное число. Он всегда будет использовать то, что уже есть в системе, например движение мыши или интервал нажатия клавиш и т. д. Это будет ссылка, а затем система применит некоторую предопределенную логику и, наконец, даст вам «случайное» число. . Видишь лазейку? Если вы знаете базовое число, вы можете воспроизвести то же самое число в кратчайшие сроки. Смущенный? Вернемся к нашему любимому языку Python.

>>> import random
>>> random.seed(20)
>>> random.randint(0, 1000)
927
>>> random.seed(20)
>>> random.randint(0, 1000)
927
>>> random.seed(25)
>>> random.randint(0, 1000)
386

Здесь, используя seed(), мы устанавливаем базовое значение, с которого python должен начать применять свою логику для генерации «случайного» числа. Если вы делаете базу одинаковой каждый раз, вы получите один и тот же результат. Поскольку вся логика предопределена, и наш компьютер не может думать как человек, мы каждый раз будем получать одно и то же значение. Теперь вы можете думать об AI/ML. Вообще-то, нет. Даже самый лучший ИИ в мире не может этого сделать. Как я уже говорил ранее, детерминированная система никогда не сможет дать нам действительно случайное число. Истинная случайность никогда не может быть полностью сгенерирована программированием.

Хорошо, но на кой черт я это пишу?

Вы можете подумать, ну и что? Почему этот парень тратит свое время, написав это? Ну, вы можете не заметить, но случайные числа повсюду. Даже когда вы читаете эту статью на Medium или в моем личном блоге, вы на самом деле пользуетесь помощью случайного числа. Случайные числа — основа Криптографии. Один из самых популярных асимметричных криптографических алгоритмов, алгоритм RSA, использует случайное число для создания открытого и закрытого ключа, как и многие другие алгоритмы. Эта генерация случайных чисел имеет решающее значение для того, чтобы алгоритмы сохраняли свою силу и скрывали ваши личные данные в безопасном хранилище. Как я показал выше, если хакер узнает или угадает случайное число, ему будет очень легко взломать остальную часть.

Так можем ли мы действительно заставить наши компьютеры выдавать действительно случайное число?

На данный момент это невозможно с вашим или моим ПК, но мы можем поискать другие варианты. С помощью квантовых компьютеров мы сможем генерировать действительно случайное число. на самом деле это основная функция квантовых компьютеров. Так что, как говорится, я уйду на день. Я мог бы вернуться для глубокого погружения в это и в то, как на самом деле работают квантовые компьютеры, но, эй, кто знает, в конце концов, человеческое поведение — вещь случайная, верно? или нет?!