От движений котенка до банановой радиации. Как компьютер получает случайные числа и действительно ли они случайны

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

Компания друзей в магазине электроники делала все возможное, чтобы объяснить, что им нужно — они искали трескучее, насколько это возможно, радио. Знаете, эти звуки, которые слышны, когда передвигаешь ползунок от станции к станции? Продавец в магазине не знал, что ответить.

«Мне кажется, он думал, что мы совсем сумасшедшие», — вспоминает Мадс Хаар.

Шел 1997 год, и он со своими приятелями рыскал вокруг магазина Radio Shack в Беркли. Большинство радиоприемников, поступающих в продажу, имели фильтры шума, которые устраняли те самые потрескивания, которые они искали. Однако после недолгих уговоров продавец разрешил Хаару и его друзьям послушать одно из самых дешевых устройств, которые были у него в задней части магазина.

Когда они вставили пару батареек в маленький серый радиоприемник стоимостью 10 долларов, поднялась настоящая стена шума. Было чертовски шумно. «Мы прыгали от радости», — говорит Хаар. Это маленькое радио, как они думали, могло сделать их богатыми. Хаар и трое его друзей работали над программным обеспечением для азартных игр — они хотели создать онлайн-блэкджек и цифровые игровые автоматы. В то время интернет-казино только начинали набирать обороты.

Хаар понимал, что им нужно научиться генерировать действительно случайные числа — бесконечные потоки цифр, которые будут определять, какие слоты выпадут после того, как игрок потянет виртуальный рычаг, или какие карты будут сдаваться во время онлайн-игры в покер. Если эти значения будут предсказуемыми, это, во-первых, сделает цифровое казино нечестным, а во-вторых, предоставит игрокам возможность найти закономерность и обыграть систему.

Итак, четверо друзей искали источник случайности, которому можно было бы доверять. Что-то, что по определению не могло бы быть просчитано. Хаару пришла в голову потрясающая идея — шипение дешевого аналогового радиоприемника.

Шум, издаваемый таким устройством, является поистине беспорядочным сигналом. Это помехи, создаваемые разрядами молний и электромагнитной активностью в атмосфере Земли.

Хаар придумал заставить компьютер слушать эти помехи и преобразовывать повышения и понижения частот в единицы и нули, также известные как биты, а затем использовать их для создания строк случайных чисел. Эти числа должны были определить, например, какую карту игрок в онлайн-покер получит следующей.

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

Люди уже давно ищут по-настоящему хаотические явления как основу для генераторов случайных чисел. Они слушали грохот электрических бурь, делали снимки капель дождя на стекле и играли с мельчайшими частицами в известной Вселенной. Поиски далеки от завершения.

Маленькое серое радио не сделало Хаара и его друзей богатыми. Онлайн-казино в то время были слишком маленькой отраслью, чтобы молодые предприниматели могли зарабатывать на нем деньги. Но созданный ими генератор случайных чисел, по их мнению, все еще полезен. Поэтому Хаар опубликовал его на random.org. Сайт пользуются для самых разных целей.

«Я могу вспомнить мэрию Сан-Франциско, — говорит Хаар. — Они используют наш сервис для розыгрыша доступного жилья».

Еще им пользуются люди, которые проводят лотереи среди местных сообществ. Они каждую неделю выбирают выигрышные номера на веб-сайте Хаара. Ученые использовали онлайн-генератор чисел для выбора случайных испытуемых в ходе экспериментов. Маркетинговые фирмы, которые раздают призы потребителям, иногда выбирают своих победителей с помощью сайта Хаара.

«Люди используют случайные числа, например, для проверки на наркотики, — добавляет Хаар. — Сотрудников выбирают случайным образом».

На сайте также есть возможность создания случайного пароля. И да, некоторые онлайн-казино также полагаются на random.org.

Один пользователь рассказывал, что зашел на сайт, чтобы он помог ему выбрать, какие диски из его коллекции в 700 экземпляров класть в машину каждую неделю.

Все эти результаты, в некоторых случаях — судьбоносные (например, в ходе розыгрышей), получены на основе атмосферной активности, зафиксированной множеством радиоприемников.

То самое радио за 10 долларов давно потерялось, признается Хаар. С годами он и его коллеги установили более совершенное оборудование для получения высококачественного атмосферного шума, и в настоящее время сайт использует девять больших приемников в разных географических точках.

Вы могли подумать, что если вы никогда не участвуете ни в лотереях, ни в клинических испытаниях, то для вас случайные числа не имеют значения. Но вы ошибаетесь.

