Java - Должны ActionListeners, KeyListeners, И т.д., всегда быть объявленным во внутренних классах?

Во всех примерах исходного кода Java, которые я смотрел, слушатели всегда объявлялись во внутренних классах.

Почему - что такое причина для того, чтобы кодировать классы, подобные этому, вместо того, чтобы иметь слушателей в их отдельном файле * .java \ class?

Будет ли иметь отдельные классы для слушателей плохой дизайн?

Если это ' Спасибо всем, кто нашел время, чтобы ответить. Много полезных моментов для рассмотрения. я ищу источники, доступные для машины в облачной среде или на сервере, предоставленном хостинговой компанией.

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

62
задан Vinko Vrsalovic 9 August 2010 в 09:09
поделиться

18 ответов

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

1. Что такое безопасное семя?

Безопасность определяется только относительно модели атаки. Мы хотим получить последовательность из n бит, которая имеет n бит энтропии по отношению к атакующему: проще говоря, чтобы любое из возможных 2n значений для этой последовательности было одинаково вероятным с точки зрения атакующего.

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

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

Здесь я хочу сказать, что семя "безопасно" только в том случае, если оно используется в контексте, где оно может оставаться безопасным, что более или менее подразумевает криптографически безопасный ГПСЧ и некоторое устойчивое к взлому хранилище. Если такое хранилище доступно, то наиболее безопасное семя - это то, которое было сгенерировано однажды, давным-давно, и использовалось в безопасном ГПСЧ, размещенном на аппаратуре, устойчивой к взлому.

К сожалению, такое оборудование дорого (оно называется HSM и стоит несколько сотен или тысяч долларов), и эту стоимость обычно трудно оправдать (плохое семя не помешает работе системы; это обычная проблема непроверяемости безопасности). Поэтому обычно выбирают "преимущественно программные" решения. Поскольку программное обеспечение не может обеспечить долговременное хранение конфиденциальной информации, время жизни семени произвольно сокращается: периодически получается новое семя. В Fortuna такая перезагрузка должна происходить по крайней мере раз в мегабайт сгенерированных псевдослучайных данных.

Подводя итог, можно сказать, что в системе без HSM безопасным семенем является то, которое можно относительно легко получить (поскольку мы будем делать это довольно часто), используя данные, которые не могут быть собраны злоумышленником.

2. Смешивание

Случайные источники данных не производят красивые однородные биты (каждый бит имеет значение 1 с вероятностью ровно 0.5, а значения битов не зависят друг от друга). Вместо этого случайные источники производят значения в специфических для источника наборах. Эти значения можно закодировать в виде последовательностей битов, но вы не получите своих денег: чтобы иметь n битов энтропии, вы должны иметь значения, которые при кодировании используют гораздо больше, чем n битов.

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

