Рейтинг:2

CTR перекрывается со случайным IV

флаг cn

Проблема:

Я немного беспокоюсь о повторениях счетчика в режиме CTR при использовании случайного IV.

  • Если вы разделите его (например, половина IV, половина счетчика), это увеличит шансы того же IV (он меньше) и ограничит длину сообщения (если меньше половины).
  • Если вы начинаете с полного блока IV, счетчики могут перекрываться.

Я хотел бы как-то получить полный блок IV и счетчик полублока без перекрытий.

Предложенное решение:

Вместо того, чтобы использовать случайный IV как одноразовый номер в счетчике, мы создаем новый ключ, зашифровывая IV ключом. Затем мы используем этот новый ключ для шифрования. Счетчик начинается с полунуля и с половины IV или половинкой отмычки сделать многоцелевые атаки Сильнее.

Предположим, что ключ, IV и блочный шифр имеют одинаковый размер.

$k_{данные} = E_{k_{мастер}}(IV)$

$keystream_i = E_{k_{данные}}(половина(IV) || counter_i)$

Это лучше/хуже?

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

kelalaka avatar
флаг in
Уже существует счетчик рекомендаций/LFSR [NIST 800-38-a](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf) и [AES CTR: Random IV](https: //crypto.stackexchange.com/q/87064/18298)
флаг cn
Первый подход идеален, но не практичен. Второй подход со случайным IV ограничен количеством сообщений или длиной сообщений, как уже упоминалось.
Maarten Bodewes avatar
флаг in
Я думаю, что лучше всего думать о вашей конструкции как о KBKDF. В этом случае возникает вопрос: насколько безопасен этот KDF? Но есть несколько вещей, которые мне неясны. Если вы пишете $k = E_k(IV)$, значит ли это, что $k$ будет заменено? В этом случае вы создали протокол с отслеживанием состояния. Обычно у вас есть $k_{master}$ и несколько $k_{data}$. Кроме того, должны ли мы всегда предполагать 128-битный AES? Одноблочное шифрование не будет генерировать 192- или 256-битный ключ.
флаг cn
Ключ заменяется только на сообщение. Он не меняет мастер-ключ. Я предполагаю, что ключ имеет тот же размер, что и блочный шифр.
Maarten Bodewes avatar
флаг in
Я не знаю, откуда вдруг взялась эта $half(k_{master})$, но обычно вы никогда не включаете ключевую информацию в свой ключевой поток. Если я правильно помню, у вас сначала был счетчик с нулевым отсчетом.
флаг cn
Я упомянул это как необязательный. Это сделано для того, чтобы усложнить многоцелевые атаки. Это также может быть $half(IV)$, но я подумал, что $k_{master}$ лучше, потому что это секрет.
флаг cn
Если подумать, я думаю, что $half(IV)$ будет безопаснее. Это менее вероятно, чтобы повториться.
Рейтинг:-1
флаг mc

Если вы можете сказать, что существует ограничение на количество данных, которые шифруются в одном потоке, вы можете разделить IV на случайную часть и встречную часть (например, 64 случайных бита, генерируемых один раз для каждого потока) и встречную часть ( начиная с 0). Вы можете разделить его как хотите, вам просто нужно беспокоиться о проблеме дня рождения для случайного размера.

Или просто используйте разные ключи для каждого потока и начните счетчик с 0. В этой ситуации не нужно беспокоиться о перекрытии.

флаг cn
Да, но в этом случае с 64-битным случайным IV немного мало. Как описано здесь: https://crypto.stackexchange.com/questions/1849/why-should-i-avoid-using-a-randomized-iv-for-ctr-mode
флаг cn
Считаете ли вы, что мое предложенное решение (получение ключа из случайного IV) так же хорошо, как использование разных ключей для каждого потока?
Swashbuckler avatar
флаг mc
@LightBit Если вы столкнулись с проблемой, о которой они говорят, у вас уже есть другие более серьезные проблемы. Есть исследование, которое предполагает, что режим CTR является своего рода дырявым, и вы должны шифровать только столько данных с помощью ОДНОГО КЛЮЧА, сколько вы делаете с режимом CBC, который для меня составляет около 64 ГБ (в зависимости от того, как долго вы хотите хранить данные). Это намного меньше данных, чем они рассматривают.
Swashbuckler avatar
флаг mc
Что касается получения ключа из случайного IV, я бы не стал. IV не является секретом, ключ должен быть секретным. Если вы использовали фиксированный процесс для получения ключа из IV, злоумышленник может повторить этот процесс и получить ключ.
флаг cn
Чтобы получить ключ из IV, я бы зашифровал его мастер-ключом. Таким образом, полученный ключ будет секретным.

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

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