Если кто из моих читателей, подписчиков и коллег по увлечению охотой не в курсе, - по специальности я программист. И иногда бывает, что что-то такое накипело в душе, или вспомнилось, к месту или не к месту, и хочется, не то, что бы поделиться, а хотя бы просто для себя записать. Ну вот и сегодня, пока с одной задачкой "боролся" вспомнилась история, о которой мало кто знает. Если, уже, вообще кто-то знает. Так что, запишу, пока помню, так сказать, для потомков...
Было это давно, "на заре вхождения компьютеров в жизнь обычную из жизни оборонной и научной". Примерно годы этак в девяностые, в самом их начале. Или, может, в самом конце восьмидесятых. Появилась информация о некоем гранте на разработку Программного Обеспечения для изготовления (генерации) криптографических ключей шифрования в качестве Электронной Цифровой Подписи (ЭЦП). А точнее, нужно было разработать алгоритм генерации случайных чисел, на основе которого работает та самая генерация ЭЦП.
Тут надо, наверное, для не посвященных, сделать небольшое отступление. Дело в том, что то, что умеют делать компьютеры программно - это генерация псевдо-случайных чисел (последовательностей символов и т.п.). Т.е. если известен шаблон, некая математическая модель, на основе которой сгенерировано псевдослучайное число, то это число можно повторить. Подробнее об этом в Википедии, если кому интересно.
Так вот, по сути, те, кто выдавал грант (или, скорее, те, кто хотел его получить, т.е. "герои" истории), видимо хотели создать максимально сложный шаблон, сложную модель, которую было бы трудно или невозможно воспроизвести, т.е. взломать. В общем, нашлись некие "соискатели" гранта (естественно, одни из многих) - компьютерная фирма "Копыта и клавиатуры", которые решили, что считать себя умнее других - глупо, а вот хитрее других - вполне себе можно. И заявили они конкурс на создание генератора случайных чисел. И оповестили об этом конкурсе все технические учебные заведения своей страны, в которых обучали на программистов. При чем, сделали всё достаточно хитрым образом.
Они сделали достаточно простенькую игру - стрельба по тарелочкам. Т.е. игрок двигает мышкой, персонаж с ружьём на экране поворачивается и "целится ружьём" в ту или иную сторону. При нажатии кнопки на мыши происходит "выстрел" и если траектория "ружья" и "тарелочки" совпали, засчитывается попадание. К этой игре участники конкурса могли подключить свой программный модуль, в котором и реализовывали свой генератор случайных чисел. Параметры присоединения были простые: генератор должен был в определенный промежуток времени после последнего выстрела случайным образом выдавать номер одной из пяти точек "вылета" и направление "полёта" тарелочки. А "жюри" со своей стороны, имели в программе-игрушке "типа шпиёнский модуль", который отслеживал шаблон (модель) по которому работал генератор конкурсанта.
Конкурс был долгий, он длился почти год. И вот, финал, в финале три конкурсанта. Два из них показали архисложные шаблоны (модели) генерации, но, всё равно, именно псевдослучайных чисел. А вот третий... Третий сделал генератор именно случайных, а не псевдослучайных чисел. И модель этого генератора никак не поддавалась "шпиёнскому модулю". Вот только был у третьего один изъян: почему-то иногда генератор не срабатывал вовсе. И всегда "не срабатывания" происходили, когда игрок не водил мышкой в ожидании "вылета тарелочки". А две архисложные модели (и одна не архи, но всё равно сложная - подтянули еще одного победителя полуфинала), дающие шанс на получение гранта, у "жюри" уже были. А разбираться с третьим было лень - ведь они же хитрые, а студенты умные, в сумме - ну просто обязаны "весь мир нагнуть". Ну и дисквалифицировали "Копыта и клавиатуры" третьего в своем "конкурсе" с формулировкой "генератор работает с ошибками". Быстренько объявили итоги конкурса, выдали "победителям" весьма "богатые", по тем временам, "призовые" в $100 за первое место, $50 за второе и $20 за третье.
Спустя некоторое время после завершения "конкурса", которое потребовалось на оформление заявки, хитро-предприимчивые "Копыта и клавиатуры" подали заявку на грант и благополучно его не получили - грант был получен в другой стране, маленькой компанией, состоящей всего из одного программиста-эмигранта.
А через год эта маленькая компания выпустила на рынок программного обеспечения самостоятельный программный модуль по генерации ЭЦП. И этот программный модуль гарантировал создание случайной последовательности именно на программном уровне. Т.е. он реально генерировал не псевдослучайные, а случайные последовательности. А что бы это работало, во время генерации ЭЦП от пользователя (оператора) программы требовалось... Правильно! Всего-то шевелить мышкой!
Суть ситуации в том, что действительно случайное число, последовательность, в отличие от компьютера может выдать человек. Сколько бы людей ни шевелили мышками, сколь долго бы они этим шевелением ни занимались, никогда два человека не проведут мышкой по одинаковой траектории. Так что генератор случайных чисел - это человек. А задача программы состоит в том, что бы считать это случайное число с действия человека и на основе последовательности этих действительно случайных чисел создать ту самую необходимую, абсолютно уникальную ЭЦП.
Мораль? А не будет морали. Каждый её, мораль, для себя сам придумает. И она будет единственно верной. Для каждого. Потому что своя...
На самом деле, я не знаю, на сколько эта история правдива. Лично я в первый и единственный раз слышал её за "рюмкой чая" (далеко не первой в том отрезке времени) от одного из "членов жюри" из той самой компании "Копыта и клавиатуры". Ну и с уклоном в "какие мы были идиоты" и "какой он нехороший, что ничего нам не объяснил" - если бы не эти два обстоятельства, "мы бы щаз мульёнерамы были бы! Долларавыми!".
Вот как-то так. Если что написал не правильно по теории случайных чисел и методах их генерации - извиняйте, не знаю я этой теории :) своими словами писал, может и напутал где чего. Но мысль, думаю, донес. Надеюсь на это, по крайней мере.
А кто, всё-таки, прочитал - тому спасибо!