Генерация случайных чисел - Random number generation

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

Генерация случайных чисел (ГСЧ) - это процесс, который через устройство генерирует последовательность числа или символы, которые нельзя разумно предсказать лучше, чем случайный шанс. Генераторы случайных чисел могут быть правдой аппаратные генераторы случайных чисел (HRNGS), которые генерируют случайные числа в зависимости от текущего значения какого-либо атрибута физической среды, который постоянно изменяется таким образом, что моделирование практически невозможно, или генераторы псевдослучайных чисел (PRNGS), которые генерируют числа, которые выглядят случайными, но на самом деле являются детерминированными, и могут быть воспроизведены, если состояние PRNG известно.

Различный применения случайности привели к развитию нескольких различных методов генерации случайный данные, некоторые из которых существуют с древних времен, среди которых есть хорошо известные "классические" примеры, включая прокатку игральная кость, подбрасывание монеты, то шаркающий из игральные карты, использование тысячелистник стебли (для гадание ) в И Цзин, а также бесчисленное множество других техник. Из-за механической природы этих методов генерация большого количества достаточно случайных чисел (что важно в статистике) требовала много работы и времени. Таким образом, результаты иногда собирались и распределялись как таблицы случайных чисел.

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

Практическое применение и использование

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

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

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

Некоторые приложения, которые на первый взгляд кажутся подходящими для рандомизация на самом деле не все так просто. Например, система, которая «случайным образом» выбирает музыкальные треки для системы фоновой музыки, должна только появиться random и может даже иметь способы управления выбором музыки: настоящая случайная система не будет иметь ограничений на один и тот же элемент, появляющийся два или три раза подряд.

«Истинные» против псевдослучайных чисел

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

Скорость, с которой может быть получена энтропия из естественных источников, зависит от измеряемых физических явлений. Таким образом, источники естественной "истинной" энтропии называются блокировка - они ограничены по скорости до тех пор, пока не будет собрано достаточно энтропии для удовлетворения спроса. В некоторых Unix-подобных системах, включая большинство Дистрибутивы Linux, файл псевдоустройства / dev / случайный будет блокироваться до тех пор, пока из окружающей среды не будет извлечено достаточное количество энтропии.[1] Из-за такого поведения блокировки большое количество операций чтения из / dev / случайный, например, заполнение накопитель на жестком диске со случайными битами, часто может работать медленно в системах, использующих этот тип источника энтропии.

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

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

Хотя генератор псевдослучайных чисел, основанный исключительно на детерминированной логике, никогда не может рассматриваться как «истинный» источник случайных чисел в самом чистом смысле этого слова, на практике их обычно достаточно даже для требовательных приложений, критичных к безопасности. Действительно, тщательно разработанные и реализованные генераторы псевдослучайных чисел могут быть сертифицированы для критических с точки зрения безопасности криптографических целей, как в случае с алгоритм тысячелистника и фортуна. Первое является основой / dev / случайный источник энтропии на FreeBSD, AIX, OS X, NetBSD, и другие. OpenBSD использует алгоритм псевдослучайных чисел, известный как arc4random.[2]

В октябре 2019 года отмечалось, что введение квантовые генераторы случайных чисел (QRNG) к моделям машинного обучения, включая нейронные сети и сверточные нейронные сети для случайного начального распределения весов и случайные леса для процессов разделения, оказали глубокое влияние на их возможности по сравнению с классическим методом генераторов псевдослучайных чисел (PRNG).[3]

Способы генерации

Физические методы

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

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

Появление широкополосных источников фотонной энтропии, таких как оптический хаос и усиленное спонтанное излучение шум, очень помогает развитию физического генератора случайных чисел. Среди них оптический хаос[4][5] имеет высокий потенциал для физического создания высокоскоростных случайных чисел из-за его высокой пропускной способности и большой амплитуды. В 2013 году был построен прототип высокоскоростного физического генератора случайных битов в реальном времени на основе хаотического лазера.[6]

Были изобретены различные творческие способы сбора этой энтропийной информации. Один из способов - запустить хеш-функцию для кадра видеопотока из непредсказуемого источника. Лаваранд использовали эту технику с изображениями ряда лавовые лампы. HotBits измеряет радиоактивный распад с Трубки Гейгера – Мюллера,[7] в то время как Random.org использует вариации амплитуды атмосферного шума, записанные с помощью обычного радио.

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

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

Вычислительные методы

Большинство случайных чисел, генерируемых компьютером, используют ГПСЧ, которые представляют собой алгоритмы, которые могут автоматически создавать длинные серии чисел с хорошими случайными свойствами, но в конечном итоге последовательность повторяется (или использование памяти неограниченно растет). Эти случайные числа подходят во многих ситуациях, но не так случайны, как числа, генерируемые из электромагнитного атмосферного шума, используемого в качестве источника энтропии.[10] Ряд значений, генерируемых такими алгоритмами, обычно определяется фиксированным числом, называемым семя. Одним из наиболее распространенных ГПСЧ является линейный конгруэнтный генератор, который использует повторение

для генерации чисел, где а, б и м большие целые числа, и следующий в Икс в виде серии псевдослучайных чисел. Максимальное количество чисел, которое может дать формула, на единицу меньше, чем модуль, м-1. Отношение рекуррентности может быть расширено до матриц, чтобы иметь гораздо более длительные периоды и лучшие статистические свойства.[11]Чтобы избежать определенных неслучайных свойств одного линейного конгруэнтного генератора, несколько таких генераторов случайных чисел с немного разными значениями коэффициента множителя, а, может использоваться параллельно с «главным» генератором случайных чисел, который выбирает из нескольких различных генераторов.[нужна цитата ]

Простой способ генерации случайных чисел с помощью ручки и бумаги - это так называемый метод среднего квадрата предложено Джон фон Нейман. Несмотря на то, что он прост в реализации, его продукция низкого качества. У него очень короткий период и серьезные недостатки, например, выходная последовательность почти всегда стремится к нулю. Недавнее нововведение - объединить средний квадрат с Последовательность Вейля. Этот метод обеспечивает получение высококачественной продукции в течение длительного периода времени. Увидеть Последовательность Вейля в среднем квадрате ГПСЧ.

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

Качество, то есть случайность таких библиотечных функций, широко варьируется от полностью предсказуемого вывода до криптографически безопасного. Генератор случайных чисел по умолчанию на многих языках, включая Python, Ruby, R, IDL и PHP, основан на Мерсенн Твистер алгоритм и не достаточно для целей криптографии, как явно указано в документации по языку. Такие библиотечные функции часто имеют плохие статистические свойства, и некоторые из них будут повторять шаблоны только после десятков тысяч испытаний. Они часто инициализируются с помощью компьютера часы реального времени как семя, поскольку такие часы обычно измеряют в миллисекундах, что намного превышает человеческие точность. Эти функции могут обеспечивать достаточную случайность для определенных задач (например, видеоигр), но не подходят там, где требуется высококачественная случайность, например, в приложениях криптографии, статистике или численном анализе.[нужна цитата ]

Источники случайных чисел более высокого качества доступны в большинстве операционных систем; Например / dev / случайный на различных разновидностях BSD, Linux, Mac OS X, IRIX и Solaris, или CryptGenRandom для Microsoft Windows. Большинство языков программирования, включая упомянутые выше, предоставляют средства для доступа к этим источникам более высокого качества.

Генерация из распределения вероятностей

