Компьютеры могут генерировать поистине случайные числа, наблюдая за некоторыми внешними данными, такими как движения мыши или шум вентилятора, который не предсказуем и создают данные из него. Это называется энтропией. В других случаях они генерируют «псевдослучайные» числа, используя алгоритм, поэтому результаты кажутся случайными, хотя таковыми не являются.
Эта тема становится всё более спорной в последнее время, и вызывает сомнение у большого количества людей. Чтобы понять, почему это может быть ненадежным, вам нужно понять, как используются случайные числа и для чего они нужны.
Как используют случайные числа
Случайные числа использовались в течение многих тысяч лет. Независимо от того, подкидывали ли монету или бросали кости, цель заключалась в том, чтобы получить случайный результат. Генераторы случайных чисел на компьютерах похожи – они пытаются достичь непредсказуемого случайного результата.
Генераторы случайных чисел полезны для разных целей. Помимо очевидных приложений, таких как генерация случайных чисел для азартных игр или создания непредсказуемых результатов в компьютерной игре, случайность важна для криптографии.
Криптография требует использования чисел, о которых не смогут догадаться третьи лица. Мы не можем просто использовать одни и те же числа снова и снова. Мы хотим генерировать эти цифры очень непредсказуемым образом, чтобы злоумышленники не могли их угадать. Эти случайные числа необходимы для безопасного шифрования, независимо от того, шифруете ли вы свои собственные файлы или подключаетесь к веб-сайту по HTTPS.
Истинные случайные числа
Возможно, вам интересно, как компьютер может генерировать случайное число. Откуда возникает эта «случайность». Если это всего лишь фрагмент компьютерного кода, возможно ли, что числа, которые генерирует компьютер, могут быть непредсказуемыми?
Обычно мы группируем случайные числа, создаваемые компьютером, в два типа, в зависимости от того, как они генерируются: «истинные» случайные числа и псевдослучайные числа.
Для генерации «истинного» случайного числа компьютер измеряет некоторый тип физического явления, которое происходит за пределами компьютера. Например, компьютер может измерять радиоактивный распад атома. Согласно квантовой теории, нет никакого способа точно знать, когда произойдет радиоактивный распад, так что это «чистая случайность». Злоумышленник не сможет предсказать, когда произойдет радиоактивный распад, поэтому они не будут знать случайное значение.
В бытовом случае компьютер может опираться на атмосферный шум или просто использовать точное время нажатия клавиш на клавиатуре в качестве источника непредсказуемых данных или энтропии. Например, ваш компьютер может заметить, что вы нажали клавишу ровно в 0,23423523 секунды после 2 часов дня. Это достаточный источник энтропии, который можно использовать для создания «истинного» случайного числа. Вы не предсказуемая машина, поэтому злоумышленник не сможет угадать точный момент, когда вы нажимаете эти клавиши.
Псевдослучайные числа
Псевдослучайные числа являются альтернативой «истинным» случайным числам. Компьютер может использовать начальное значение и алгоритм для генерации чисел, которые кажутся случайными, но которые, на самом деле, предсказуемы. Компьютер не собирает никаких случайных данных из среды.
Это не обязательно плохо. Например, если вы играете в видеоигру, не имеет значения, связаны ли события, происходящие в этой игре, с «истинными» случайными числами или псевдослучайными числами. С другой стороны, если вы используете шифрование, вряд ли Вам захочется использовать псевдослучайные числа, которые может угадать злоумышленник.
Например, злоумышленник знает алгоритм и начальное значение, которое использует генератор псевдослучайных чисел. Предположим, что алгоритм шифрования получает псевдослучайное число из этого алгоритма и использует его для генерации ключа шифрования без добавления дополнительной случайности. Если злоумышленник знает достаточно, он сможет «повернуть процесс вспять» и определять псевдослучайное число, вмешавшись в шифрование.
NSA и аппаратный генератор случайных чисел Intel
Чтобы упростить работу разработчиков и помочь генерировать безопасные случайные числа, чипы Intel включают аппаратный генератор случайных чисел, известный как RdRand. Этот чип использует источник энтропии на процессоре и предоставляет случайные числа для программного обеспечения, когда программное обеспечение запрашивает их.
Проблема здесь в том, что генератор случайных чисел – это, по сути, «черный ящик», и мы не знаем, что происходит внутри него. Если RdRand содержит бэкдор NSA, правительство сможет получить ключи шифрования, которые были сгенерированы с данными, предоставленными этим генератором случайных чисел.