У меня есть приложение, в котором я должен отправлять несколько небольших данных в секунду по сети, используя UDP. Приложение должно отправлять данные в режиме реального времени (без ожидания). Я хочу зашифровать эти данные и убедиться, что то, что я делаю, максимально безопасно.
Поскольку я использую UDP, я не могу использовать SSL / TLS, поэтому мне приходится шифровать каждый пакет в отдельности, так как протокол не подключен / ненадежен / не регулируется.
Сейчас я использую 128-битный ключ, полученный из ключевой фразы пользователя, и AES в режиме CBC (PBE, использующий AES-CBC). Я решил использовать случайную соль с парольной фразой для получения 128-битного ключа (предотвратить атаку по словарной фразе) и, конечно, использовать IV (для предотвращения статистического анализа пакетов).
Однако меня беспокоит несколько вещей:
Каждый пакет содержит небольшой объем данных (например, пару целочисленных значений в каждом пакете), что делает зашифрованные пакеты уязвимыми для атак с использованием открытого текста (что упрощает взлом ключа). Кроме того, поскольку ключ шифрования является производным от ключевой фразы, это позволит уменьшить пространство для ключей (я знаю, что соль поможет, но мне нужно отправить соль через сеть один раз, и любой сможет ее получить). Учитывая эти две вещи, любой может прослушать и сохранить отправленные данные и попытаться взломать ключ. Хотя этот процесс может занять некоторое время, после взлома ключа все сохраненные данные будут расшифрованы, что станет реальной проблемой для моего приложения.
Итак, мой вопрос: каковы наилучшие практики для отправки / шифрования непрерывных небольших данных с использованием протокола без установления соединения (UDP)?
Мой путь - лучший способ сделать это? ... потекла? ... Overkill?
Обратите внимание, что я не прошу о 100% -ном безопасном решении, поскольку такой вещи нет.