86

Я пишу систему VPN, которая шифрует (AES256) свой трафик через сеть (зачем писать свою собственную, когда там уже 1 000 001 других? Что ж, у меня есть специальное задание для конкретной задачи, которая никому из других не подходит).

По сути, я хочу обдумать ваши мысли, чтобы убедиться, что я делаю это в правильном порядке.

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

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

Я, вероятно, буду использовать zlib для сжатия.

Узнайте больше на блоге Super User.

7 ответов7

174

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

Сжатие перед шифрованием.

22

Сжатие перед шифрованием. Сжатые данные могут значительно различаться при небольших изменениях в исходных данных, что затрудняет проведение дифференциального криптоанализа.

Кроме того, как указывает г-н Альфа, если вы сначала зашифруете, результат будет очень трудно сжать.

3

Даже если это зависит от конкретного варианта использования, я бы посоветовал Encrypt-then-Compress. В противном случае злоумышленник может получить информацию из числа зашифрованных блоков.

Мы предполагаем, что пользователь отправляет сообщение на сервер, а злоумышленник может добавить текст к сообщению пользователя перед отправкой (например, с помощью javascript). Пользователь хочет отправить некоторые разумные данные на сервер, а злоумышленник хочет получить эти данные. Поэтому он может попытаться добавить разные сообщения к данным, которые пользователь отправляет на сервер. Затем пользователь сжимает свое сообщение и добавленный текст от злоумышленника. Мы предполагаем сжатие DEFLATE LZ77, поэтому функция заменяет ту же информацию указателем на первое появление. Поэтому, если злоумышленник может воспроизвести открытый текст дыры, функция сжатия уменьшает размер простого текста до исходного размера и указателя. А после шифрования злоумышленник может подсчитать количество блоков шифра, чтобы он мог видеть, были ли его добавленные данные такими же, как данные, отправленные пользователем на сервер. Даже если этот случай звучит немного сконструирован, это серьезная проблема безопасности в TLS. Эта идея используется атакой CRIME для утечки файлов cookie в соединении TLS для кражи сеансов.

источник: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf

2

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

1

Сжатие до шифрования, как было указано ранее. Сжатие ищет структуру, которую оно может сжать. Шифрование скремблирует данные, чтобы избежать обнаружения структуры. При первом сжатии вы, скорее всего, получите файл меньшего размера и, следовательно, меньше полезной нагрузки для передачи. Шифрование выполнит свою работу независимо от того, сжато оно или нет, и, как уже указывалось ранее, скорее всего, будет сложнее выполнить дифференциальный криптоанализ сжатого файла.

1

Сжатие должно быть сделано до шифрования. пользователь не хочет тратить время на ожидание передачи данных, но ему / ей нужно, чтобы это было сделано немедленно, не теряя времени.

0

Сжатие уменьшает информационную энтропию. Максимальное сжатие делает энтропию минимальной. Для идеально зашифрованных данных (шум) максимальная и минимальная энтропия совпадают.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .