Подтвердить что ты не робот

При сжатии и шифровании следует сначала сжать или зашифровать?

Если бы я был в AES-зашифрованном файле, а затем ZLIB-сжимал его, сжатие было бы менее эффективным, чем если бы я сначала сжал и затем зашифровал?

Другими словами, следует ли сначала сжать или зашифровать, или это имеет значение?

4b9b3361

Ответ 1

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

Ответ 2

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

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

Например, существует ошибка CRIME SSL/TLS.

Ответ 3

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

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

Итак, сначала вы должны сжать данные, а затем зашифровать результат, а не наоборот. Это то, что сделано в формате OpenPGP.

Ответ 4

Сжатие сначала. Если вы зашифруете, ваши данные превратятся (по существу) в поток случайных бит. Случайные биты несжимаемы, потому что сжатие ищет шаблоны в данных, а случайный поток по определению не имеет шаблонов.

Ответ 5

Конечно, это важно. Обычно лучше сжать сначала, а затем зашифровать.

ZLib использует кодирование Хаффмана и сжатие LZ77. Дерево Хаффмана будет более сбалансированным и оптимальным, если оно выполняется, например, на обычном тексте, и, следовательно, скорость сжатия будет лучше.

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

ZLib не обеспечивает шифрование изначально. Вот почему я внедрил ZeusProtection. Исходный код также доступен на github.

Ответ 6

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

Ответ 7

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

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