Сейчас у нас есть хэш-функции. Хэш-функции должны удовлетворять нескольким свойствам безопасности, а именно устойчивости к предварительным образам, вторым предварительным образам и коллизиям. Обычно мы анализируем хэш-функции, пытаясь понять, как они отличаются от модели случайного оракула. Здесь есть важный момент: PRF, которая следует модели случайного оракула, будет хорошей хэш-функцией, но могут существовать хорошие хэш-функции (в смысле устойчивости к предварительным образам и коллизиям), которые, тем не менее, легко отличить от случайного оракула. В частности, функции SHA-2 (SHA-256, SHA-512... ) считаются безопасными, но отходят от модели случайного оракула из-за "атаки увеличения длины" (учитывая h(m), можно вычислить h(m || m') для частично ограниченного сообщения m', не зная m). Атака на увеличение длины, похоже, не дает никакого пути к созданию предварительных образов или коллизий, но она показывает, что эти хэш-функции не являются случайными оракулами. Для конкурса SHA-3 NIST заявил, что кандидаты не должны допускать такого "увеличения длины".

Следовательно, шаг смешивания не так прост. Лучше всего сейчас использовать SHA-256 или SHA-512, и перейти на SHA-3, когда он будет выбран (это должно произойти примерно в середине 2012 года).

3. Источники

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

Философское замечание: в какой-то момент вы должны доверять некоторым умникам, тем, кто носит лабораторные халаты или получает деньги за фундаментальные исследования. Когда вы используете хэш-функцию, такую как SHA-256, вы фактически доверяете группе криптографов, когда они говорят вам: мы искали недостатки, очень усердно, в течение нескольких лет, и не нашли их. Когда вы используете распадающийся кусочек радиоактивной материи со счетчиком Гейгера, вы доверяете некоторым физикам, которые говорят: мы очень старательно искали способы предсказать, когда взорвется следующее ядро атома, но не нашли ни одного. Обратите внимание, что в этом конкретном случае "физики" включают таких людей, как Беккерель, Резерфорд, Бор или Эйнштейн, а "действительно усердно" означает "более века накопленных исследований", так что вы не совсем на нетронутой территории. Тем не менее, вера в безопасность все еще присутствует.

Некоторые компьютеры уже включают аппаратное обеспечение, которое генерирует случайные данные (т.е. использует и измеряет физический процесс, который, насколько может судить физика, достаточно случаен). VIA C3 (линейка x86-совместимых CPU) имеют такое оборудование. Как ни странно, Commodore 64, домашний компьютер 30-летней давности, также имел аппаратный RNG (так утверждает Wikipedia, по крайней мере).

Если нет специального оборудования, вам придется использовать любые физические события, которые вы можете получить. Обычно вы используете нажатия клавиш, входящие пакеты ethernet, движения мыши, обращения к жесткому диску... каждое событие содержит некоторые данные и происходит в измеримое мгновение (современные процессоры имеют очень точные часы, благодаря счетчикам циклов). Эти мгновения и содержимое данных о событиях можно накапливать как источники энтропии. Это гораздо проще для самой операционной системы (которая имеет прямой доступ к аппаратуре), чем для приложений, поэтому обычный способ сбора семян - обратиться к операционной системе (в Linux это называется /dev/random или /dev/urandom [у обоих есть свои преимущества и проблемы, выбирайте свой яд]; в Windows вызовите CryptGenRandom()).

Крайним случаем являются апплеты Java до версии 1.2, до добавления java.security.SecureRandom; поскольку Java очень эффективно изолирует код приложения от аппаратного обеспечения, получение случайного семени было сложной задачей. Обычным решением было иметь два или три потока, выполняющихся одновременно и безумно переключающихся между собой, так что количество переключений потоков в секунду было несколько случайным (по сути, это попытка извлечь случайность через время действий планировщика ОС, которое зависит от того, что также происходит на машине, включая события, связанные с оборудованием). Это было весьма неудовлетворительно.

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

Некоторые предлагают использовать аудиокарты в качестве источников "белого шума", установив усилитель на максимум (в наше время даже в серверах есть аудио). Другие предлагают включить веб-камеры (мы знаем, что видео с веб-камер "шумит", и это хорошо для случайности, даже если веб-камера обращена к стене); но серверы с веб-камерами встречаются нечасто. Вы также можете пропинговать сервер внешней сети (например, www.google.com) и посмотреть, сколько времени потребуется на ответ (но это может быть замечено злоумышленником, шпионящим за сетью).

Прелесть этапа смешивания с хэш-функцией в том, что энтропия может только накапливаться; нет никакого вреда в добавлении данных, даже если эти данные не являются случайными. Просто запихивайте как можно больше данных через хэш-функцию. Хэш-функции довольно быстры (хорошая реализация SHA-512 будет обрабатывать более 150 МБ/с на обычном ПК, используя одно ядро), и засев происходит не так часто.

4. Заключение

Используйте HSM. Они стоят несколько сотен или тысяч долларов, но разве ваши секреты не стоят гораздо больше? HSM включает в себя аппаратное обеспечение ГПСЧ, запускает алгоритм ГПСЧ и хранит семена с защитой от взлома. Кроме того, большинство HSM уже сертифицированы в соответствии с различными национальными нормами (например, FIPS 140 в США и уровни EAL в Европе).

Если вы настолько дешевы, что не хотите покупать HSM, или если вы хотите защитить данные, которые на самом деле не представляют особой ценности, тогда создайте криптографически безопасный ГПСЧ, используя семя, полученное путем хэширования множества физических мер. Все, что исходит от какого-либо оборудования, должно быть хэшировано вместе с моментом (читай "счетчиком циклов"), когда эти данные были получены. Здесь следует хэшировать данные по мегабайтам. Или, что еще лучше, не делать этого: просто используйте средства, предлагаемые вашей операционной системой, которая уже включает такой код.

82
ответ дан 24 November 2019 в 16:35
поделиться

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

http://en.wikipedia.org/wiki/Hardware_random_number_generator

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

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

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

UPDATE:

Лучше всего заглянуть в Искусство компьютерного программирования или в любую книгу по численным методам, или посмотреть, что написал Брюс Шнайер, например, по этим ссылкам: 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 Suggestions for Random Number Generation in Software, ftp://ftp.rsasecurity.com/pub/pdfs/bull-1.pdf

Вы также можете посмотреть на то, чтобы Crypto++ выполнил генерацию, или, по крайней мере, посмотреть, как это сделал Wei Dai, http://www.cryptopp.com/

2
ответ дан 24 November 2019 в 16:35
поделиться

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

Вы также можете использовать такой сайт, как http://www.random.org/

3
ответ дан 24 November 2019 в 16:35
поделиться

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

Я предлагаю вам найти достаточно хаотическое событие, из которого можно как-то извлечь данные.

3
ответ дан 24 November 2019 в 16:35
поделиться

Наиболее безопасным является действительно случайное зерно, которое в современных практических вычислительных системах можно приблизить, используя, перечисленные в порядке убывания степени достоверности:

  • Специальное оборудование
  • Средства, предоставляемые вашей операционной системой, которые пытаются уловить хаотические события, такие как чтение с диска и движение мыши (/dev/random). Другой вариант "перехвата непредсказуемых событий" - использовать независимый процесс или машину, которая фиксирует происходящее с ней в качестве пула энтропии, вместо "безопасного" генератора случайных чисел, предоставляемого ОС, пример см. в EntropyPool
  • Использование плохого семени (т.е. времени) и комбинирование его с другими данными, известными только вам (например, хэширование времени с секретом и некоторыми другими критериями, такими как PID или внутреннее состояние приложения/OS, так что оно не обязательно увеличивается и уменьшается в зависимости от времени)
14
ответ дан 24 November 2019 в 16:35
поделиться

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

4
ответ дан 24 November 2019 в 16:35
поделиться

Ответ - / dev / random на машине Linux. Это очень похоже на «настоящий» генератор случайных чисел, где / dev / urandom может быть сгенерировано ГПСЧ, если пул энтропии иссяк. Следующая цитата взята из файла random.c ядра Linux Весь этот файл хорошо читается, много комментариев. Сам код был заимствован из PGP. Его красота не ограничивается ограничениями языка C, который отмечен глобальными структурами, обернутыми средствами доступа. Это просто внушающий трепет дизайн.

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

Теория работы

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

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

Если желательны случайные байты, они получаются с помощью SHA
хеш содержимого энтропии пул ". Хеш SHA позволяет избежать раскрытия внутреннее состояние энтропии бассейн.Считается, что это вычислительно невозможно вывести любую полезную информацию о ввод SHA с его вывода. Даже если можно анализировать SHA в какой-нибудь умный способ, пока сумма данных, возвращаемых генератором меньше собственной энтропии в
пул, выходные данные полностью непредсказуемо. По этой причине рутина уменьшает свой внутренний оценка того, сколько бит истинного случайность "содержатся в пул энтропии, поскольку он выводит случайные числа. Если эта оценка стремится к нулю, процедура все еще может генерировать случайные числа; однако злоумышленник может (на по крайней мере теоретически) суметь сделать вывод будущая мощность генератора из предыдущих результатов. Это требует успешный криптоанализ SHA, который не считается осуществимым, но есть отдаленная возможность. Тем не менее, эти числа должны быть полезен для подавляющего большинства целей.

...

6
ответ дан 24 November 2019 в 16:35
поделиться

Интересный подход к одноразовым блокнотам: всякий раз, когда я занимаюсь шпионажем, у меня есть система, по которой мне нужно передать всего несколько букв. Например, в последний раз, когда я продавал секретные планы по производству тостеров герцогству Великий Фенвик, мне нужно было только шепнуть:

enonH

моему соратнику. Она знала, что получить http://is.gd/enonH- (это «безопасный» URL-адрес расширителя, который приведет вас на страницу расширения is.gd, которая, в свою очередь, указывает на полностью SFW-изображение лягушка). Это дало нам 409 тыс. Бит одноразового блокнота или - если я подмигну во время шепота «enonH» - она ​​знает, что нужно взять хэш изображения и использовать его в качестве ключа декодирования для моей следующей передачи.

Из-за сжатия изображений JPEG они, как правило, являются относительно хорошими источниками энтропии, как сообщает ent :

$ ent frog.jpg
Энтропия = 7,955028 бит за байт.

Оптимальное сжатие уменьшит размер этого файла размером 51092 байт на 0 процентов.

Распределение хи-квадрат для 51092 выборки - 4409,15, и случайным образом превышают это значение 0,01 процента от раз.

Среднее арифметическое значение байтов данных равно 129,0884 (127,5 = случайный).
Значение Монте-Карло для Pi составляет 3,053435115 (ошибка 2,81 процента).
Коэффициент последовательной корреляции 0,052738 (всего некоррелированный = 0,0). некоррелированный = 0,0).

