Рейтинг:2

Шифрование с помощью AES128 (ECB) и проверка ключа

флаг cn

В моем новом челлендже-проекте мой сервер когда-то транслировал по Wi-Fi «луковицу», состоящую из трех слоев, зашифрованных с помощью AES128 (ECB) — 16 байт.

Я использую WiFi Beacon Frame для передачи Onion по воздуху.

«Лук» выглядит примерно так, как на картинке ниже.

введите описание изображения здесь

Каждый слой шифруется своим ключом. Ключи к каждому уровню известны только серверу и устройствам, которые должны их расшифровывать. Ключи сделаны из MAC-адреса для простоты.

  • Первый слой всегда представляет собой случайную строку длиной 16 бит, то есть «Hello World», зашифрован ключом устройства 1
  • Второй уровень — это первый уровень, зашифрованный ключом устройства 2.
  • Третий уровень — это второй уровень, зашифрованный ключом устройства 3.

Чтобы правильно расшифровать луковицу, первый широковещательный слой равен 3, так как мы расшифровываем в обратном порядке.

После того, как «Луковица» построена, сервер транслирует уровень 3 через WiFi Beacon Frame, и любой, кто может его прослушать, может попытаться расшифровать данные, но только выбранные устройства могут расшифровать их должным образом, поскольку слои зашифрованы их ключами. .

Когда каждый из них расшифровывает слой, он:

  • сообщает серверу через TCP/IP хэш расшифрованного значения (подтверждение)
  • снимает «слой»
  • передает остальную часть луковицы обратно через WiFi (конструирует кадр-маяк).

Как только все слои расшифрованы, работа выполнена.

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

Вопрос

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

Примечание:

ECB был использован из-за простоты реализации, устройства, участвующие в процессе расшифровки, являются маломощными датчиками и имели готовый к использованию этот шифр «прямо из коробки».

kelalaka avatar
флаг in
Mac-then-encrypt, однако, похоже, вы ограничиваете себя 16-байтами, поэтому это невозможно до последнего уровня.
флаг cn
@kelalaka спасибо! Какой минимум мне нужен (в байтах), чтобы включить MAC на каждом уровне?
kelalaka avatar
флаг in
Это зависит от того, какую вероятность вы хотите. 8-бит 1/64....
флаг cn
Понятно, я могу доходить до 64b на слой. Есть ли какой-то конкретный тип MAC, который я должен выбрать?
Paul Uszak avatar
флаг cn
Вы используете термины Wi-Fi и радио как синонимы. ЭТО ОПАСНО. Зашифрованная радиопередача незаконна в Великобритании, США и большинстве других стран. Граждане не имеют права на неприкосновенность частной жизни в эфире :-(
флаг cn
@PaulUszak - Хорошо, чтобы было ясно, что это WiFi - я не использую ничего, кроме стандарта WiFi, и «Лук» транслируется с кадром маяка 802.11.
kelalaka avatar
флаг in
Как быстрее всего использовать хэш BLAKE2? Вам не нужна аутентификация, верно? Просто честности будет достаточно.
флаг cn
@kelalaka это правильно, все, что мне нужно, это честность! Большое спасибо за вклад
Рейтинг:2
флаг in

Поскольку вам нужна только проверка, вы можете просто использовать быструю хеш-функцию, такую ​​​​как BLAKE2, для вашей цели.

$$ c_0 = E_{k_1}(m_0) $$ затем добавьте 64-битный (или более) хэш BLAKE2 зашифрованного текста

$$m_1 = c_0\mathbin\|BLAKE2(c_0)\mid_{64}$$

$$ c_1 = E_{k_2}(m_1) $$ затем добавьте 64-битный (или более) хэш BLAKE2 зашифрованного текста

$$m_2 = c_1\mathbin\|BLAKE2(c_1)\mid_{64}$$

$$ c_3 = E_{k_3}(m_2) $$

Теперь отпустите $c_3$. После расшифровки клиент может проверить хэш. Для случайного ключа он будет иметь $1/2^{64}$ вероятность соответствия добавленному хэшу. Обратите внимание, что когда $m_2$ неверно, добавленный хэш не будет правильным значением, а будет случайным значением.

Если вы используете режим CBC для шифрования (хотя кажется, что ECB подходит для ваших целей), вы также можете извлечь выгоду из заполнения (ECB также понадобится). Режим CBC всегда требует заполнения PKCS#7.Если сообщение не расшифровано правильно, заполнение не удастся (это используется в атаках оракула заполнения). Бывают и ложные срабатывания. Например, с вероятностью 1/256 заполнение будет правильным для неправильного ключа. Так что целостность лучше подойти, чтобы идти.


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

$$ c_0 = E_{k_1}(m_0) $$ затем добавить $\texttt{Слой1}$ нить. Это самое быстрое.

$$m_1 = c_0\mathbin\|\texttt{Layer1}$$

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

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