Рейтинг:1

Получение случайных чисел из случайных чисел

флаг ua

Если у меня есть "действительно случайное число" $К$ из $L$ битов (что бы ни значило "истинно случайное"... является ли это значение из нормального распределения действительно случайным числом, или только равномерное распределение считается "истинно случайным"?) и "истинно случайное число" $Т$ из $M\le L$ биты,

какие арифметические/побитовые алгоритмы среди $К$ и $Т$ может генерировать новые действительно случайные числа? Если $М=L$, является $К + Т$ или же $К\ xor\ T$ действительно случайное число? или если $M\ltL$, делать такие методы, как HKDF-расширить-метка, HKDF-экстракт, или просто ша256 над $К$ и $Т$ генерировать действительно случайные числа? (например, разделение $К$ в $L/M$ блоки $ млн $ биты, примените некоторые из этих методов и объедините их выходные данные).

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

Пара догадок (при условии $М=L$ для простоты), $К + Т$ действительно случайное число, но $K\ побитовое\_и\ T$ не является.

ПРИМЕЧАНИЕ: Мой вопрос касается контекста шифров одноразовых блокнотов. Я хочу сохранить зашифрованный текст и $К$ отдельно и передавать его по безопасному каналу только тогда, когда требуется расшифровка, но вместо передачи $К$ сам по себе, который может быть очень длинным, поскольку он должен соответствовать длине открытого текста (которая может быть очень длинной), я думаю о вычислении $К$ производным от $J$ (размера $L$) и $Т$ размера $ млн $, оба являются случайными числами. $J$ хранится на стороне клиента, $Т$ хранится на стороне сервера и загружается по защищенному каналу, а $К$ окончательно создается на стороне клиента и удаляется из памяти сразу после расшифровки. Мой вопрос выше, наконец, о том, какую функцию вывода использовать, чтобы $К$ неотличимо от действительно случайного числа, предполагающего $J$ и $Т$ являются действительно случайными числами.

Maarten Bodewes avatar
флаг in
Кажется, вы путаете $M$ (количество бит $T$) и $T$ в своем вопросе.
sanscrit avatar
флаг ua
@MaartenBodewes Да, ты был прав. Спасибо. Исправлено сейчас.
Maarten Bodewes avatar
флаг in
Я думаю, вы забыли о 4 из них, пытались их исправить, пожалуйста, просмотрите.
Рейтинг:3
флаг cn

Вы задали много вопросов в этом вопросе, но три выделяются: -

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

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

гистограмма

Есть нет общепринятое название этого дистрибутива. У него есть среднее значение и стандартное отклонение, но нет алгебраического квантиля, асимметрии или энтропии. Он просто существует эмпирически (с $H_\infty\около 6$ бит/байт).

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

Единственным важным свойством является то, что $ \operatorname{X}: \{0,1\}^n \to \ \{0,1\}^m $ с $ м \lt п $. $Х$ может быть много вещей, таких как экстракторы фон Неймана, функции CRC, матрицы, LFSR и общие (универсальные) хеш-функции. Однако важным моментом является то, что $Х$ не имеет какой-либо формы криптографической функции. Это заблуждение так думать, но безопасность возникает из-за действительно случайных входных битов длины $n$.

Я думаю о том, чтобы хранить на стороне клиента случайное число J длины L, вместо этого передавать предварительно сгенерированный «действительно случайный токен» T (уникально привязанный к этому конкретному открытому тексту) и генерировать K на стороне клиента...

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

sanscrit avatar
флаг ua
Я улучшил свое последнее примечание к вопросу. Я надеюсь, что теперь это более ясно.
Рейтинг:2
флаг ru

С точки зрения побитовой арифметики/побитовых операторов на равномерно распределенных независимых случайных числах (в криптографии обычно используется равномерное случайное число, но есть исключения, например, в решетчатой ​​криптографии), XOR дает равномерное распределение, + дает треугольное распределение, И дает распределение, где $ P (N) = 0,25 ^ {w (N)} 0,75 ^ {L-w (N)} $ куда $w$ - вес Хэмминга, произведение сложный, разность треугольная, ИЛИ дает распределение типа И, но с ролями $ ш (N) $ и $ L-w (N) $ наоборот, НЕ-ИЛИ имеет то же распределение, что и И, а НЕ-И имеет то же распределение, что и ИЛИ.

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

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

sanscrit avatar
флаг ua
Итак, основываясь на вашем ответе, я предполагаю, что если у меня есть два ключа A и B, каждый из которых имеет L битов энтропии, A xor B все равно будет иметь L битов энтропии, верно?
Daniel S avatar
флаг ru
Да, это так, если предположить, что их поколение является независимым. (Очевидный контрпример: A=B).
Рейтинг:1
флаг fr

Все упомянутые вами алгоритмы (HKDF и SHA-256) являются псевдослучайными. В общем, любой подход, который вы собираетесь использовать здесь для преобразования некоторых действительно случайных чисел в другие последовательности, также является псевдослучайным. Это потому, что эти алгоритмы детерминированы: если вы введете одни и те же данные (энтропию), вы получите те же результаты.

Истинные случайные числа исходят из физического источника и не являются детерминированными. Это может быть радиоактивный распад, тепловой шум, автогенераторы или другие типы источников. Поскольку они не обязательно производят одинаковое количество единиц и нулей, а сбой неизвестен, обычно используется какая-то фильтрация и обработка, которая может быть криптографическим алгоритмом, таким как AES-CBC-MAC или SHA-256, или каким-то другим алгоритмом. устранение или уменьшение предвзятости, например XOR или устранение смещения фон Неймана, или и то, и другое.

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

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

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

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

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