Добавьте к этому почти невозможно угадать изображение, на которое я ее направил, и мои секретные планы тостера находятся в безопасности от Человека.

7
ответ дан 24 November 2019 в 16:35
поделиться

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

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

Вот некоторые источники, которые вы можете использовать: текущее время в микросекундах (обычно очень низкая энтропия 1/2 бита в зависимости от разрешения и того, насколько легко злоумышленнику угадать), время между прибытием событий пользовательского интерфейса и т. Д.

Источники операционной системы, такие как / dev / random и генератор случайных чисел Windows CAPI, часто предоставляют предварительно смешанный источник этих источников с низкой энтропией, например, генератор Windows CryptGenRandom включает:

  • Текущий ID процесса (GetCurrentProcessID).
  • Идентификатор текущего потока (GetCurrentThreadID).
  • Счетчик тактов с момента загрузки (GetTickCount).
  • Текущее время (GetLocalTime).
  • Различные высокоточные характеристики счетчики (QueryPerformanceCounter).-
  • MD4-хэш среды пользователя. блок, который включает имя пользователя, имя компьютера и путь поиска. [...] -
  • Высокоточные внутренние счетчики ЦП, такие как RDTSC, RDMSR, RDPMC

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

48
ответ дан 24 November 2019 в 16:35
поделиться

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

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

1
ответ дан 24 November 2019 в 16:35
поделиться

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

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

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

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

1
ответ дан 24 November 2019 в 16:35
поделиться

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

0
ответ дан 24 November 2019 в 16:35
поделиться

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

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

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

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

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

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

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

1
ответ дан 24 November 2019 в 16:35
поделиться

4 - выбирается очень случайным броском кубиков. : -)

2
ответ дан 24 November 2019 в 16:35
поделиться

Случайно.org предлагает настоящий генератор случайных чисел веб-сервис, «засеянный» атмосферным шумом.

Вы получаете 200 000 случайных битов бесплатно каждый день, до ограничения в 1 миллион случайных битов, после чего вы должны пополнить свой счет, это становится всего лишь 4 миллионами битов за доллар.

2
ответ дан 24 November 2019 в 16:35
поделиться

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

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

1
ответ дан 24 November 2019 в 16:35
поделиться

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

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

Обратите внимание на реконфигурируемые шифры, а не на такие вещи, как 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

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

1
ответ дан 24 November 2019 в 16:35
поделиться

ЭТО УГАДКА! Криптогики, пожалуйста, поправьте, если я ошибаюсь.

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

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

0
ответ дан 24 November 2019 в 16:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: