Я пишу VPN-систему, которая шифрует (AES256) свой трафик через сеть (зачем писать свою собственную, когда уже есть 1 000 001 других? Ну, моя - специальная для конкретной задачи, которая не подходит ни для одной другой).
По сути, я хочу обдумать твои мысли, чтобы убедиться, что я делаю это в правильном порядке.
На данный момент пакеты просто шифруются перед отправкой, но я хочу добавить к ним некоторый уровень сжатия, чтобы немного оптимизировать передачу данных. Не сильное сжатие - я не хочу все время максимально использовать процессор, но я хочу убедиться, что сжатие будет максимально эффективным.
Итак, я думаю, я должен сжимать пакеты перед шифрованием, поскольку незашифрованный пакет будет сжимать лучше, чем зашифрованный? Или наоборот?
Я, вероятно, буду использовать zlib для сжатия.
Узнайте больше на блоге Super User .
источник
Ответы:
Если шифрование выполнено правильно, то результатом являются в основном случайные данные. Большинство схем сжатия работают путем нахождения шаблонов в ваших данных, которые могут быть каким-то образом учтены, и благодаря шифрованию теперь их нет; данные полностью несжимаемы.
Сжатие перед шифрованием.
источник
Сжатие перед шифрованием. Сжатые данные могут значительно различаться при небольших изменениях в исходных данных, что затрудняет проведение дифференциального криптоанализа.
Кроме того, как указывает г-н Альфа, если вы сначала зашифруете, результат будет очень трудно сжать.
источник
Даже если это зависит от конкретного варианта использования, я бы посоветовал Encrypt-then-Compress. В противном случае злоумышленник может получить информацию о количестве зашифрованных блоков.
Мы предполагаем, что пользователь отправляет сообщение на сервер, а злоумышленник может добавить текст к сообщению пользователя перед отправкой (например, с помощью javascript). Пользователь хочет отправить некоторые разумные данные на сервер, а злоумышленник хочет получить эти данные. Поэтому он может попытаться добавить разные сообщения к данным, которые пользователь отправляет на сервер. Затем пользователь сжимает свое сообщение и добавленный текст от злоумышленника. Мы предполагаем сжатие DEFLATE LZ77, поэтому функция заменяет ту же информацию указателем на первое появление. Поэтому, если злоумышленник может воспроизвести открытый текст дыры, функция сжатия уменьшает размер простого текста до исходного размера и указателя. А после шифрования злоумышленник может подсчитать количество блоков шифра, чтобы он мог видеть, были ли его добавленные данные такими же, как данные, отправленные пользователем на сервер. Даже если этот случай звучит немного сконструирован, это серьезная проблема безопасности в TLS. Эта идея используется атакой CRIME для утечки файлов cookie в соединении TLS для кражи сеансов.
источник: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf
источник
Я считаю, что когда вы сжимаете сообщение, вы проецируете его в более низкое измерение, и поэтому в нем меньше битов, что означает, что сжатое сообщение (при условии сжатия без потерь) содержит ту же информацию в меньшем количестве битов (те, которые вы избавились, были избыточны! ) Таким образом, у вас есть больше информации на бит и, следовательно, больше энтропии на бит, но такая же общая энтропия, которая была у вас ранее, когда сообщение не было сжато. Теперь случайность - это другое дело, и именно здесь паттерны сжатия могут бросить гаечный ключ.
источник
Сжатие должно быть сделано до шифрования. пользователь не хочет тратить время на ожидание передачи данных, но ему / ей нужно, чтобы это было сделано немедленно, не теряя времени.
источник
Сжатие перед шифрованием, как было указано ранее. Сжатие ищет структуру, которую оно может сжать. Шифрование скремблирует данные, чтобы избежать обнаружения структуры. При первом сжатии вы, скорее всего, получите файл меньшего размера и, следовательно, меньшую полезную нагрузку для передачи. Шифрование выполнит свою работу независимо от того, сжато оно или нет, и, как уже указывалось ранее, скорее всего, будет сложнее выполнить дифференциальный криптоанализ сжатого файла.
источник
Сжатие уменьшает информационную энтропию. Максимальное сжатие делает энтропию минимальной. Для идеально зашифрованных данных (шум) максимальная и минимальная энтропия совпадают.
источник