![](https://habrastorage.org/webt/pd/z5/af/pdz5afr5hxvyzjpldwwyjtjaa-s.png)
Что такое генератор случайных чисел? Несколько строчек кода, а в некоторых языках программирования — так и вовсе одна. Удивительно, но факт: в 1957 году генератор случайных чисел занимал небольшое помещение, поскольку именно для этой цели был построен специальный компьютер. И построен он был не просто так, а для решения важной практической задачи. Разрабатывал его, к слову, Томас Флауэрс — человек, создававший во время Второй мировой войны вычислительные машины, которые расшифровывали секретные сообщения немецкой армии. Однако обо всем по порядку.
Кто купил билетов пачку…
В 1956 году министр финансов Великобритании Гарольд Макмиллан задумался о способах немного повысить благосостояние подданных Ее Королевского Величества, а заодно и пополнить государственную казну. Результатом его размышлений стало появление так называемых «премиальных облигаций». В отличие от обычных государственных ценных бумаг премиальные облигации не предлагали какого-либо фиксированного купонного дохода. Вместо этого их обладатели становились участниками ежемесячной лотереи, в которой разыгрывался процент по этим самым облигациям и множество денежных призов. Размер призов варьировался от 25 до 1 000 000 фунтов стерлингов, при этом полученные таким образом доходы не облагались налогами. Облигация могла принимать участие в ежемесячных розыгрышах спустя 30 дней после ее приобретения и вплоть до даты ее погашения, а государство обязалось выкупить эти ценные бумаги по номинальной цене по истечении срока их действия.
![](https://habrastorage.org/webt/tl/be/ys/tlbeysjp-hymg6fgndy80ha9pok.jpeg)
Премиальные облигации
Этот оригинальный инвестиционный инструмент был торжественно представлен на Лондонской бирже 1 ноября 1956 года, и самую первую премиальную облигацию приобрел у генерального почтмейстера доктора Чарльза Хилла лорд-мэр Лондона сэр Катберт Экройд, обогатив бюджет Великобритании на 1 фунт стерлингов. Новинка очень понравилась жителям туманного Альбиона, и вскоре премиальные облигации стали пользоваться неизменным спросом. К концу 1956 года было продано около 50 миллионов облигаций, каждая из которых имела уникальный серийный номер. На сегодняшний день такими ценными бумагами владеют более 24 миллионов англичан.
В ходе лотерей, где определялись счастливчики, требовалось случайным образом выбирать большое количество серийных номеров выигравших облигаций, причем таким образом, чтобы ни у кого не возникло даже малейших сомнений в беспристрастности алгоритма. Все-таки речь шла о миллионах фунтов стерлингов. Иными словами, простых лототронов с пронумерованными шариками тут оказалось явно недостаточно. И британское правительство решило построить для этих целей специальный Лотерейный Компьютер, который эффективно решал бы столь непростую задачу. Тут-то чиновники и вспомнили про талантливого инженера Томаса Флауэрса, считавшегося одним из самых продвинутых компьютерщиков Англии в 1956 году. Тем более, ранее он уже успешно работал на британское правительство, и не просто на правительство, а на Министерство обороны и военную разведку.
Неслучайная случайность
Общеизвестно, что числа, генерируемые с помощью функций вроде «rand();» в С++, называют «псевдослучайными». И это «жу-жу-жу», то есть, приставка «псевдо-», тут неспроста. Последовательность таких чисел имеет все свойства случайной, однако она формируется по определенному математическому алгоритму, подчиняющемуся ряду закономерностей, а сам генератор имеет ограниченное число внутренних состояний. Из-за этого на достаточно больших промежутках времени созданная таким генератором последовательность чисел может повториться.
Для генерации номеров, выигравших в государственной лотерее облигаций, требовалось устройство, способное выдавать действительно случайные последовательности, которые невозможно предугадать, даже зная алгоритм. Кроме того, в случае с премиальными облигациями, имеющими многозначные серийные номера, возникла необходимость генерировать до 100 миллионов случайных значений в ходе каждого розыгрыша. Иными словами, правительству Великобритании был нужен генератор случайных чисел прямо-таки промышленного масштаба.
![](https://habrastorage.org/webt/7e/ny/zb/7enyzbicnzzx1ak2shf9oubhvgs.jpeg)
Том Флауэрс
Задачу придумать такую машину поставили перед Томом Флауэрсом и примкнувшем к нему инженером Гарри Фенсом, также трудившимся в исследовательской лаборатории почтовой службы в Доллис-Хилл. Ради экономии времени и сил Флауэрс взял за основу нового компьютера давно проверенный Colossus, разработкой которого он занимался в годы войны. Нужно было только добавить к нему самую важную деталь — генератор случайных значений, причем в основе случайности должен лежать какой-то хаотичный физический процесс, результат действия которого невозможно предсказать никаким образом. Только вот какой?
«А внутри у ней — неонка!»
Поразмыслив, Флауэрс решил построить генератор на основе ламп, заполненных неоном. Такие лампы светятся красивым красным светом, но их главная особенность заключается отнюдь не в этом. Если приложить к неоновой лампе высокое напряжение, внутри нее возникает электрический ток, создаваемый потоком заряженных частиц между электродами. По пути электроны сталкиваются с атомами неона, отчего их траектория движения становится хаотичной, и на выходе получается электрический ток случайной величины. Этот сигнал, пропущенный через усилитель, подавался на импульсный генератор. Придуманная Флауэрсом схема выдавала до 3000 электрических импульсов в секунду, причем каждую секунду количество этих импульсов было разным. Получившаяся конструкция служила генератором «шума» для компьютера.
![](https://habrastorage.org/webt/1o/3e/wk/1o3ewkvohev7x4ncbd9bgqs1tgk.jpeg)
Принципиальная схема генератора «шума» Флауэрса
Количество генерируемых схемой импульсов колебалось вокруг некоего среднего значения, поэтому его нельзя было использовать в качестве по-настоящему случайного числа. Вместо этого из полученного при подсчете импульсов значения компьютер извлекал младший разряд и передавал его на «кольцевой счетчик», который выполнял с ним операцию mod по модулю 6, 10 или 24. При этом счетчик каждый раз начинал отсчет с разного значения, что добавляло результату дополнительный элемент случайности. Счетчики управлялись импульсами, подаваемыми генератором шума. Фактически, вся эта система работала, как некий эквивалент вращающегося колеса рулетки в казино — там, где рулетка останавливалась, и получалось случайное число.
Компьютер получил наименование ERNIE (производное от «A Random Number Generator»). Поскольку серийный номер облигации состоял из 7 цифр и двух букв, в конструкции ЭВМ использовалось девять кольцевых счетчиков. Семь из них генерировали цифры от 0 до 9, а последние два выдавали случайным образом одно из 22 значений, соответствующих символам английского алфавита (литеры «O», «I» и «U» в номерах облигаций не использовались). Чтобы избежать ситуации, при которой полученное число не было бы случайным из-за перегорания неоновой лампы, все «неонки» в конструкции ERNIE Флауэрс продублировал и смонтировал их на плате парами. Полученные в результате своей работы серийные номера компьютер выводил на телетайпную ленту.
![](https://habrastorage.org/webt/w9/jl/wa/w9jlwasabbvtfzyjhrf3c3orx8s.jpeg)
«Лотерейный» компьютер ERNIE
ERNIE был способен выдавать один случайный номер выигрышной облигации каждые две-три секунды, а всего — около 2000 номеров в час. В ходе первого розыгрыша компьютер сгенерировал 60 000 серийных номеров, позволивших выбрать всего 23 000 победителей. Разница объясняется тем, что номера премиальных облигаций не были последовательными — существовало значительное количество номеров, которые не соответствовали проданным ценным бумагам. Все выбранные ERNIE номера тщательно проверялись актуарным департаментом правительства Великобритании (актуарий – специалист в области экономики и финансов, решающий задачи финансовой безопасности и оценки рисков). Целью проверки было убедиться в том, что номера действительно случайные, и в ходе розыгрыша не произошло никаких подтасовок или мошенничества. Иными словами, британцы подошли к вопросу серьезно, с поистине немецкой педантичностью. Сам компьютер ERNIE, к слову, обошелся королевской казне в 25 000 фунтов стерлингов, но эти затраты многократно и довольно быстро окупились.
Вкалывают роботы, счастлив человек
Идея проведения розыгрышей с использованием ЭВМ пришлась британцам по вкусу — в 1957 году столь яркое проявление технического прогресса казалось настоящей научной фантастикой. А сам компьютер ERNIE превратился в элемент местного фольклора. Англичане писали ему письма и присылали поздравительные открытки на Рождество, а в сувенирных лавках продавались фарфоровые копилки в виде симпатичного робота по имени ERNIE и шкатулки в виде него же — считалось, что если хранить облигации в такой «статуетке», их владельцу повезет и они обязательно окажутся выигрышными.
![](https://habrastorage.org/webt/ql/4q/ao/ql4qaojef2x5alqwctywtaxpgl0.jpeg)
Надпись на шкатулке гласит: «счастливая коробка для облигаций 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.
![](https://habrastorage.org/webt/yu/m0/up/yum0upvqpmb1rcchboht0xncbsw.png)
Комментарии (8)
vadimk91
26.10.2023 11:51+4В 70е помню огромные таблицы выигравших облигаций, которые печатали в газетах. Но наша семья если что-то и выигрывала, то единичные разы в пределах 1 рубля. Теперь стало интересно, как генерировали номера победителей в Советском Союзе.
NeoCode
26.10.2023 11:51А в современных процессорах/материнках есть встроенные аппаратные генераторы случайных чисел? (хотя-бы на основе "теплового шума")?
nixtonixto
26.10.2023 11:51У Intel и AMD есть встроенный DRNG, даже в STM32F4 и старше есть TRNG на базе аналогового генератора тока.
AWRDev
У Cloudflare тоже оригинальный подход к этому делу)
Случайность на страже криптографии: как Cloudflare использует лава-лампы, маятники и распад урана для шифрования трафика / Хабр (habr.com)