В моем новом челлендже-проекте мой сервер когда-то транслировал по 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 был использован из-за простоты реализации, устройства, участвующие в процессе расшифровки, являются маломощными датчиками и имели готовый к использованию этот шифр «прямо из коробки».