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