Рейтинг:1

Генератор PRNG, который может повторять блоки

флаг tf
Tom

Давайте использовать AES в качестве потокового шифра и использовать в качестве входных чисел $1,2,3,...$. Таким образом, мы должны получить случайные блоки, и каждый блок будет отличаться друг от друга.

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

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

Большинство шифров удовлетворяют условию, что они генерируют уникальные значения, но в этом случае мы можем получить такое же шифрование того же блока менее чем за $2^{128}$ блоки.

Maarten Bodewes avatar
флаг in
Между прочим, есть несколько способов создать потоковый шифр из AES; похоже, вы явно описываете AES в режиме CTR, а не, например. CFB или OFB.
Рейтинг:2
флаг in

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

Скажем, вы использовали бы CSPRNG для создания набора 128-битных блоков, размер блока которых соответствует AES. Миллион примерно $2^{20}$. вы ожидаете шанса $1 - (1 - {1 \более 2^{128}})^{1000000} \приблизительно 2^{-108}$ для повторения начального блока, и ${1000000 \более 2^{128}} \приблизительно 2^{-(128 - 20)} = 2^{-108}$ для любого столкновения в первом миллионе блоков. Причина, по которой эти значения примерно одинаковы, заключается в том, что миллион почти ничего не значит для 128-битных значений. Как видите, вероятность столкновения настолько мала, что ею можно пренебречь. Вот почему поточный шифр, такой как AES-CTR, можно рассматривать как сам CSPRNG.

Как правило, CSPRNG имеют большое внутреннее состояние, а это означает, что его невозможно узнать. когда ГПСЧ повторяется. Что еще более важно, вероятность того, что они попали в цикл чрезвычайно низкий (если цикл сработает, CSPRNG будет генерировать один и тот же - большой - шаблон в повторении). Поэтому из-за непредсказуемости вы можете использовать CSPRNG в качестве потокового шифра. Это верно и для AES / CTR, конечно, если вы посмотрите на шаблоны, отличные от 128 бит точно в нужном месте. Очевидно, что шаблон одного бита будет повторяться очень сильно часто - просто вы не можете знать, какое значение бита вы найдете в данной позиции. Проблема с AES-CTR заключается в том, что он попадет в цикл точно после того, как счетчик будет исчерпан.

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

Конечно, AES-CTR, как правило, будет намного быстрее, чем CSPRNG. Если вам не нравится AES или у вас нет аппаратного ускорения, то вам обычно подойдет потоковый шифр, такой как ChaCha. Обычно вы должны использовать эти шифры в режиме аутентификации с использованием GMAC (AES-GCM) или Poly1305.

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

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

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