Лучшие практики для шифрования непрерывных/маленьких данных UDP

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

Так как я использую UDP, нет никакого способа использовать SSL/TLS, таким образом, я должен зашифровать один только каждый пакет, так как протокол без установления соединения/ненадежен/нерегулируемый.

Прямо сейчас я использую 128-разрядный ключ, полученный из пароля от пользователя и AES в режиме CBC (PBE с помощью AES-CBC). Я решил использовать случайную соль с паролем для получения, 128-разрядный ключ (предотвратите атаку с подбором по словарю на пароле), и, конечно, используйте IVS (для предотвращения статистического анализа для пакетов).

Однако я обеспокоен немногими вещами: Каждый пакет содержит небольшой объем данных (как несколько целочисленных значений на пакет), который сделает зашифрованные пакеты уязвимыми для нападений известного простого текста (который приведет к помощи взломать ключ). Кроме того, так как ключ шифрования получен из пароля, это сделает ключевое пространство путем меньше (я знаю, что соль поможет, но я должен отправить соль через сеть однажды, и любой может получить его). Учитывая эти две вещи, любой может осуществить сниффинг и хранить отправленные данные и попытаться взломать ключ. Хотя этот процесс мог бы занять время, после того как ключ взламывается, все хранившие данные будут дешифрованы, который будет настоящей проблемой для моего приложения.

Таким образом, мой вопрос, каковы лучшие практики для отправки/шифрования непрерывных маленьких данных с помощью протокола без установления соединения (UDP)? Действительно ли моим путем является лучший способ сделать это?... текший?... Излишество?

Обратите внимание на то, что я не прошу 100%-е безопасное решение, поскольку нет такой вещи.

21
задан Brian Tompsett - 汤莱恩 17 January 2016 в 23:07
поделиться

2 ответа

У вас есть несколько вариантов. Вы можете использовать DTLS, версию TLS, адаптированную для дейтаграмм. Он указан в RFC и реализован в библиотеке openssl. Вы также можете использовать протокол IKE / IPsec и использовать UDP-инкапсуляцию части IPsec. Обычно IPsec доступен на уровне ОС. Вы также можете использовать OpenVPN , который выглядит как гибрид TLS для обмена ключами и проприетарного протокола шифрования пакетов на основе UDP.

15
ответ дан 29 November 2019 в 21:58
поделиться

Если ваша проблема в том, что данные слишком малы, как насчет расширения данных случайными байтами? Это затруднит угадывание открытого текста.

3
ответ дан 29 November 2019 в 21:58
поделиться