Рейтинг:0

Синхронизированная генерация случайных чисел

флаг cn

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

  1. В начале соединения две конечные точки выполняют алгоритм Диффи-Хеллмана для получения общего ключа. $К$.
  2. Затем EP1 необходимо сгенерировать случайное 48-битное значение. $R$ и отправить его в EP2. Это случайное значение должно обладать следующими двумя свойствами: злоумышленник не может угадать следующие случайные значения, которые генерирует EP1, и (b) EP2 может проверить, что $R$ действительно происходит из EP1.
  3. Две конечные точки также совместно используют значение информации о времени. $Т$, который похож на счетчик времени и является 64-битным. Я не знаю большего, я просто знаю, что это значение уникально в каждой ассоциации и известно обоим EP.
  4. Под ассоциацией я подразумеваю полную последовательность шагов 1-4 выше. Если EP отключаются, они запускают эти сообщения с самого начала, но оба EP удаляют ключ. $К$ и установить новую в следующей ассоциации.

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

ЭП1 ЭП2
-----------------------------------------|
1.s1 = AES-CTR(K,T||счетчик,K) --------->|
2.R1 = s1 XOR K--------------------------------------->| 
                                         | 3. s1' = AES-CTR(K,T||счетчик,K)
                                         | 4. R1' = s1' Исключающее ИЛИ K
                                         | Проверить R1' == R1

На шаге 1 EP1 использует AES в режиме CTR с ключом $К$, поле nonce/counter должно быть конкатенацией $T||счетчик$, и сообщение, которое нужно зашифровать, снова $К$.

На шаге 2 случайно выглядящее значение $s_1$ с шага 1 xored с тем же ключом $К$ и последние 48 бит отправляются в EP2. я повторно использую $К$ в качестве входного сообщения просто потому, что это известное значение для EP2, и поэтому он может проверить зашифрованное значение. Но дайте мне знать, если это плохая практика.

На шагах 3 и 4 EP2 выполняет те же вычисления, поскольку все значения являются общими, а на шаге 5 проверяет, $R_1'==R_1$. Если это так, это означает, что EP1 аутентифицирован, поскольку он должен использовать правильный ключ. $К$, а также $R_1$ значения не должны быть предсказуемы.

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

Maarten Bodewes avatar
флаг in
Информация о времени может быть угадана, я полагаю, она полезна только против повторных атак. Можем ли мы предположить, что начальное число находится где-то между 128 и 256 битами? Я предполагаю, что для CSPRNG мы можем предположить, что первые 3 шага не лучше, чем «ГСЧ (информация о времени | начальное число)», между прочим (объединение обоих начальных значений).
Jimakos avatar
флаг cn
@MaartenBodewes, спасибо. Информация о времени отправляется в открытом виде и может быть перехвачена кем угодно. Семя может быть между 128-256 битами. Первые три шага на самом деле представляют собой небольшую адаптацию стандарта ANSI X9.17. Вставка сюда из [wikipedia](https://en.wikipedia.org/wiki/Cryptographically-secure_pseudorandom_number_generator#Standards): Получает текущую дату/время D с максимально возможным разрешением. Вычисляет временное значение t = TDEAk(D) Вычисляет случайное значение x = TDEAk(s t), где â обозначает побитовое исключающее или. Обновляет начальное значение s = TDEAk(x t)
Aman Grewal avatar
флаг gb
Возможно, по касательной, но как обеспечить их синхронизацию? EP1 отправляет данные EP2, но EP2 никогда их не получает. EP1 продвигает свое состояние, а EP2 — нет.
Maarten Bodewes avatar
флаг in
TDEA (то есть тройной DES) — это блочный шифр, PRP, а не RNG. Так что в этом случае отдельные шаги имеют больше смысла. Конечно, это также означало бы 8-байтовое начальное число, что пагубно для безопасности, но главное отличие, конечно же, в $k$: ключ, обеспечивающий безопасность. Для бесключевого генератора случайных чисел эта схема не имеет смысла.
Jimakos avatar
флаг cn
@AmanGrewal Я не включил все части протокола просто потому, что совершенно ничего не знаю об этом. Мы можем просто предположить, что информация о времени предназначена для синхронизации двух конечных точек.
Jimakos avatar
флаг cn
@MaartenBodewes действительно, именно поэтому я явно не указал TDEA, а скорее общий ГСЧ, который может принимать более крупные семена. Однако разве это не так, что я могу просто использовать AES-CTR в режиме 128/256 в качестве ГСЧ? В этом случае я могу использовать доступный ключ (seed) в качестве ключевого ввода для алгоритма и, возможно, 128/256-битный хэш (timing_info | seed) в качестве другого ввода. Что вы думаете?
Maarten Bodewes avatar
флаг in
Я думаю, что это не оставило бы большую часть исходной схемы на месте, и что входной параметр `seed` больше не нужен, так как случайные значения уже полностью зависят от `seed`. Это также означает, что начальное число должно соответствовать требованиям симметричного (AES) ключа (полностью рандомизированного), что может накладывать дополнительные требования на схему. Затем любой анализ безопасности должен выполняться отдельно от исходной схемы.
Jimakos avatar
флаг cn
Я полностью переформулировал вопрос, не могли бы вы проверить эту версию, так как она может прояснить ситуацию?

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

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