Как заархивировать каталог с шифрованием для имен файлов?

17

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

zip -er Directory.zip /path/to/directory

Однако это не зашифровывает сами имена файлов. Если кто-то бежит:

unzip Directory.zip

и многократно вводит неправильный пароль, команда unzip будет перебирать все содержащиеся в нем имена файлов, пока не будет введен правильный пароль. Пример вывода:

unzip Directory.zip 
Archive:  Directory.zip
   creating: Directory/
[Directory.zip] Directory/sensitive-file-name-1 password: 
password incorrect--reenter: 
password incorrect--reenter: 
   skipping: Directory/sensitive-file-name-1  incorrect password
[Directory.zip] Directory/sensitive-file-name-2 password: 
password incorrect--reenter: 
password incorrect--reenter: 
   skipping: Directory/sensitive-file-name-2  incorrect password
[Directory.zip] Directory/sensitive-file-name-3 password: 
password incorrect--reenter: 
password incorrect--reenter: 
   skipping: Directory/sensitive-file-name-3  incorrect password

и так далее.

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

Спасибо.

Лео Гальегильос
источник
Вы, вероятно, не хотите использовать стандартное шифрование zip, поскольку оно слабое, поэтому используйте 7zipего, поскольку оно использует шифрование на основе AES.
Pierz
Что такое стандартное шифрование zip и каков ваш источник того, что шифрование zip по умолчанию небезопасно?
Лео Гальегильос
1
Большинство zip-инструментов (есть некоторые более новые zip-инструменты, использующие более качественную криптографию) по-прежнему используют потоковый шифр PKZIP, который впервые был признан слабым в 1994 году: rd.springer.com/content/pdf/10.1007%2F3-540-60590-8_12 .pdf На странице Википедии представлен общий обзор: en.wikipedia.org/wiki/Zip_(file_format)#Encryption
Pierz

Ответы:

26

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

Вы можете использовать 7-Zip вместо этого. Он поддерживает шифрование метаданных ( -mhe=onс реализацией командной строки Linux).

7z a -p -mhe=on Directory.7z /path/to/directory

Существует 7zip-реализаций для всех основных операционных систем и большинства второстепенных, но для этого может потребоваться установка дополнительного программного обеспечения (в наши дни IIRC Windows может разархивировать зашифрованные zip-файлы из коробки). Если требуется 7z для расшифровки, вы можете положиться на zip-архив, только сначала используя его для упаковки каталога в один файл, а затем зашифровав этот файл. Если вы сделаете это, отключите сжатие отдельных файлов и дадите команду внешнему zip-файлу сжать zip-файл, вы получите в целом более высокую степень сжатия.

zip -0 -r Directory.zip /path/to/directory
zip -e -n : encrypted.zip Directory.zip
Жиль "ТАК - прекрати быть злым"
источник
1
Вероятно, лучше избегать использования zip для шифрования - можно использовать 7zip для создания более надежно зашифрованного (AES) zipfile во 2-й строке:7z a -p -tzip encrypted.zip Directory.zip
Pierz
2

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

А) Чтобы создать зашифрованный файл:

tar -czf Directory.tgz /path/to/directory
bcrypt Directory.tgz

Это даст вам зашифрованный файл Blowfish Directory.tgz

Б) Чтобы полностью изменить этот процесс:

bcrypt Directory.tgz.bfe
tar -xf Directory.tgz
джедай
источник
2
Подход хорош, но вы должны использовать другой инструмент для шифрования - bcryptиспользует EBC, который показывает структуру в зашифрованных данных. Подробности смотрите в ошибке Debian # 700758 (в результате Debian bcryptподдерживает только дешифрование).
Стивен Китт