Существует несколько методов генерации случайного числа на основе функция плотности вероятности. Эти методы включают в себя какое-либо преобразование однородного случайного числа. По этой причине эти методы одинаково хорошо работают при генерации как псевдослучайных, так и истинных случайных чисел. Один метод, называемый метод инверсии, включает интегрирование до области, большей или равной случайному числу (которое должно генерироваться между 0 и 1 для правильного распределения). Второй метод, называемый прием-отказ, включает выбор значений x и y и проверку того, больше ли функция x значения y. Если это так, значение x принимается. В противном случае значение x отклоняется, и алгоритм пытается снова.[12][13]

Людьми

Генерация случайных чисел также может выполняться людьми в форме сбора различных входных данных от конечные пользователи и использовать их в качестве источника рандомизации. Тем не менее, большинство исследований обнаруживают, что люди имеют некоторую степень неслучайности при попытке создать случайную последовательность, например, цифры или буквы. Они могут слишком часто чередовать варианты выбора по сравнению с хорошим генератором случайных чисел;[14] таким образом, этот подход не получил широкого распространения.

Постобработка и статистические проверки

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

Сгенерированные случайные числа иногда подвергаются статистическим тестам перед использованием, чтобы убедиться, что основной источник все еще работает, а затем подвергаются последующей обработке для улучшения их статистических свойств. Примером может быть TRNG9803[15] аппаратный генератор случайных чисел, который использует измерение энтропии в качестве аппаратного теста, а затем обрабатывает случайную последовательность с помощью потокового шифра регистра сдвига. Обычно сложно использовать статистические тесты для проверки сгенерированных случайных чисел. Ван и Николь[16] предложил метод статистического тестирования на основе расстояния, который используется для выявления слабых сторон нескольких случайных генераторов. Ли и Ван[17] предложил метод проверки случайных чисел на основе лазерных источников хаотической энтропии с использованием свойств броуновского движения.

Прочие соображения

Случайные числа, равномерно распределенные между 0 и 1, можно использовать для генерации случайных чисел любого желаемого распределения, передав их через обратный кумулятивная функция распределения (CDF) желаемого распределения (см. Выборка с обратным преобразованием ). Обратные CDF также называют квантильные функции. Чтобы создать пару статистически независимый стандартный нормально распределенный случайные числа (Икс, у), можно сначала сгенерировать полярные координаты (р, θ), где р2~χ22 и θ~ЕДИНАЯ (0,2π) (увидеть Преобразование Бокса – Мюллера ).

Некоторые ГСЧ от 0 до 1 включают 0, но исключают 1, в то время как другие включают или исключают оба.

Выходы нескольких независимых RNG могут быть объединены (например, с помощью побитового XOR операция), чтобы обеспечить комбинированный ГСЧ, по крайней мере, такой же хороший, как лучший используемый ГСЧ. Это называется программное отбеливание.

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

Последовательности с низким расхождением в качестве альтернативы

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

Мероприятия и демонстрации

Следующие сайты предоставляют образцы случайных чисел:

  • В SOCR страницы ресурсов содержат ряд практических интерактивных действий и демонстраций генерации случайных чисел с помощью Java-апплетов.
  • Группа квантовой оптики в ANU генерирует случайные числа из квантового вакуума. Примеры случайных чисел доступны на их странице исследования квантового генератора случайных чисел.
  • Random.org предоставляет случайные числа, которые получены из случайности атмосферного шума.
  • Служба квантового генератора случайных битов в Институт Руджера Бошковича собирает случайность из квантового процесса фотонной эмиссии в полупроводниках. Они предоставляют множество способов получения данных, включая библиотеки для нескольких языков программирования.
  • Группа Технологического университета Тайюань генерирует случайные числа, полученные с помощью хаотического лазера. Образцы случайного числа доступны в их службе генератора физических случайных чисел.

Бэкдоры

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

Сообщается, что АНБ вставило бэкдор в NIST проверенный криптографически безопасный генератор псевдослучайных чисел Двойной ЭК DRBG. Если, например, с помощью этого генератора случайных чисел создается SSL-соединение, то согласно Мэтью Грин это позволило бы NSA определять состояние генератора случайных чисел и, таким образом, в конечном итоге иметь возможность читать все данные, отправленные через соединение SSL.[18] Несмотря на то, что было очевидно, что Dual_EC_DRBG был очень плохим генератором псевдослучайных чисел, возможно, задолго до того, как бэкдор АНБ был подтвержден в 2013 году, он активно использовался на практике до 2013 года, например, известной охранной компанией. RSA Безопасность.[19] Впоследствии были обвинения в том, что RSA Security сознательно вставила бэкдор АНБ в свои продукты, возможно, как часть Программа Bullrun. RSA отрицает намеренное использование бэкдора в своих продуктах.[20]

Также было высказано предположение, что аппаратные ГСЧ могут быть тайно модифицированы, чтобы иметь меньшую энтропию, чем заявлено, что сделает шифрование с использованием аппаратного ГСЧ уязвимым для атак. Один такой метод, который был опубликован, работает путем изменения легирующей маски чипа, которая не может быть обнаружена оптическим обратным проектированием.[21] Например, для генерации случайных чисел в Linux считается неприемлемым использование Intel RDRAND аппаратный ГСЧ без смешивания вывода RDRAND с другими источниками энтропии для противодействия любым бэкдорам в аппаратном ГСЧ, особенно после раскрытия программы NSA Bullrun.[22][23]

В 2010, розыгрыш лотереи США был сфальсифицирован директором по информационной безопасности Межгосударственная лотерейная ассоциация (MUSL), незаметно установивший бэкдор вредоносное ПО на защищенном компьютере ГСЧ MUSL во время текущего обслуживания.[24] Во время взломов человек выиграл общую сумму в 16 500 000 долларов, правильно угадав числа несколько раз в год.

