Назад | Перейти на главную страницу

Могу ли я сжать зашифрованный файл?

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

Вы можете сжать его, но это вряд ли сэкономит много места на диске. По своей природе шифрование редко позволяет сильно сжимать файл.

Попробуйте сами, чтобы увидеть, можно ли сэкономить на размере файла.

Одна точка данных:

-rw-r----- 1 gene    gene    2428671 2009-06-02 12:39 test.log
-rw-r----- 1 gene    gene     134524 2009-06-02 12:39 test.log.bz2
-rw-r----- 1 gene    gene     217162 2009-06-02 12:38 test.log.gz
-rw-r--r-- 1 gene    gene     263229 2009-06-02 12:47 test-AES.gpg
-rw-r--r-- 1 gene    gene     264833 2009-06-02 12:42 test-AES.gpg.bz2
-rw-r--r-- 1 gene    gene     263302 2009-06-02 12:41 test-AES.gpg.gz
-rw-r--r-- 1 gene    gene     134609 2009-06-02 12:43 test-bz2-AES.gpg
-rw-r--r-- 1 gene    gene     217246 2009-06-02 12:43 test-gz-AES.gpg

test.log оригинал, и test.log.bz2 и test.log.gz просто сжимаются с помощью bzip2 и gzip соответственно.

Если я его зашифрую (gpg --symmetric --cipher-algo AES --output test-AES.gpg test.log) зашифрованный файл (test-AES.gpg) немного больше, чем сжатые версии. Сжатие зашифрованного файла на самом деле немного увеличивает размер (test-AES.gpg.bz2 и test-AES.gpg.gz).

Сначала сжатие, а затем шифрование дает некоторую экономию (test-bz2-AES.gpg и test-gz-AES.gpg), особенно с bzip2.

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

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

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

Если у вас хорошее шифрование, файл выглядит как случайный шум, и он не будет сильно сжиматься из-за отсутствия шаблонов. Конечно, вы можете поместить его в архивный файл (.zip, .gz и т. Д.), Но вряд ли он станет намного меньше.

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

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

Для программы сжатия мир Unix предпочитает деготь вместе с gzip/bzip2 (обычно используется из tar, как в tar czf foo.tar.gz foo), а пользователи Windows предпочитают ZIP, RAR или 7z.

Использование любой программы сжатия (7z, zip, gzip, bzip2) не требует потерь и не влияет на вашу способность расшифровывать данные.

Однако из-за характера зашифрованных данных вы, вероятно, мало от них выиграете.

Правильнее всего сжать его перед этапом шифрования. Существующие утилиты, такие как gpg, делают это. По умолчанию выполняется сжатие перед шифрованием:

michael:~> dd if=/dev/zero of=testfile bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00300552 s, 349 MB/s
michael:~> gpg --symmetric --cipher-algo aes --batch --passphrase cheesestring testfile
michael:~> ls -al testfile testfile.gpg
-rw-r--r-- 1 michael users 1048576 2009-06-02 12:42 testfile
-rw-r--r-- 1 michael users    1123 2009-06-02 12:43 testfile.gpg

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

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

Программа шифрования, которая не сжимает файл перед шифрованием, совершает акт халатности.

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

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

Да, это не должно вызывать никаких проблем. Что касается программы шифрования, то это просто данные. Однако восстановить данные будет сложно, поэтому вы можете использовать PAR2 после создания архива.

Я думаю, что в итоге сэкономленное пространство не будет стоить потенциальных проблем, которые это вызовет.

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

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

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

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

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

Для людей, которым нравятся подобные вещи, я работаю над несколькими статьями, в которых рассказывается об основах криптографии (предназначенных для программистов и других технических специалистов):

http://blog.demofox.org/category/cryptography/