Рейтинг:1

Когда используется PRNG и когда используется CSPRNG

флаг ng

Я понимаю, что PRNG — это генераторы случайных чисел, которые используют детерминированный алгоритм, основанный на семени.

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

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

Если в приведенном выше есть какие-либо ошибки, я буду признателен за разъяснение, потому что мои вопросы зависят от их точности.

Итак, мой главный вопрос: когда вам нужен PRNG? и когда вы должны использовать CSPRNG?

Мой первоначальный ответ на это заключался в том, что CSPRNG следует использовать при генерации ключей, но когда я искал «для чего используется prng», одна из найденных страниц была это в котором говорится, что:

В криптографии PRNG используются для создания сеансовых ключей и потоковых шифров.

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

Это заставляет меня понять, что, возможно, я еще не полностью понимаю PRNG и CSPRNG и то, как они используются. Отсюда этот вопрос: в криптографии, когда именно используется PRNG и когда используется CSPRNG?

kelalaka avatar
флаг in
[В чем разница между CSPRNG и PRNG?] (https://crypto.stackexchange.com/questions/12436/what-is-the-difference-between-csprng-and-prng), [https://crypto. stackexchange.com/questions/60405/why-are-prng-in-programming-languages-not-cryptographically-secure-by-default/60407#60407] (https://crypto.stackexchange.com/q/60405/18298 ), Вам тоже стоит заглянуть на наш сайт. Это некоторые примеры.
Finlay Weber avatar
флаг ng
в одной из ссылок вопрос гласит: «Мы используем PRNG для генерации ключей», это правда? Используется ли PRNG для генерации ключей? или используется CSPRNG?
Finlay Weber avatar
флаг ng
Я просмотрел обе ссылки и не уверен, что они отвечают на мой основной вопрос: в криптографии, когда именно используется PRNG и когда используется CSPRNG?
kelalaka avatar
флаг in
В вашем главном вопросе отсутствует контекст. Простой ответ: использовать CSPRNG, когда это возможно? Итак, что в ваших системах не поддерживает CSPRNG и что у вас есть в вашей системе, чтобы ваша целевая система была защищена от атак x, y, z. Кроме того, что ваш вопрос широк, верно? Ответ Томаса уже покрывает ваши сомнения;
kelalaka avatar
флаг in
«Такая псевдослучайность может быть криптографически безопасной или нет. Он криптографически безопасен, если никто не может надежно отличить вывод от истинной случайности, даже если алгоритм PRNG прекрасно известен (но не его внутреннее состояние). Некриптографически безопасный PRNG может обмануть основные статистические тесты, но разумный злоумышленник может отличить его от истинной случайности.
Maarten Bodewes avatar
флаг in
Не охвачено другими ответами: «И под криптографической безопасностью я считаю, что это означает, что даже если злоумышленник знает детерминированный алгоритм и начальное число, он не сможет предсказать следующее случайное число. Я понимаю, что это связано с CSRNG также использует некоторые внутренние состояния». Это неверно, PRNG - это алгоритм и, следовательно, детерминированный. Если вы знаете или можете угадать семена (и когда они смешиваются с состоянием), вы сможете рассчитать внутреннее состояние и все выходные данные. Другими словами: семя является источником энтропии для PRNG.
Рейтинг:2
флаг cr

Сначала несколько определений:

  • ГПСЧ — это генератор псевдослучайных чисел. Он может быть очень плохим или с очень сильными математическими свойствами. Для данного определения это не имеет значения.
  • CSPRNG — это криптографически безопасный генератор случайных чисел. Это PRNG с некоторыми строгими требованиями.

В вашей соединять, автор пишет о CSPRNG, но называет их PRNG. Элемент «криптографически безопасный» подразумевается этим требованием:

Сгенерированные битовые строки должны «выглядеть случайными» для противника.

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

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

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

Чтобы напрямую ответить на ваши вопросы: вы должны использовать CSPRNG, когда он указан криптографическим алгоритмом (что часто бывает). И вы должны использовать PRNG или CSPRNG, которые не обновляют автоматически свое внутреннее состояние, когда требуется воспроизведение его вывода. В других случаях в большинстве случаев не имеет значения, какой ГСЧ вы используете.

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

A. Hersean avatar
флаг cr
@fgrieu Это не совсем то, что я написал. Тем не менее, я изменил свой ответ, чтобы быть более ясным. Что касается TRNG, в своем ответе я различаю PRNG не по их заполнению, а по обновлению (или его отсутствию) их внутреннего состояния после их заполнения, как это делается OpenSSL или /dev/urandom в Linux. Поскольку значение слова «истина» в TRNG неоднозначно (в зависимости от того, кто говорит), я никогда не использую этот термин.
fgrieu avatar
флаг ng
Я бы не назвал /dev/urandom CSPRNG или PRNG.Для меня PRNG является детерминированным (это подразумевается Псевдо), а CSPRNG становится непредсказуемым только в сочетании с соответствующим источником энтропии, что делает его CSRNG, что означает криптографически безопасный (правда, обычно оставляют подразумеваемым, а не указанным) Случайное число Генератор. Не все CSRNG включают CSPRNG: принято создавать криптографически безопасный истинный RNG из хорошего семени с хорошим онлайн-тестом и не криптографически безопасным PRNG, например. базовый LFSR с некоторой децимацией.
A. Hersean avatar
флаг cr
@fgrieu Если я правильно понял ваше определение, твистер Мерсенна (MT19937), посеянный из /dev/urandom, становится CSRNG. Но результат этого ГСЧ можно предсказать по наблюдению за 624 итерациями. Для меня (и Википедии) это не может быть CS, и это противоречит заявленному вами требованию непредсказуемости для CSRNG. Поскольку вы более опытны, чем я, я чувствую, что что-то упускаю. Не могли бы вы просветить меня?
A. Hersean avatar
флаг cr
@fgrieu Вы считаете, что тайно заполненный MT19937 является непредсказуемым CSRNG при условии, что генерируется не более 64x624 бит? Хотя аналогичные условия подразумеваются для каждого ГСЧ, внутреннее состояние которого зависит только от начального числа, я думаю, что здесь оскорбительно называть MT19937 CSRNG. Примечание: лично я использую «псевдо», когда биты генерируются алгоритмом, поэтому я не делаю различий между CSPRNG и CSRNG. Я бы зарезервировал отсутствие «псевдо» (или использование «истинного») для воображаемого идеального аппаратного RNG, и я предпочитаю HRNG для реальных (предвзятых) аппаратных генераторов.
fgrieu avatar
флаг ng
Использование «псевдо» всякий раз, когда задействован алгоритм, не является незамеченным, и я согласен называть /dev/urandom псевдо-TRNG или заявлять, что он _использует_ (CS)PRNG; но не то, чтобы это был (CS)PRNG, который имеет точное определение в современной криптографии. Действительно, MT19937 не является криптографически безопасным при использовании, как вы описываете, и, следовательно, не является CSRNG при использовании отдельно. Мое заявление было о LFSR (например, в режиме [скремблер](https://en.wikipedia.org/wiki/Scrambler#Additive_(synchronous)_scramblers)), питаемых источником энтропии и, что наиболее важно, с прореживанием (оставляя значительно меньше выходных данных). чем ввод).
Рейтинг:1
флаг cn

Это на самом деле довольно просто.

п. Генераторы случайных чисел выдают случайные числа (см. ниже). Иногда все, что ожидается, это то, что числа вычислительно неотличимы от случайного поиска (PRNG). Если вы можете предсказать следующее число алгоритмически, это не имеет значения. Например, Монте-Карло эксперименты. Мерсенн Твистер довольно хорош и, вероятно, наиболее часто используемый PRNG в мире (это внутри Python), но полностью предсказуем после наблюдения ~ 624 выходных данных. Поэтому бесполезен для сокрытия секретов.

С. CSPRNG — это усовершенствованный PRNG, в котором вы не можете предсказать следующее число. Это называется тестом следующего бита, т. е. вы не можете предсказать следующий выходной бит независимо от того, какие наблюдения вы предпринимаете (не зная скрытого внутреннего состояния). Так:-

$$ P(x_{i} = 1) = \frac{1}{2} + \epsilon $$

где смещение от четных (обычно) $< 2^{-64}$. Если вы затем сделаете предположения о первой части зашифрованного текста, это не поможет со следующей частью, и вы ни к чему не придёте. Что мы хотим скрыть секреты. Примером является Сальса20 как часть поточного шифра.

В криптографии PRNG используются для создания сеансовых ключей и потоковых шифров.

Это просто небрежный разговор. Я называю их все ГСЧ, если только не требуется более узкое определение.


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

  2. Посмотри на https://en.m.wikipedia.org/wiki/List_of_random_number_generators.

  3. Также обратите внимание на наличие TRNG, которые представляют собой смесь вышеперечисленного и аппаратного обеспечения.

SAI Peregrinus avatar
флаг si
Я (как обычно) возражаю против того, чтобы называть HWRNG TRNG. В них нет ничего более «правдивого», чем любой CSPRNG. Это метафизическое возражение: законы физики согласуются с полностью детерминированной вселенной, поэтому нет причин предполагать, что существует какой-то скрытый источник энтропии, допускающий полный недетерминизм, а не просто математический Хаос, приводящий к невозможности предсказать будущие события. Не совсем практическая разница, но называть их TRNG может дать людям ошибочное представление о том, как работает энтропия.
Paul Uszak avatar
флаг cn
@SAIPeregrinus О боже, вы меня расстроили ;-) Наживка проглочена и переварена. Ты мылся сегодня? Не личная критика, а наука. Вода ходит по кругу в пробковом отверстии. В гидродинамике это называется турбулентным (не ламинарным) течением. Пока он движется по часовой стрелке (на севере), он делает это с определенной случайностью, вам так не кажется? Волны, изгибы и т.д. Непредсказуемый узор? Тем не менее, в остается в раковине. Плохая сантехника, соседний чердак не заливает. Это доказывает, что неопределенное микро и предсказуемое макро могут сосуществовать без взрыва Вселенной.
Paul Uszak avatar
флаг cn
См. мою [страницу] (http://www.reallyreallyrandom.com/zener/why-its-random/) для более технического объяснения квантовой неопределенности и того, почему TRNG действительно существуют. Также учтите, что CSPRNG полностью детерминированы, предсказуемы кем-то, имеют конечный результат и имеют ~ нулевую колмогоровскую сложность. Таким образом, по нагрузкам CSPRNG $\ne$ TRNG. А еще есть штука с одноразовым блокнотом. Или их тоже нет..?
Paul Uszak avatar
флаг cn
Но я не понимаю твоего последнего предложения про _"энтропию"_.
SAI Peregrinus avatar
флаг si
Вы верите, что квантовая механика недетерминистична. Я нет: предположение о недетерминизме не обязательно для математики. Итак, я провожу различие между «настоящими» случайными процессами и просто хаотическими. Невозможно определить разницу по результату, так что это метафизический вопрос. Так же, как невозможно провести «следующий битовый тест» в физической вселенной.
SAI Peregrinus avatar
флаг si
Энтропия информации связана с объемом, который данный набор состояний системы занимает в пространстве состояний всех возможных состояний этой системы, и вероятностью данного пути через пространство состояний, входящего в этот объем. Его часто путают со «случайностью» или «недетерминизмом» (разные понятия). Настаивание на существовании «истинной» случайности может привести к путанице, особенно при использовании энтропии для описания кажущихся случайными систем.
Paul Uszak avatar
флаг cn
@SAIPeregrinus Гейзенберг, Борн, Бор и их приятель Шрёдингер не согласятся с вами.
SAI Peregrinus avatar
флаг si
А Бом, Эверетт и другие указали бы на детерминистские формулировки. Я сомневаюсь, что Гейзенберг, Борн или Бор ошибочно настаивали бы на том, что копенгагенская интерпретация, которую они предпочитают, является единственно правильной интерпретацией или что математика требует недетерминизма. Они расходятся во мнениях относительно того, какие предположения проще, а не о том, что является предположениями.

Ответить или комментировать

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