Рандомизация разметки адресного пространства (ASLR), защита от Rowhammer и связанных атак на физическое оборудование микросхем памяти была признана VUSec неадекватной в начале 2017 года. Алгоритм случайных чисел, если он основан на регистре сдвига, реализованном на оборудовании, предсказуем при достаточно больших значениях p и может быть реконструирован с достаточной вычислительной мощностью (Взлом грубой силы Это также косвенно означает, что вредоносные программы, использующие этот метод, могут работать как на графических процессорах, так и на процессорах, если они закодированы для этого, даже используя графический процессор для нарушения ASLR на самом процессоре.[25]

Смотрите также

использованная литература

  1. ^ случайный (4) – Linux Программиста Руководство по эксплуатации - Специальные файлы
  2. ^ arc4random (3) – OpenBSD Библиотечные функции Руководство по эксплуатации
  3. ^ Bird, Jordan J .; Экарт, Анико; Фариа, Диего Р. (28 октября 2019 г.). «О влиянии генераторов псевдослучайных и квантово-случайных чисел на мягкие вычисления». Мягкие вычисления. ООО "Спрингер Сайенс энд Бизнес Медиа". 24 (12): 9243–9256. Дои:10.1007 / s00500-019-04450-0. ISSN  1432-7643.
  4. ^ Ли, Пу; Ван, Юнь-Цай; Чжан, Цзянь-Чжун (13.09.2010). "Полностью оптический быстрый генератор случайных чисел". Оптика Экспресс. 18 (19): 20360–20369. Bibcode:2010OExpr..1820360L. Дои:10.1364 / OE.18.020360. ISSN  1094-4087. PMID  20940928.
  5. ^ Ли, Пу; Сунь Юаньюань; Лю, Сянлянь; И, Сяоган; Чжан, Цзяньго; Го, Сяоминь; Го, Яньцян; Ван, Юнькай (15.07.2016). «Физический генератор случайных битов, полностью основанный на фотонике». Письма об оптике. 41 (14): 3347–3350. Bibcode:2016OptL ... 41.3347L. Дои:10.1364 / OL.41.003347. ISSN  1539-4794. PMID  27420532.
  6. ^ Ван, Анбанг; Ли, Пу; Чжан, Цзяньго; Чжан, Цзяньчжун; Ли, Лей; Ван, Юнькай (2013-08-26). «Высокоскоростной физический генератор случайных битов в реальном времени со скоростью 4,5 Гбит / с» (PDF). Оптика Экспресс. 21 (17): 20452–20462. Bibcode:2013OExpr..2120452W. Дои:10.1364 / OE.21.020452. ISSN  1094-4087. PMID  24105589. S2CID  10397141.
  7. ^ Уокер, Джон. «HotBits: настоящие случайные числа». Получено 2009-06-27.
  8. ^ Халприн, Ран; Наор, Мони. «Игры на извлечение случайности» (PDF). Департамент компьютерных наук и прикладной математики, Институт Вейцмана. Получено 2009-06-27. Цитировать журнал требует | журнал = (Помогите)
  9. ^ TrueCrypt Foundation. «Руководство по TrueCrypt для начинающих, часть 3». Получено 2009-06-27.
  10. ^ "RANDOM.ORG - Служба истинных случайных чисел". www.random.org. Получено 2016-01-14.
  11. ^ "Генераторы псевдослучайных чисел высокой размерности". Получено 2018-11-21.
  12. ^ MathWorks. «Общие методы генерации». Получено 2011-10-13.
  13. ^ Группа численных алгоритмов. «G05 - Генераторы случайных чисел» (PDF). Руководство библиотеки NAG, Mark 23. Получено 2012-02-09.
  14. ^ В. А. Вагенаар (1972). «Генерация случайных последовательностей людьми: критический обзор литературы». Психологический бюллетень. 77 (1): 65–72. CiteSeerX  10.1.1.211.9085. Дои:10,1037 / ч0032060.
  15. ^ Демштедт, Б. (2009). "TRNG9803 Генератор истинных случайных чисел". Производитель: www.TRNG98.se.
  16. ^ Ван, Юнге (2014). «Статистические свойства псевдослучайных последовательностей и эксперименты с PHP и Debian OpenSSL». Компьютерная безопасность - ESORICS 2014. Конспект лекций по информатике. 8712. Гейдельберг: Springer LNCS. С. 454–471. Дои:10.1007/978-3-319-11203-9_26. ISBN  978-3-319-11202-2.
  17. ^ Ли, Пу; И, Сяоган; Лю, Сянлянь; Ван, Юнькай; Ван Юнге (2016-07-11). «Броуновские свойства движения оптоэлектронных генераторов случайных битов на основе лазерного хаоса». Оптика Экспресс. 24 (14): 15822–15833. Bibcode:2016OExpr..2415822L. Дои:10.1364 / OE.24.015822. ISSN  1094-4087. PMID  27410852.
  18. ^ Мэтью Грин (18.09.2013). «Множество недостатков Dual_EC_DRBG».
  19. ^ Мэтью Грин (2013-09-20). «RSA предупреждает разработчиков не использовать продукты RSA».
  20. ^ «Мы не используем бэкдоры в наших криптопродуктах, - сообщает RSA клиентам». Ars Technica. 2013-09-20.
  21. ^ «Исследователи могут вставить необнаруживаемого трояна в процессоры Intel Ivy Bridge». Ars Technica. 2013-09-18.
  22. ^ Теодор Ц'О. «Я так рад, что сопротивлялся давлению инженеров Intel, чтобы позволить / dev / random полагаться только на инструкцию RDRAND». Гугл плюс.
  23. ^ Теодор Ц'О. "Re: [PATCH] / dev / random: недостаточная энтропия на многих архитектурах". LWN.
  24. ^ Нестель, М. (7 июля 2015 г.). «Внутри самой большой аферы с лотереей». Ежедневный зверь. Получено 10 июля, 2015.
  25. ^ «АнЦ - ВУСЕК». Получено 13 июля 2018.

дальнейшее чтение

внешние ссылки