Что такое генератор случайных чисел? Несколько строчек кода, а в некоторых языках программирования — так и вовсе одна. Удивительно, но факт: в 1957 году генератор случайных чисел занимал небольшое помещение, поскольку именно для этой цели был построен специальный компьютер. И построен он был не просто так, а для решения важной практической задачи. Разрабатывал его, к слову, Томас Флауэрс — человек, создававший во время Второй мировой войны вычислительные машины, которые расшифровывали секретные сообщения немецкой армии. Однако обо всем по порядку.
Кто купил билетов пачку…
В 1956 году министр финансов Великобритании Гарольд Макмиллан задумался о способах немного повысить благосостояние подданных Ее Королевского Величества, а заодно и пополнить государственную казну. Результатом его размышлений стало появление так называемых «премиальных облигаций». В отличие от обычных государственных ценных бумаг премиальные облигации не предлагали какого-либо фиксированного купонного дохода. Вместо этого их обладатели становились участниками ежемесячной лотереи, в которой разыгрывался процент по этим самым облигациям и множество денежных призов. Размер призов варьировался от 25 до 1 000 000 фунтов стерлингов, при этом полученные таким образом доходы не облагались налогами. Облигация могла принимать участие в ежемесячных розыгрышах спустя 30 дней после ее приобретения и вплоть до даты ее погашения, а государство обязалось выкупить эти ценные бумаги по номинальной цене по истечении срока их действия.
Премиальные облигации
Этот оригинальный инвестиционный инструмент был торжественно представлен на Лондонской бирже 1 ноября 1956 года, и самую первую премиальную облигацию приобрел у генерального почтмейстера доктора Чарльза Хилла лорд-мэр Лондона сэр Катберт Экройд, обогатив бюджет Великобритании на 1 фунт стерлингов. Новинка очень понравилась жителям туманного Альбиона, и вскоре премиальные облигации стали пользоваться неизменным спросом. К концу 1956 года было продано около 50 миллионов облигаций, каждая из которых имела уникальный серийный номер. На сегодняшний день такими ценными бумагами владеют более 24 миллионов англичан.
В ходе лотерей, где определялись счастливчики, требовалось случайным образом выбирать большое количество серийных номеров выигравших облигаций, причем таким образом, чтобы ни у кого не возникло даже малейших сомнений в беспристрастности алгоритма. Все-таки речь шла о миллионах фунтов стерлингов. Иными словами, простых лототронов с пронумерованными шариками тут оказалось явно недостаточно. И британское правительство решило построить для этих целей специальный Лотерейный Компьютер, который эффективно решал бы столь непростую задачу. Тут-то чиновники и вспомнили про талантливого инженера Томаса Флауэрса, считавшегося одним из самых продвинутых компьютерщиков Англии в 1956 году. Тем более, ранее он уже успешно работал на британское правительство, и не просто на правительство, а на Министерство обороны и военную разведку.
Неслучайная случайность
Общеизвестно, что числа, генерируемые с помощью функций вроде «rand();» в С++, называют «псевдослучайными». И это «жу-жу-жу», то есть, приставка «псевдо-», тут неспроста. Последовательность таких чисел имеет все свойства случайной, однако она формируется по определенному математическому алгоритму, подчиняющемуся ряду закономерностей, а сам генератор имеет ограниченное число внутренних состояний. Из-за этого на достаточно больших промежутках времени созданная таким генератором последовательность чисел может повториться.
Для генерации номеров, выигравших в государственной лотерее облигаций, требовалось устройство, способное выдавать действительно случайные последовательности, которые невозможно предугадать, даже зная алгоритм. Кроме того, в случае с премиальными облигациями, имеющими многозначные серийные номера, возникла необходимость генерировать до 100 миллионов случайных значений в ходе каждого розыгрыша. Иными словами, правительству Великобритании был нужен генератор случайных чисел прямо-таки промышленного масштаба.
Том Флауэрс
Задачу придумать такую машину поставили перед Томом Флауэрсом и примкнувшем к нему инженером Гарри Фенсом, также трудившимся в исследовательской лаборатории почтовой службы в Доллис-Хилл. Ради экономии времени и сил Флауэрс взял за основу нового компьютера давно проверенный Colossus, разработкой которого он занимался в годы войны. Нужно было только добавить к нему самую важную деталь — генератор случайных значений, причем в основе случайности должен лежать какой-то хаотичный физический процесс, результат действия которого невозможно предсказать никаким образом. Только вот какой?
«А внутри у ней — неонка!»
Поразмыслив, Флауэрс решил построить генератор на основе ламп, заполненных неоном. Такие лампы светятся красивым красным светом, но их главная особенность заключается отнюдь не в этом. Если приложить к неоновой лампе высокое напряжение, внутри нее возникает электрический ток, создаваемый потоком заряженных частиц между электродами. По пути электроны сталкиваются с атомами неона, отчего их траектория движения становится хаотичной, и на выходе получается электрический ток случайной величины. Этот сигнал, пропущенный через усилитель, подавался на импульсный генератор. Придуманная Флауэрсом схема выдавала до 3000 электрических импульсов в секунду, причем каждую секунду количество этих импульсов было разным. Получившаяся конструкция служила генератором «шума» для компьютера.
Принципиальная схема генератора «шума» Флауэрса
Количество генерируемых схемой импульсов колебалось вокруг некоего среднего значения, поэтому его нельзя было использовать в качестве по-настоящему случайного числа. Вместо этого из полученного при подсчете импульсов значения компьютер извлекал младший разряд и передавал его на «кольцевой счетчик», который выполнял с ним операцию mod по модулю 6, 10 или 24. При этом счетчик каждый раз начинал отсчет с разного значения, что добавляло результату дополнительный элемент случайности. Счетчики управлялись импульсами, подаваемыми генератором шума. Фактически, вся эта система работала, как некий эквивалент вращающегося колеса рулетки в казино — там, где рулетка останавливалась, и получалось случайное число.
Компьютер получил наименование ERNIE (производное от «A Random Number Generator»). Поскольку серийный номер облигации состоял из 7 цифр и двух букв, в конструкции ЭВМ использовалось девять кольцевых счетчиков. Семь из них генерировали цифры от 0 до 9, а последние два выдавали случайным образом одно из 22 значений, соответствующих символам английского алфавита (литеры «O», «I» и «U» в номерах облигаций не использовались). Чтобы избежать ситуации, при которой полученное число не было бы случайным из-за перегорания неоновой лампы, все «неонки» в конструкции ERNIE Флауэрс продублировал и смонтировал их на плате парами. Полученные в результате своей работы серийные номера компьютер выводил на телетайпную ленту.
«Лотерейный» компьютер ERNIE
ERNIE был способен выдавать один случайный номер выигрышной облигации каждые две-три секунды, а всего — около 2000 номеров в час. В ходе первого розыгрыша компьютер сгенерировал 60 000 серийных номеров, позволивших выбрать всего 23 000 победителей. Разница объясняется тем, что номера премиальных облигаций не были последовательными — существовало значительное количество номеров, которые не соответствовали проданным ценным бумагам. Все выбранные ERNIE номера тщательно проверялись актуарным департаментом правительства Великобритании (актуарий – специалист в области экономики и финансов, решающий задачи финансовой безопасности и оценки рисков). Целью проверки было убедиться в том, что номера действительно случайные, и в ходе розыгрыша не произошло никаких подтасовок или мошенничества. Иными словами, британцы подошли к вопросу серьезно, с поистине немецкой педантичностью. Сам компьютер ERNIE, к слову, обошелся королевской казне в 25 000 фунтов стерлингов, но эти затраты многократно и довольно быстро окупились.
Вкалывают роботы, счастлив человек
Идея проведения розыгрышей с использованием ЭВМ пришлась британцам по вкусу — в 1957 году столь яркое проявление технического прогресса казалось настоящей научной фантастикой. А сам компьютер ERNIE превратился в элемент местного фольклора. Англичане писали ему письма и присылали поздравительные открытки на Рождество, а в сувенирных лавках продавались фарфоровые копилки в виде симпатичного робота по имени ERNIE и шкатулки в виде него же — считалось, что если хранить облигации в такой «статуетке», их владельцу повезет и они обязательно окажутся выигрышными.
Надпись на шкатулке гласит: «счастливая коробка для облигаций ERNIE»
Тем временем, тот самый технический прогресс шел своим чередом, и Флауэрс понемногу совершенствовал конструкцию своей машины. В 1972 году появилась вторая версия ERNIE, в архитектуре которой использовались транзисторы и сменные модули в виде отдельных печатных плат. В 1988 году его заменил ERNIE III размером с обычный персональный компьютер. С помощью этого компьютера каждый ежемесячный розыгрыш проводился за пять с половиной часов.
В 2004 году его сменил ERNIE IV, разработанный компанией LogicaCMG. В этой машине уже не использовались неоновые лампы — генератор случайных чисел работал на основе теплового шума в транзисторах. Быстродействие ERNIE IV было в 500 раз выше оригинала — компьютер генерировал миллион серийных номеров облигаций в час.
Последняя на сегодняшний день версия ERNIE за номером V создана компанией ID Quantique, и была введена в эксплуатацию в марте 2019 года. Этот компьютер построен на квантовом генераторе случайных чисел, использующем технологию для получения случайных значений с помощью света, заменившую прежний метод «теплового шума». ERNIE V работает в 21 000 раз быстрее самой первой модели ERNIE и способен определить 3 миллиона победителей ежемесячной государственной лотереи всего лишь за 12 минут.
Ну, а самый первый компьютер ERNIE, построенный Томом Флауэрсом, сейчас выставлен в качестве экспоната в Лондонском музее науки (Science Museum, London). Это тот редкий случай, когда узкоспециализированная вычислительная машина, построенная на основе военных технологий, которые применялись еще в конструкции Colossus, через несколько поколений дожила до наших дней. И, надо заметить, прекрасно решает возложенные на нее задачи.
Статья поддерживается командой Serverspace.
Serverspace — провайдер облачных сервисов, предоставляющий в аренду виртуальные серверы с ОС Linux и Windows из любой точки мира менее чем за 1 минуту. Для построения ИТ-инфраструктуры провайдер также предлагает: создание сетей, шлюзов, бэкапы, сервисы CDN, DNS, объектное хранилище S3.