¿Cómo comprimir un directorio con cifrado para nombres de archivos?

17

Usando la línea de comando, sé que puedo cifrar un directorio con el siguiente comando:

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

Sin embargo, esto no cifra los nombres de archivo en sí. Si alguien corre:

unzip Directory.zip

e ingresa repetidamente una contraseña incorrecta, el comando descomprimir recorrerá todos los nombres de archivo contenidos hasta que se ingrese la contraseña correcta. Salida de muestra:

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

y así.

Usando la línea de comando, ¿hay alguna manera de comprimir un directorio con encriptación mientras también encripta u oculta los nombres de los archivos?

Gracias.

Leo Galleguillos
fuente
Probablemente no desee usar el cifrado predeterminado de zip, ya que es débil, así que úselo 7zipya que usa cifrado basado en AES.
Pierz
¿Cuál es el cifrado predeterminado de zip y cuál es su fuente para afirmar que el cifrado predeterminado de zip no es seguro?
Leo Galleguillos
1
La mayoría de las herramientas zip (hay algunas herramientas zip más nuevas que usan una mejor criptografía) todavía usan el cifrado PKZIP Stream, que se demostró que era débil en 1994: rd.springer.com/content/pdf/10.1007%2F3-540-60590-8_12 .pdf La página de Wikipedia ofrece una descripción general básica: en.wikipedia.org/wiki/Zip_(file_format)#Encryption
Pierz el

Respuestas:

26

En un archivo zip, solo se cifra el contenido del archivo. Los metadatos del archivo, incluidos los nombres de los archivos, no están cifrados. Esa es una limitación del formato de archivo: cada entrada se comprime por separado y, si se cifra, se cifra por separado.

Puede usar 7-zip en su lugar. Es compatible -mhe=oncon el cifrado de metadatos ( con la implementación de línea de comandos de Linux).

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

Hay implementaciones de 7zip para todos los sistemas operativos principales y la mayoría de los menores, pero eso podría requerir la instalación de un software adicional (Windows IIRC puede descomprimir archivos zip cifrados fuera de la caja en estos días). Si requiere 7z para el descifrado es un problema, puede confiar en zip solo usándolo primero para empaquetar el directorio en un solo archivo y luego encriptando ese archivo. Si hace eso, desactive la compresión de archivos individuales e indique al archivo zip externo que comprima el archivo zip, obtendrá una mejor relación de compresión en general.

zip -0 -r Directory.zip /path/to/directory
zip -e -n : encrypted.zip Directory.zip
Gilles 'SO- deja de ser malvado'
fuente
1
Probablemente sea mejor evitar el uso de zip para cifrar: se puede usar 7zip para generar un archivo zip cifrado de forma más segura (AES) en la segunda línea:7z a -p -tzip encrypted.zip Directory.zip
Pierz
2

Puede crear un archivo con su herramienta favorita y luego usarlo bcryptpara realizar el cifrado / descifrado.

A) Para crear un archivo encriptado:

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

Esto te dará un archivo encriptado Blowfish Directory.tgz

B) Para revertir este proceso:

bcrypt Directory.tgz.bfe
tar -xf Directory.tgz
Jedi
fuente
2
El enfoque es bueno, pero debe usar otra herramienta para el cifrado: bcryptusa EBC que revela la estructura en los datos cifrados. Consulte el error de Debian # 700758 para obtener más detalles ( bcryptcomo resultado, Debian solo admite el descifrado).
Stephen Kitt