Рейтинг:1

Шифрование небольших данных с фиксированным ключом и инкрементным IV

флаг br

У меня есть устройство Bluetooth, которое периодически отправляет небольшой пакет (не получая). Я хочу зашифровать и аутентифицировать данные с помощью AES-128. Он имеет встроенный случайный и уникальный ключ, который записывается в память при производстве и известен получателю. У меня есть следующая структура сообщения:

Прилавок Полезная нагрузка Магия Прокладка
4 байта 10 байт 4 байта 2 байта

Прилавок не зашифрован и будет увеличиваться последовательно для каждого сообщения (никогда не повторяться) и будет использоваться как IV в режиме AES-CTR. Это также послужит для защиты от повторных атак, т.е. более старые пакеты будут игнорироваться.

Магия является фиксированным и известным числом для проверки того, что расшифрованное сообщение не является тарабарщиной и представляет собой достоверные данные.

Прокладка игнорируется на стороне получателя и используется для завершения зашифрованных данных до 16 байт.

Payload + Magic + Padding будут зашифрованы вместе перед отправкой, т.е.

Прилавок Зашифрованные данные
4 байта 16 байт

Вопросы:

  1. Может ли пассивный слушатель взломать это шифрование и/или создать законные сообщения?
  2. Это также обеспечивает аутентификацию, поскольку никто, кроме владельца ключа, не может создать такое сообщение?
  3. Можно ли использовать IV/nonce с добавлением 0 к счетчику? Должен ли я добавлять счетчик к случайному числу (которое также сгорает на заводе)?
  4. Что поставить на отступ, 0 или случайные числа? Это вообще необходимо?
  5. Логично ли использовать магическое число таким образом? Нужно ли генерировать случайную магию и отправлять ее как в незашифрованном, так и в зашифрованном виде для проверки получателем?
  6. Каков правильный/хорошо зарекомендовавший себя метод шифрования и аутентификации в таких условиях?
Рейтинг:4
флаг in
  1. Может ли пассивный слушатель взломать это шифрование и/или создать законные сообщения?

Пассивный слушатель не должен иметь возможности отменить AES, поэтому получение открытого текста должно быть невозможным, если только каждый сеанс не перезапускается.Однако эта схема будет уязвима для атак оракула с открытым текстом. Читай дальше.

Что касается создания законных сообщений: это не пассивная атака.

  1. Это также обеспечивает аутентификацию, поскольку никто, кроме владельца ключа, не может создать такое сообщение?

Нет. Если вы играете человека посередине, вы можете изменить каждый бит сообщения и оставить магию нетронутой. В режиме CTR все биты открытого текста/зашифрованного текста не зависят друг от друга. Это также позволяет злоумышленнику выполнять атаки оракула с открытым текстом (изменяя часть открытого текста, а затем определяя, как система реагирует на это).

  1. Можно ли использовать IV/nonce с добавлением 0 к счетчику? Должен ли я добавлять счетчик к случайному числу (которое также сгорает на заводе)?

До тех пор, пока счетчик никогда не повторяется, режим CTR относительно безопасен — до тех пор, пока он используется правильно, что здесь не так.

  1. Что поставить на отступ, 0 или случайные числа? Это вообще необходимо?

Нет, для режима CTR заполнение не требуется.

  1. Логично ли использовать магическое число таким образом? Нужно ли генерировать случайную магию и отправлять ее как в незашифрованном, так и в зашифрованном виде для проверки получателем?

Обычно вы используете режим аутентификации для создания тега аутентификации. 32 бита обычно слишком мало, но в зависимости от варианта использования этого может быть достаточно для систем реального времени и т. д.

  1. Каков правильный/хорошо зарекомендовавший себя метод шифрования и аутентификации в таких условиях?

Если у вас просто AES, то режим CCM будет нормальным режимом.


NB

  • Схема, которую вы сейчас описываете, кажется более подходящей для прямого шифрования AES или AES-CBC. Например, если вы дополните и зашифруете счетчик, вы можете использовать его как IV для AES-CBC. Если бы вы поставили значение 02 в байтах заполнения сообщения, тогда у вас будет заполнение, совместимое с PKCS # 7. Преимущество этого заключается в том, что биты в блоке шифрования сообщения AES теперь все зависят друг от друга, поэтому магия будет работать несколько лучше.

  • Ваша текущая схема, кажется, ограничена только одним сеансом.Обычно вы будете получать новые сеансовые ключи для каждого сеанса.

  • Даже если режим изменен на CBC, $1 \более 2^{32}$ вероятность того, что злоумышленник создаст сообщение с действительной магией, просто случайно попытавшись. Остальная часть сообщения, вероятно, будет искажена, но обработка искаженного текста также может быть не очень хорошей идеей. Возможно, против этого могут быть реализованы дополнительные меры противодействия (однако большинство из них могут привести к DoS-атакам).

флаг br
Спасибо за подробный ответ. Я предполагаю, что ключевая уязвимость здесь заключается в следующем: «В режиме CTR все биты открытого текста / зашифрованного текста независимы друг от друга», но я не совсем понимаю, что это на самом деле означает.
флаг br
Нет гарантии, что получатель получит все сообщения, на самом деле сброс пакетов довольно распространен. Можем ли мы восстановить открытый текст в этом случае при использовании AES-CBC? Также полезная нагрузка может быть разной для каждого сообщения.
Maarten Bodewes avatar
флаг in
В режиме CTR вы выполняете XOR открытого текста с потоком ключей побитно. Таким образом, любой переворот битов зашифрованного текста просто переворачивает биты открытого текста в том же месте. т.е. вы можете изменить любые биты открытого текста, не влияя на магию.
Maarten Bodewes avatar
флаг in
В схеме, которую я описал, я дополнил и зашифровал счетчик, чтобы его можно было использовать в качестве IV.Это делает расшифровку CBC зависимой только от счетчика и, конечно же, от ключа.
флаг br
Теперь все более ясно. Я прочитал спецификацию режима NIST CCM, которая оказалась на удивление легко читаемой, и я думаю, что этот режим подходит для моего приложения. Насколько я понимаю, он не страдает уязвимостями магической схемы, которая изначально была неудачным выбором. Спасибо за помощь.

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

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