Какое самое безопасное начальное число для генерации случайных чисел? - PullRequest
62 голосов
/ 09 августа 2010

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

Есть два важных недостатка, о которых следует помнить.Использование времени для отправки генератора случайных чисел является нарушением CWE-337 .Использование небольшого семенного пространства было бы нарушением CWE-339 .

Ответы [ 20 ]

2 голосов
/ 09 августа 2010

ОК, при условии, что клиенту нужны сильные начальные числа, и вы используете облачные вычисления. Вот решение, для некоторых аппаратных генераторов случайных чисел вы можете посмотреть здесь:

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/

1 голос
/ 20 августа 2010

Простое решение, если нет дополнительного случайного оборудования.

Используйте миллисекунды, mouseX и mouseY для генерации начального числа.

1 голос
/ 24 августа 2010

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

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

Изучите перестраиваемые шифры, а не такие вещи, как SHA или AES. Вот 2 исследования, если вы хотите прочитать и проверить, как и почему они работают:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.97.6594&rep=rep1&type=pdf http://www.springerlink.com/index/q29t6v1p45515186.pdf

Или перехватите любой реконфигурируемый исходный код шифра ГОСТ, который вы найдете в сети, и затем вы либо подадите ему просто любое начальное число (например, каскадный «тикер» плюс идентификатор узла веб-сервера (если он находится в веб-ферме) плюс часть ответа на любом новостном сайте в Интернете, который постоянно меняет главные новости, или вы можете кормить его строго контролируемым начальным начальным числом (которое вы можете создать самостоятельно) и использовать легкую псевдослучайную последовательность для выбора дальнейших конфигураций шифров. Даже АНБ может ' не сломайте это :-) Так как это всегда другой шифр. Для реальных целей шифрования фактически необходимо использовать очень контролируемое начальное начальное число, чтобы иметь возможность повторить последовательность для проверки. Вот где мы вернемся к первому пункту - защита источника и распространения.

1 голос
/ 07 марта 2011

В Linux ответом является / dev / random (в Windows я думаю, что эквивалент называется CryptGenRand).

Однако в облачной среде / dev / random может быть сильно истощен и может не обладать достаточной энтропией для ответа на ваш запрос.

Чтобы решить эту проблему, наша компания разрабатывает истинное случайное числогенераторное устройство, которое может предоставлять хорошие случайные числа (квантового происхождения) тысячам серверов и виртуальных машин одновременно.Если устройство установлено в локальной сети вашего облачного центра обработки данных, все, что вам нужно, - это наш демон, работающий на вашей машине.Этот демон контролирует уровень / dev / random энтропии и, когда требуется энтропия, делает запрос к устройству (по сети) и помещает полученные случайные данные в пул энтропии ядра.

Если вы хотите узнать больше онаше решение, пожалуйста, посетите наш веб-сайт (www.sqrtech.com) или свяжитесь с нами по адресу info@sqrtech.com.

Julien

1 голос
/ 23 августа 2010

Поскольку консенсус криптографически сильный, случайные числа должны быть получены из аппаратных средств. Некоторые процессоры обладают этой функциональностью (среди других - чипы Intel). Также для этого можно использовать звуковые карты, измеряя низкие битовые флуктуации в АЦП.

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

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

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

1 голос
/ 25 августа 2010

Вы можете заработать случайные числа, полученные в результате радиоактивного распада. Поначалу звучит немного странно, но из этого вы получаете реальные случайные числа.

Радиоактивный распад

Другая статья

1 голос
/ 24 августа 2010

Используйте random.org они утверждают, что предлагают истинные случайные числа всем в Интернете , и у них также есть HTTP API, который вы можете использовать. Они предлагают как бесплатные, так и платные услуги.

отказ от ответственности: я никоим образом не связан с random.org

1 голос
/ 24 августа 2010

Ваши самые безопасные методы придут от природы. То есть то, что происходит за пределами вашей компьютерной системы и за пределами нашей способности предсказать ее закономерности.

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

Один из моих любимых способов реализации PRNG - взаимодействие пользователя с компьютером. Например, этот пост не был предопределен форвард-инжинирингом из моей прошлой серии постов. То, где я оставил свою мышь на моем экране, очень случайно, след, который он сделал, также является случайным. Видеть от взаимодействия с пользователем есть. Злоупотребление средствами предоставления конкретного ввода, так что генерируются конкретные числа, можно было бы смягчить, используя «рой» пользовательских входов и вычисляя его «вектор», если у вас нет каждого пользователя в вашей системе как Ева, вы все должно быть в порядке. Это не подходит для многих приложений, так как ваш пул чисел прямо пропорционален пользовательскому вводу. Реализация этого может иметь свои проблемы.

Люди, интересующиеся ГСЧ, уже сделали такие вещи, как:

  1. Используйте веб-камеру, независимо от того, куда попадают случайные всплески на экране, когда этот грузовик проезжает мимо, это все случайные данные.
  2. Как уже упоминалось, излучение
  3. Атмосфера
  4. Взаимодействие с пользователем (как уже упоминалось)
  5. Что происходит внутри системы EDG.

Безопасные семена происходят от природы.

редактирование: Исходя из того, что вы собираетесь делать, я мог бы предложить использовать агрегирование EDG вашего облачного сервера.

0 голосов
/ 24 августа 2010

(((PI X идентификатор текущего потока) X идентификатор текущего процесса) / число тиков) x pi

0 голосов
/ 24 августа 2010

ЭТО УГАДА! Crypto, фанаты, пожалуйста, исправьте, если я ошибаюсь

Официальный алгоритм для UUID / GUID в этот момент возвращает результат, который выполняется через криптографическую хеш-функцию - он принимает известную информацию, такую ​​как время, mac addr и счетчик, для формирования UUID / GUID, а затем запускает через криптографический хеш, чтобы гарантировать, что MAC-адрес не может быть извлечен.

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

...