Каждый раз, когда вы выбираете новый пароль, даже тот, который придумываете сами, компьютер добавляет к нему еще один фрагмент данных. Это позволяет зашифровать пароль на сервере, поэтому если кто-то взломает базу данных с паролями, он не сможет просто прочитать их и пользоваться в свое удовольствие. Этот фрагмент данных, добавленный к паролю, называется salt и он получен из случайного числа.

«Мы используем случайные числа каждый день, сами того не подозревая», — говорит Алан Вудворд, эксперт по компьютерной безопасности из Университета Суррея.

Случайные числа необходимы для защиты информации, уточняет он, и они используются всякий раз, когда компьютер шифрует данные, превращая их в бессмысленный на первый взгляд набор символов. Например, когда вы посещаете сайт, чей адрес начинается с https://, вы просите свой компьютер и сервер, на котором хранится сайт, сгенерировать несколько случайных чисел и обменяться ими. Затем эти случайные числа используются для шифрования данных, отправляемых туда и обратно в ходе взаимодействия вашего устройства с сайтом. (Это огромное упрощение процесса, который происходит всего за несколько миллисекунд, но вы понимаете суть.)

Когда конфиденциальные данные распространяются по компьютерным сетям, особенно тем, которые доступны широкой публике, важно обезопасить эту информацию.

Cloudflare, технологическая компания, предоставляющая услуги облачной безопасности, использует множество случайных чисел в своих центрах обработки данных. Компания нашла несколько способов генерирования случайных чисел, включая коллекцию лава-ламп.

«Это началось почти как шутка, а потом мы сказали: „Подождите минутку, мы действительно могли бы это сделать“», — говорит Джон Грэм-Камминг, технический директор.

В офисе Cloudflare в Сан-Франциско на потолке есть камера, направленная на стену с разноцветными лава-лампами.

«Движение этой каплевидной, маслянистой, воскообразной штуковины внутри лава-лампы совершенно непредсказуемо», — объясняет Грэм-Камминг.

Камера делает снимки через определенные промежутки времени, а затем форма и положение заснятых объектов преобразуется в серию чисел. Эта идея, впервые реализованная компанией Silicon Graphics в конце 1990-х, является одним из многочисленных методов, которыми Cloudflare пользуется, чтобы генерировать случайные числа для защиты информации.

Список вещей, к которым люди прибегали в погоне за случайными числами, восхитительно странный. Один инженер-программист во время прогулки в дождливый день понял, что капли дождя, падающие на его очки, могут стать подходящим источником случайности, поэтому он в качестве эксперимента смоделировал закономерности появления этих капель. Другие пытались зафиксировать активность пузырьков в аквариуме. Еще один подход основывался на непредсказуемом поведении котенка, чьи движения фиксировались веб-камерой.

Была группа исследователей, которые пробовали обнаружить случайность, рассматривая уникальные генетические последовательности, содержащиеся в молекулах ДНК.

Ученые также интересуются щелчками радиоактивного распада, регистрируемыми, например, счетчиками Гейгера. Вы не можете точно предсказать, когда атом распадется и выделит субатомные частицы, которые считывает счетчик Гейгера, а это означает, что радиация — хороший источник случайности.

Существует проект, в котором для создания генератора случайных чисел используется банан, поскольку этот фрукт слабо радиоактивен.

В 2016 году New York Times упомянула молодого геймера, который нашел способ создать генератор случайных чисел в Minecraft. Игрок организовал что-то вроде турнира для своих друзей, при этом ему нужно было, чтобы в ходе турнира случайным образом активировались ловушки. Он решил построить вольеры и посадить туда виртуальных коров, которые ходят по непредсказуемой траектории. Всякий раз, когда корова наступала на одну из пластин, установленных игроком на полу вольеров, это приводило к срабатыванию ловушки.

Существует также множество более обыденных входных данных для генераторов случайных чисел. Разные сервисы используют, например, движение курсора мыши по экрану компьютера, временную задержку между нажатиями клавиш на клавиатуре или шум трафика в компьютерной сети.

«Мы почти уверены, что использование шума трафика обеспечивает безопасность данных», — говорит Стивен Мердок, профессор инженерной безопасности Университетского колледжа Лондона.

Мердок является создателем браузера Tor, который обеспечивает безопасный просмотр интернет-страниц с помощью нескольких уровней шифрования.

Мердок утверждает, что мы вполне способны генерировать достаточно случайные числа, но нам недостает дополнительной проверки, чтобы гарантировать, что предположительно случайный результат действительно случаен. «Мне бы хотелось более тщательного проектирования и тестирования», — говорит он.

Но это действительно довольно сложно.

«Если мы знаем, что некое число было получено неслучайно — мы можем это доказать, а вот случайность всегда остается предположительной», — объясняет Даррен Херли-Смит, преподаватель информационной безопасности в Лондонском университете.

У исследователей есть способы идентифицировать генераторы неслучайных чисел, такие как статистический анализ, который ищет последовательности. Он может обнаружить, что в мнимо случайном ряду одно число выпадает чаще, чем если бы указанная последовательность была действительно случайной — например, слишком много троек. Однако этого недостаточно. Что если исследуемая последовательность — это «123123123123123»? В этом случае, указывает Херли-Смит, тройки представлены не чаще, чем единицы или двойки. Однако в последовательности есть сверхочевидный паттерн, который делает неслучайность видимой.

Для действительно больших наборов чисел статистические тесты на случайность становятся очень сложными. И все же вы никогда не сможете доказать, что какой-то ряд действительно является случайным — максимум, что для вашего метода анализа этот ряд неотличим от случайного.

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

Когда генераторы случайных чисел не выполняют свою работу должным образом, есть вероятность, что злоумышленники могут воспользоваться ими. В 2017 году Wired сообщила о деле российского хакера, который якобы заставлял людей снимать работу игровых автоматов в казино. Основываясь на результатах каждой игры, он смог предсказать работу генераторов случайных чисел внутри автоматов и определить, когда они будут выигрышными в следующий раз.

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

Даже если учесть плохую реализацию, большинство генераторов случайных чисел, упомянутых выше, все равно могут быть лишь немного более надежными. Источники случайности, от которых они зависят, в лучшем случае кажутся нам просто случайными.

Если бы мы каким-то образом узнали все хитросплетения Вселенной и научились бы идеально ее моделировать, мы, вероятно, смогли бы детально предсказать шум атмосферы или рисунок капель дождя, падающих на стекло.

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

Для практических целей такие показатели, как время поступления фотонов — крошечных частиц света — на детектор, считаются действительно случайными и подходят в качестве основы для генерации случайных чисел. Другой подход включает в себя подсчет фотонов, испускаемых лазерным импульсом, который в специальной экспериментальной установке выдает случайным образом нечетное или четное количество фотонов. Проделывая это снова и снова, вы можете сгенерировать строку случайных битов и использовать ее для получения случайных чисел.

В принципе, квантовые генераторы случайных чисел «по своей сути непредсказуемы», говорит Жанет Захариева, соучредитель британской фирмы Quantum Dice, которая разрабатывает собственную технологию квантовой генерации случайных чисел. И все же даже некоторые из этих новых систем подвержены недостаткам.

«В итоге вы получаете систему, представляющую собой смесь квантовой энтропии и классического шума», — объясняет Захариева.

Херли-Смит отмечает, что некоторые квантовые генераторы случайных чисел полагаются на оборудование, которое со временем может сделать результаты менее случайными.

«Если фотон попадет на датчик, он немного разогреет его и, возможно, сделает его более или менее чувствительным к следующим воздействиям», — объясняет он.

Другими словами, перед вами действительно случайное явление, но в конечном итоге вы так или иначе искажаете его обнаружение, уменьшая случайность результатов.

С развитием квантовых технологий мы можем ожидать появления в будущем еще более изобретательных и, надеюсь, надежных генераторов случайных чисел.

В то же время, всегда есть random.org.

Иногда люди жалуются Мадсу Хаару, что они заметили будто бы предсказуемую последовательность чисел в выходных данных сайта. На самом деле это потому, что мы вообще очень плохо распознаем случайность, говорит он. Кажется, мы предрасположены видеть закономерности во всем.

Возможно, изначально Хаар и не собирался создавать ресурс вроде random.org, но со временем он понял, что хочет заниматься именно этим. Он предполагает, что это потому, что он родом из Дании, которая регулярно входит в число наименее коррумпированных стран мира. Теперь люди используют его веб-сайт, чтобы убедить других в том, что они честно подбрасывают монетку. Чтобы игра или процесс, которые они инициируют, были честными и справедливыми — по крайней мере, в рамках случайности.

Следует отметить, что Хаар и его коллеги, которые работают над random.org, имеют вполне очевидный стимул манипулировать выдачей чисел, ведь таким образом они могли бы, например, сфальсифицировать результат лотереи. Но они бы никогда этого не сделали, настаивает Хаар, поскольку это противоречило бы всему, за что они выступают. И все же это справедливый вопрос, поскольку, как он признает, технически они способны смухлевать.

Каким бы совершенным ни был генератор случайных чисел в принципе, вы все равно должны верить, что человек, который им управляет, руководствуется совестью.

«Я думаю, этот процесс в любом случае требует некоторого доверия», — говорит Хаар.