Что является самым безопасным семенем для генерации случайных чисел?
Каковы наиболее безопасные источники энтропии для генерации генератора случайных чисел? Этот вопрос является независимым от языка и платформы и применяется к любой машине в сети. В идеале я ищу источники, доступные для машины в облачной среде или сервере, предоставляемые хостинговой компанией.
Следует иметь в виду две важные недостатки. Использование времени для отправки генератора случайных чисел является нарушением CWE-337 . Использование небольшого пространства семян было бы нарушением CWE-339 .
- Зачем использовать class C # System.Random вообще, а не System.Security.Cryptography.RandomNumberGenerator?
- Регистрация нескольких хранилищ ключей в JVM
- Шифрование с помощью модуля Node.js Crypto и расшифровка с помощью Java (в приложении для Android)
- Что случилось с расшифровкой шифрования nodejs?
- Шифровать и расшифровать строку в C #?
- Использование SHA1 и RSA с java.security.Signature против MessageDigest и Cipher
- Проблема шифрования RSA
- Лучший способ создать ключи AES, чем посев SecureRandom
- Использование AES-шифрования в C #
- Обработка криптовых исключений
- Шифрование шифрования RSA в iphone
- Генерация ключей шифрования / дешифрования Java openssl
- C # RSA-шифрование / дешифрование с передачей
Вот несколько мыслей. Если вы нетерпеливы, переходите к заключению, в конце.
1. Что такое безопасное семя?
Безопасность определяется только относительно модели атаки. Мы хотим здесь последовательность из n бит, которая имеет n бит энтропии в отношении злоумышленника: простыми словами, что любое из возможных 2 n значений для этой последовательности равновероятно с точки зрения злоумышленника.
Это модель, которая относится к информации, доступной злоумышленнику. Приложение, которое генерирует и использует семена (обычно в PRNG), знает точное семя; независимо от того, является ли семя «безопасным», не является абсолютным свойством семени или даже процесса генерации семян. Важно то, сколько информации, которую атакующий имеет о процессе генерации. Этот уровень информации сильно варьируется в зависимости от ситуации; например, в многопользовательской системе (например, Unix-like, с аппаратным разделением приложений), точное время доступа к памяти может показать информацию о том, как номинально защищенный процесс считывает память. Даже удаленный злоумышленник может получить такую информацию; это было продемонстрировано (в лабораторных условиях) при шифровании AES (типичные реализации AES используют внутренние таблицы с шаблонами доступа, которые зависят от ключа, атакующий заставляет кэш пропускает и обнаруживает их через точное время ответов сервера).
Необходимо учитывать время жизни семян. Семя безопасно до тех пор, пока злоумышленник остается неизвестным; это свойство должно быть истинным впоследствии. В частности, невозможно извлечь семена из выдержек последующего вывода PRNG. В идеальном случае даже получение полного состояния PRNG в какой-то момент не должно давать никаких указаний относительно любых бит, которые PRNG производил заранее.
То, что я хочу сделать здесь, состоит в том, что семя «безопасно», только если оно используется в контексте, где он может оставаться защищенным, что более или менее подразумевает криптографически безопасный PRNG и некоторое хранилище, устойчивое к несанкционированному хранению. Если такое хранилище доступно, то самым надежным семенем является тот, который был создан один раз , давным-давно, и используется в безопасном PRNG, размещенном в защищенном от несанкционированного доступа аппаратном обеспечении.
К сожалению, такое аппаратное обеспечение дорого (оно называется HSM и стоит несколько сотен или тысяч долларов), и эта стоимость обычно оказывается трудно оправданной (плохое семя не помешает работе системы, это обычная проблема непроверки безопасности). Следовательно, принято использовать «преимущественно программные» решения. Поскольку программное обеспечение не подходит для обеспечения долговременного конфиденциального хранения, время жизни семян условно сокращается: периодически получается новое семя. В Fortuna такое пересыщение должно происходить, по крайней мере, раз в 1 мегабайт генерируемых псевдослучайных данных.
Подводя итог, в настройке без HSM безопасное семя является тем, которое можно получить относительно легко (поскольку мы будем делать это довольно часто), используя данные, которые не могут быть собраны злоумышленником.
2. Смешивание
Случайные источники данных не создают хороших равномерных битов (каждый бит имеет значение 1 с вероятностью ровно 0,5 , а битовые значения не зависят друг от друга). Вместо этого случайные источники генерируют значения в наборах, специфичных для источника. Эти значения могут быть закодированы как последовательности бит, но вы не получаете ваши деньги: чтобы иметь n бит энтропии, вы должны иметь значения, которые при кодировании используют намного больше, чем n бит.
Используемый здесь криптографический инструмент представляет собой PRF, который принимает вход произвольной длины и производит n- битный вывод. Криптографически защищенный PRF такого типа моделируется как случайный oracle : в краткосрочной перспективе нецелесообразно outlookировать что-либо о выходе oracleа на данном входе, не пытаясь его выполнить.
Прямо сейчас у нас есть hash-функции . Функции хеширования должны выполнять несколько свойств безопасности, а именно: устойчивость к прообразам, второму прообразу и столкновениям. Обычно мы анализируем hash-функции, пытаясь понять, как они отходят от модели случайного oracleа. Здесь есть важный момент: PRF, который следует за случайной моделью oracleа, будет хорошей hash-функцией, но могут быть хорошие hash-функции (в смысле сопротивления прообразам и столкновениям), которые тем не менее легко отличить от случайного oracleа , В частности, функции SHA-2 (SHA-256, SHA-512 …) считаются защищенными, но отходят от случайной модели oracleа из-за «атаки расширения длины» (учитывая h (m) , это можно вычислить h (m || m ‘) для частично ограниченного сообщения m’ без знания m ). Атака расширения длины не создает каких-либо ярлыков для создания прообразов или коллизий, но это показывает, что эти hash-функции не являются случайными oracleами. Для соревнований SHA-3 NIST заявила, что кандидаты не должны допускать такого «продления длины».
Следовательно, шаг смешивания непросто. Лучше всего по-прежнему использовать SHA-256 или SHA-512 и переключиться на SHA-3, когда он будет выбран (это должно произойти в середине 2012 года).
3. Источники
Компьютер является детерминированной машиной. Чтобы получить некоторую случайность, вы должны смешиваться в результате некоторых мер физического мира.
Философская нота: в какой-то момент вам нужно доверять умным парням, тем, кто может носить лабораторные халаты или получать деньги за фундаментальные исследования. Когда вы используете хеш-функцию, такую как SHA-256, на самом деле вы доверяете кучу криптографов, когда они говорят вам: мы искали недостатки, тяжело, и уже несколько лет, и не нашли их. Когда вы используете разлагающийся бит радиоактивной материи с счетчиком Гейгера, вы доверяете некоторым физикам, которые говорят: мы очень сильно искали способы предсказать, когда уйдет следующее ядерное kernel, но мы их не нашли. Обратите внимание, что в этом конкретном случае «физики» include таких людей, как Беккерель, Резерфорд, Бор или Эйнштейн, а «реальный труд» означает «более ста лет накопленных исследований», поэтому вы не совсем здесь, в нетронутой территории. Тем не менее, все еще есть немного веры в безопасность.
На некоторых компьютерах уже есть аппаратное обеспечение, которое генерирует случайные данные (т. Е. Использует и измеряет физический процесс, который, насколько может сказать физик, достаточно случайен). VIA C3 (линейка x86-совместимого CPU) имеет такое оборудование. Как ни странно, Commodore 64, домашний компьютер 30 лет назад, также имел аппаратный RNG (или, по крайней мере, говорит Википедия ).
Запрещая специальное оборудование, вы должны использовать любые физические события, которые вы можете получить. Как правило, вы будете использовать нажатия клавиш, входящие пакеты ethernet, движения мыши, доступ к жесткому диску … каждое событие поставляется с некоторыми данными и происходит в измеримый момент (современные процессоры имеют очень точные часы, благодаря счетчикам циклов). Эти моменты и данные о событиях могут накапливаться как источники энтропии. Это намного проще для самой операционной системы (которая имеет прямой доступ к оборудованию), чем для приложений, поэтому обычным способом сбора семени является запрос операционной системы (в Linux это называется /dev/random
или /dev/urandom
[у обоих есть преимущества и проблемы, выберите ваш яд], в Windows вызовите CryptGenRandom()
).
Крайний случай – до 1.2 Java-апплетов, до добавления java.security.SecureRandom
; поскольку Java очень эффективна для изоляции кода приложения от аппаратного обеспечения, получение случайного семени было непростой задачей. Обычное решение заключалось в том, чтобы два или три streamа выполнялись одновременно и с переключением streamов безумно, так что количество переключений streamов в секунду было несколько случайным (по сути, это пытается извлечь случайность с помощью времени действий планировщика ОС, которые зависят о том, что также происходит на машине, включая связанные с оборудованием события). Это было довольно неудовлетворительно.
Проблема со связанными со временем мерами заключается в том, что злоумышленник также знает, что такое текущее время. Если атакующий имеет аппликативный доступ к машине, он также может прочитать счетчик циклов.
Некоторые люди предложили использовать звуковые карты в качестве источников «белого шума», установив усилитель на максимальный уровень (в то время как даже у серверов есть звук). Другие утверждают, что для включения веб-камер (мы знаем, что видеоролики веб-камеры «шумные», и это хорошо для случайности, даже если веб-камера стоит на стене); но серверы с веб-камерами не являются общими. Вы также можете пинговать внешний сетевой сервер (например, www.google.com
) и посмотреть, сколько времени потребуется, чтобы вернуться (но это может наблюдаться злоумышленником, шпионящим по сети).
Красота шага смешения с хеш-функцией заключается в том, что энтропия может накапливаться; нет никакого вреда в добавлении данных, даже если эти данные не являются случайными. Просто как можно больше через хеш-функцию. Хеш-функции довольно быстра (хорошая реализация SHA-512 будет обрабатывать более 150 МБ / с на обычном ПК с использованием одного ядра), и сеяние часто случается.
4. Вывод
Используйте HSM . Они стоят несколько сотен или тысяч долларов, но разве ваши секреты не стоят гораздо больше? HSM включает аппаратное обеспечение RNG, запускает алгоритм PRNG и сохраняет семя с сопротивлением тамперу. Кроме того, большинство HSM уже сертифицированы в отношении различных национальных правил (например, FIPS 140 в США и уровней EAL в Европе).
Если вы настолько дешевы, что не будете покупать HSM, или если вы хотите защитить данные, которые на самом деле не очень полезны, тогда создайте криптографически безопасный PRNG, используя семя, полученное путем hashирования множества физических мер. Все, что исходит от какого-либо оборудования, должно быть hashировано вместе с мгновенным (чтение «счетчиком циклов»), по которому эти данные были получены. Здесь вы должны записывать данные на мегабайт. Или, еще лучше, не делайте этого: просто используйте возможности, предлагаемые вашей операционной системой, которая уже включает такой код.
Наиболее безопасным семенем является тот, который имеет самый высокий уровень энтропии (или большее количество бит, которые невозможно предсказать). Время – плохое семя, потому что оно имеет небольшую энтропию (т. Е. Если вы знаете, когда произошла транзакция, вы можете угадать временную метку с точностью до нескольких бит). Источники аппаратной энтропии (например, от процессов распада) очень хороши, потому что они дают один бит энтропии для каждого бит семени.
Обычно для большинства потребностей аппаратный источник нецелесообразен, поэтому это позволяет полагаться на смешивание нескольких источников энтропии низкого качества для получения более высокого. Обычно это делается путем оценки количества бит энтропии для каждого образца и последующего сбора достаточного количества выборок, чтобы пространство поиска для источника энтропии было достаточно большим, чтобы злоумышленник не искал поиск (128 бит – хорошее правильное правило ).
Некоторые источники, которые вы можете использовать: текущее время в микросекундах (как правило, очень низкая энтропия в 1/2 бит в зависимости от разрешения и насколько легко это возможно для злоумышленника), время между посещениями пользовательских интерфейсов и т. Д.
Источники операционных систем, такие как / dev / random и генератор случайных чисел Windows CAPI, часто предоставляют предварительно смешанный источник этих источников с низкой энтропией, например, генератор Windows CryptGenRandom включает в себя:
- Текущий идентификатор процесса (GetCurrentProcessID).
- Текущий идентификатор streamа (GetCurrentThreadID).
- Количество тиков с момента загрузки (GetTickCount).
- Текущее время (GetLocalTime).
- Различные высокоточные счетчики производительности (QueryPerformanceCounter) .-
- MD4-hash блока среды пользователя, который включает имя пользователя, имя компьютера и путь поиска. […] –
- Высокоточные внутренние счетчики CPU, такие как RDTSC, RDMSR, RDPMC
Некоторые PRNG имеют встроенные страtagsи, позволяющие смешивать энтропию из источников низкого качества для получения высококачественных результатов. Один очень хороший генератор – это генератор Фортуны . В нем конкретно используются страtagsи, которые ограничивают риск, если какой-либо из источников энтропии будет скомпрометирован.
Самое безопасное семя – это действительно случайное, которое можно аппроксимировать в практических вычислительных системах сегодняшнего дня, используя, перечисленные в уменьшающейся степени уверенности:
- Специальное оборудование
- Средства, предоставляемые вашей операционной системой, которые пытаются захватить хаотические события, такие как чтение дисков и движения мыши (/ dev / random). Другой вариант этой строки «захватить непредсказуемые события» – использовать независимый процесс или машину, которая фиксирует то, что происходит с ним как пул энтропии, вместо того, чтобы предоставить ОС «безопасный» генератор случайных чисел, например, см. EntropyPool
- Использование плохих семян (т. Е. Времени) и объединение их с другими известными вам данными (например, hashирование времени тайной и некоторыми другими критериями, такими как PID или внутреннее состояние приложения / ОС, поэтому оно не обязательно увеличивать и уменьшать по времени)
Как интересное занятие на разовых площадках, всякий раз, когда я занимаюсь шпионажем, у меня есть система, в которой мне нужно всего лишь сообщить несколько писем. Например, в последний раз, когда я продавал секретные планы по созданию тостеров в Герцогство Гранд Фенвик, мне нужно было только шепотом:
enonH
для моего конфедерата. Она знала, что получила http://is.gd/enonH- (это «безопасный» URL-адрес расширителя, который приведет вас на страницу расширения is.gd, которая, в свою очередь, указывает на полностью SFW-изображение лягушки). Это дало нам 409 тыс. Бит одноразового прохода или – если я подшучиваю, шепчу «enonH» – она знает, чтобы взять hash изображения и использовать его в качестве ключа декодирования для моей следующей передачи.
Из-за сжатия в изображениях JPEG они, как правило, являются относительно хорошими источниками энтропии, как сообщается:
$ ent frog.jpg
Entropy = 7.955028 бит на байт.Оптимальное сжатие уменьшит размер этого файла размером 51092 байт на 0 процентов.
Квадратное распределение Chi для 51092 образцов составляет 4409,15 и случайным образом превысит это значение 0,01 процента раз.
Среднее арифметическое байтов данных составляет 129.0884 (127.5 = случайный).
Значение Монте-Карло для Pi равно 3.053435115 (ошибка 2,81 процента).
Коэффициент последовательной корреляции составляет 0,052738 (полностью некоррелированный = 0,0) .uncorrelated = 0,0).
Объедините это с почти невозможным угадать образ, к которому я направил ее, и мои секретные планы тостера безопасны от Человека.
Ответ на /dev/random
на машине Linux. Это очень близко к «реальному» генератору случайных чисел, где, поскольку /dev/urandom
может генерироваться PRNG, если энтропийный пул работает сухим. Следующая цитата взята из файла random.c ядра Linux. Весь этот файл является красивым чтением, большим количеством комментариев. Сам код был принят из PGP. Его красота не ограничена ограничениями на C, которые отмечены глобальными структурами, обернутыми аксессуарами. Это просто впечатляющий дизайн.
Эта процедура собирает экологический шум от драйверов устройств и т. Д. И возвращает хорошие случайные числа, подходящие для криптографического использования. Помимо очевидных криптографических применений, эти числа также хороши для сериализации порядковых номеров TCP и других мест, где желательно иметь номера, которые не только случайны, но и трудно предсказаны злоумышленником.
Теория Операции
Компьютеры – это очень предсказуемые устройства. Следовательно, это чрезвычайно сложно
для получения действительно случайных чисел на компьютере – в отличие от
псевдослучайные числа, которые легко сгенерированы с помощью
алгоритм. К сожалению, для злоумышленников очень легко угадать последовательность генераторов псевдослучайных чисел, а для некоторых
приложений это неприемлемо. Поэтому вместо этого мы должны попытаться собрать «экологический шум» из среды компьютера, который должен быть трудным для внешних злоумышленников наблюдать и использовать для генерации случайных чисел. В среде Unix это лучше всего делать изнутри ядра.Источники случайности из среды include в себя межкластерную клавиатуру
таймингов, интервалов между прерываниями от некоторых прерываний и других событий, которые являются (а) недетерминированными и (б) трудными для внешнего наблюдателя для измерения. Случайность из этих источников добавляется в «энтропийный пул», который смешивается с использованием CRC-подобной функции. Это не криптографически сильное, но оно адекватно, предполагая, что случайность не выбрана злонамеренно, и это достаточно быстро, что накладные расходы на это на каждом прерывании очень разумны. Поскольку случайные байты смешиваются в пуле энтропии, подпрограммы сохраняют оценку того, сколько бит случайности было сохранено в внутреннем состоянии генератора случайных чисел.Когда требуются случайные байты, они получаются путем принятия SHA
hash содержимого «энтропийного пула». Хэш SHA позволяет избежать воздействия внутреннего состояния энтропийного пула. Считается, что вычислительно невозможно получить любую полезную информацию о вводе SHA из ее вывода. Даже если можно анализировать SHA каким-то умным способом, если количество данных, возвращаемых генератором, меньше, чем присущая энтропия в
пул, выходные данные абсолютно непредсказуемы. По этой причине процедура уменьшает внутреннюю оценку того, сколько бит «истинной случайности» содержится в пуле энтропии при выводе случайных чисел. Если эта оценка равна нулю, подпрограмма может генерировать случайные числа; однако злоумышленник может (по крайней мере теоретически) иметь возможность вывести будущий выход генератора из предыдущих выходов. Это требует успешного криптоанализа SHA, который не считается осуществимым, но есть отдаленная возможность. Тем не менее, эти цифры должны быть полезны для подавляющего большинства целей.…
Напишите клиента интернет-радио, используйте случайную выборку из трансляции. Имейте пул нескольких станций, чтобы выбрать и / или вернуться обратно.
Если вы читаете криптотеорию, становится очевидным, что наиболее безопасное семя будет тем, что генерируется хаотическим событием. На протяжении всей истории тайные операции использовали так называемую «одноразовую площадку», которую невозможно было взломать. Обычно они генерируются через ассортимент атмосферных прослушивающих столбов, рассеянных вокруг середины нигде. Атмосферный шум достаточно хаотичен, чтобы считаться случайным. Основная проблема в этом методе заключается в том, что логистика для одноразового прохода значительна.
Мое предложение для вас – найти достаточно хаотичное событие, чтобы каким-то образом извлечь данные.
Джеймс прав. Кроме того, есть оборудование, которое вы можете приобрести, что даст вам случайные данные. Не знаю, где я его видел, но я думаю, что я читал, что некоторые звуковые карты поставляются с таким оборудованием.
Вы также можете использовать такой сайт, как http://www.random.org/
Хорошо, если предположить, что клиенту требуется сильное семя, и вы используете облачные вычисления, это решение, для некоторых генераторов случайных чисел вы можете посмотреть здесь:
http://en.wikipedia.org/wiki/Hardware_random_number_generator
Таким образом, это предполагает, что у каждого клиента есть пара открытого / закрытого ключа, где сервер знает открытый ключ для каждого клиента. Чтобы сгенерировать ключ, вы можете использовать что-то похожее на то, что было сделано с PGP, в начале, где вы принимаете разницу во времени между нажатиями клавиш, как кто-то, поскольку это не будет допустимым.
Таким образом, клиент отправляет запрос на случайное число. Сервер использует генератор оборудования, шифрует его с помощью открытого ключа и подписывает его с помощью закрытого ключа сервера. Затем клиент может проверить, откуда он появился, а затем расшифровать его.
Это гарантирует, что вы можете создать случайное число и передать его безопасным образом.
ОБНОВИТЬ:
Лучше всего посмотреть в « Искусстве программирования» или в любой из книг «Численные методы» или посмотреть, что написал Брюс Шнайер, например, эти ссылки: http://www.schneier.com/blog/archives/2006/ 06 / random_number_g.html http://www.cryptosys.net/rng_algorithms.html http://www.schneier.com/blog/archives/2006/06/random_number_g.html http://www.schneier.com/blog /archives/2006/06/random_number_g.html Предложения по созданию случайных чисел в программном обеспечении, ftp://ftp.rsasecurity.com/pub/pdfs/bull-1.pdf
Вы также можете посмотреть, как Crypto ++ создает поколение, или, по крайней мере, посмотреть, как это сделал Вэй Дай, http://www.cryptopp.com/
Random.org предлагает настоящий веб-сервис генератора случайных чисел, «засеянный» атмосферным шумом.
Вы получаете 200 000 случайных бит бесплатно каждый день, до 1 миллиона случайных бит, после того, как вы пополняете свою учетную запись, она становится такой же дешевой, как 4 миллиона бит за доллар.
4 – выбрано очень случайным броском кости. 🙂
Простое решение, если нет дополнительного случайного оборудования.
Используйте миллисекунды, mouseX и mouseY для генерации семени.
Поскольку консенсус криптографически силен, случайные числа должны быть получены из аппаратного обеспечения. Некоторые процессоры имеют эту функциональность (чипы Intel – другие). Для этого можно использовать звуковые карты, измеряя колебания с низким битом в рекламном конвертере.
Но из-за аппаратных потребностей нет ответа на язык и платформу. Практически любая более крупная ОС будет поддерживать безопасные случайные числа. Также сложно реализовать хороший генератор случайных чисел с хорошим выходом, так как вам придется отслеживать оставшуюся энтропию в пуле.
Итак, первый шаг – определить, какие языки вы будете использовать. У некоторых есть сильная поддержка случайных чисел – если это не так, вам придется абстрагировать генерацию для вызова случайных источников, зависящих от платформы.
В зависимости от ваших потребностей в области безопасности необходимо утомлять «онлайн-источники», поскольку «человек в середине» может представлять серьезную угрозу для неавторизованных источников в Интернете.
Ваши самые безопасные методы придут от природы. То есть, что-то, что происходит за пределами вашей компьютерной системы и за пределами нашей способности предсказывать ее шаблоны.
Например, многие исследователи в криптографически безопасных PRNG будут использовать радиоактивный распад в качестве модели, другие могут смотреть на фракталы и т. Д. Существуют существующие способы создания настоящих ГСЧ
Один из моих любимых способов реализации PRNG – взаимодействие пользователя с компьютером. Например, этот пост не был чем-то, что можно было бы заранее определить форвардной инженерией из моей прошлой серии сообщений. Там, где я оставил свою мышь на экране, очень случайный, след, который он сделал, также случайный. Наблюдение за взаимодействием с пользователем. Злоупотребление средствами предоставления конкретного ввода, которое генерирует определенные числа, может быть смягчено с помощью «рой» пользовательских входов и вычисления его «вектора», если у вас нет каждого пользователя в вашей системе в качестве Евы, вы все должно быть в порядке. Это не подходит для многих приложений, так как ваш пул чисел прямо пропорционален пользовательскому вводу. Реализация этого может иметь свои проблемы.
Люди, заинтересованные в RNG, уже сделали такие вещи, как:
- Используйте веб-камеру, независимо от случайных всплывающих окон на экране, когда проезжает этот грузовик, это все случайные данные.
- Как уже упоминалось, излучение
- атмосфера
- Взаимодействие с пользователем (как упоминалось)
- Что происходит в системе EDG.
Защищенные семена происходят от природы.
edit: Основываясь на том, что вы ищете, я бы предложил использовать агрегацию EDG вашего облачного сервера.
Сначала вам нужно определить фактическое использование / назначение генератора случайных чисел и почему вы думаете, что должен пройти такой высокий стандарт безопасности? Причина, о которой я прошу, заключается в том, что вы упомянули о том, как выбрать ее из возможного – если вы используете ее действительно для целей безопасности, то обеспечение источника и канала для его отправки гораздо важнее, чем у кого-либо академическое вязание.
Второй элемент – это размер фактических случайных чисел, которые вам нужны – большое семя хорошо, но только если число сгенерировано также велико – иначе вы просто будете читать небольшую часть сгенерированного числа, и это увеличит ваш риск.
Посмотрите на реконфигурируемые шифры, а не на такие вещи, как SHA или AES. Вот две исследовательские статьи, если вы хотите прочитать и проверить, как и почему они работают:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.97.6594&rep=rep1&type=pdf http://www.springerlink.com/index/q29t6v1p45515186.pdf
Или возьмите какой-либо реконфигурируемый исходный код шифрования ГОСТ, который вы найдете в сети, и затем вы либо подаете ему просто базовое семя (например, объединенный «тикер» плюс идентификатор узла веб-сервера (если он находится в веб-ферме), а также часть ответа на любой интернет-новостной сайт, который все время меняет топ-новости, или вы можете накормить его высоко контролируемым начальным семенем (которое вы можете сделать сами по себе) и использовать легкую псевдослучайную последовательность для выбора дальнейших конфигураций шифров. Даже NSA не может сломать эту one 🙂 Так как это всегда другой шифр. Для реальных криптографических целей практически необходимо использовать очень контролируемое начальное семя, чтобы иметь возможность реплицировать последовательность для проверки. Здесь мы возвращаемся к первому элементу – обеспечению источника и распространения.
Используйте random.org, которые, как они утверждают, предлагают истинные случайные числа кому-либо в Интернете, а также API HTTP, который вы можете использовать. Они предлагают как бесплатные, так и платные услуги.
отказ от ответственности: я никоим образом не связан с random.org
С Linux ответ – / dev / random (в Windows я думаю, что эквивалент называется CryptGenRand).
Однако в облачной среде / dev / random может быть сильно истощен и может не хватить энтропии для ответа на ваш запрос.
Чтобы решить эту проблему, наша компания разрабатывает настоящий генератор случайных чисел, который может обеспечить хорошие случайные числа (квантового происхождения) для тысяч серверов и виртуальных машин одновременно. Если устройство установлено в локальной сети вашего облачного центра обработки данных, все, что вам понадобится, – это наш дезамон, работающий на вашем компьютере. Этот деамон контролирует уровень / dev / random entropy и, когда требуется энтропия, делает запрос к устройству (по сети) и помещает полученные случайные данные в энтропийный пул ядра.
Если вы хотите узнать больше о нашем решении, посетите наш веб-сайт (www.sqrtech.com) или свяжитесь с нами по адресу [email protected].
Julien
Вы можете зарабатывать случайные числа, генерируемые радиоактивным распадом. Сначала звучит немного странно, но из этого вы получаете реальные случайные числа.
Радиоактивный распад
Другая статья
ЭТО УГАДАЕТ! Crypto geeks, пожалуйста, исправьте, если я ошибаюсь
Официальный алгоритм UUID / GUID в этот момент возвращает результат, который запускается через криптографическую хеш-функцию – он принимает известную информацию, такую как время, mac addr и счетчик, чтобы сформировать UUID / GUID, а затем запускает это через криптографическую hash, чтобы гарантировать, что адрес mac не может быть извлечен.
Я считаю, что вы можете использовать XOR для количества бит, которое требуется для семени, с достаточно хорошей гарантией того, что результирующее значение равномерно распределено по номеру, определенному вашим желаемым количеством бит. Примечание. Я не утверждаю, что это безопасно, только то, что это действие должно давать значение, которое равномерно распределяется по битовому пространству с течением времени.
(((PI X current thread ID) X current process ID) / tick count) x pi