Рейтинг:0

Стандартный способ генерации псевдослучайных байтов по запросу

флаг in

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

Я также рассмотрел некоторые специальные конструкции с отслеживанием состояния, использующие XOF, которые поддерживают текущий счетчик. Интересно, что такое «стандартный» и эффективный способ сделать это.

Paul Uszak avatar
флаг cn
Есть ли какой-то нюанс, который не очевиден из названия вопроса? Почему бы просто не сделать стандартную вещь: CSPRNG?
Maarten Bodewes avatar
флаг in
@PaulUszak Одна вещь, которая может быть проблемой, заключается в том, что многие * реализации * CSPRNG загружаются системой, могут быть повторно заполнены и т. Д. Таким образом, они ненадежны для постоянной генерации одних и тех же битов. Некоторые CSPRNG также могут указывать конкретный размер скорости, вот и все. Но да, если это просто получение случайных байтов или целых чисел: используйте CSPRNG.
Рейтинг:0
флаг my

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

Нет; стандартному SHAKE XOF не нужно заранее знать, какой длины вывод он может генерировать; нет никаких причин, по которым вы не можете продолжать «сжимать», чтобы получить столько результатов, сколько вам нужно.

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

Myath avatar
флаг in
Я смотрю хеш-библиотеку Python https://docs.python.org/3/library/hashlib.html, и похоже, что у нее нет такого API.
poncho avatar
флаг my
@Myath: я подозреваю, что многократный вызов shake.digest(length) будет генерировать последовательные части вывода встряхивания.
JamesTheAwesomeDude avatar
флаг cn
@poncho К сожалению, это не так; Я только что проверил это. Похоже, что @Myath придется использовать стороннюю библиотеку, такую ​​как [`pycryptodome`](https://pycryptodome.readthedocs.io/en/stable/src/hash/shake256.html) — ни стандартную ни [`pyca/cryptography`](https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#cryptography.hazmat.primitives.hashes.SHAKE256), как ни странно, не поддерживает эту функциональность.

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

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