2010-03-05 15 views
6

Tenemos una aplicación cliente basada en servidor que guarda los datos relacionados con el usuario en un archivo zip y establece la contraseña en el archivo comprimido programáticamente. Solo me preguntaba si podría considerarse seguro. Gracias N¿Archivo comprimido con seguridad de contraseña?

Respuesta

13

El cifrado "clásico" para los archivos Zip se considera débil. Es rompible, rápidamente, por métodos conocidos. Ver: "A Known Plaintext Attack on the PKZIP Stream Cipher" para el documento original, por Biham y Kocher, desde 1994. Sí, hace 16 años.

Más recientemente ha habido otros ataques describen, por ejemplo, el papel Yet another Plaintext Attack on ZIP's Encryption Scheme (WinZIP) dice que un clásico-zip archivo encriptado con 3 entradas, y creado por WinZip, puede ser roto en 2 horas en un "Pentium". Esto se basó en un aprovechamiento de una debilidad en el generador de números aleatorios de la herramienta WinZip v9.0 actual. Estoy seguro de que ahora iría mucho más rápido, en los procesadores actuales, pero al mismo tiempo, estoy bastante seguro de que WinZip, ahora en v12.0, ha solucionado este problema en su generador de números aleatorios. Sin embargo, incluso sin el exploit específico para WinZip-v9, el cifrado ZIP clásico sigue siendo débil.

Este cifrado de zip débil que se ha descifrado también se conoce como "cifrado ZIP 2.0" o "cifrado PKZIP".

Muchos kits de herramientas ZIP modernos también son compatibles con el cifrado AES de las entradas ZIP. Esto se considera una encriptación fuerte, y es bastante seguro (** Ver nota). WinZip, XCeed y DotNetZip son tres de esas herramientas que permiten leer y escribir archivos zip con este nivel de cifrado. Entre los tres, DotNetZip es la única opción gratuita.

No mencionaste la biblioteca que utilizas para generar programáticamente el archivo zip. Si utiliza DotNetZip, produciendo un archivo ZIP cifrado AES en C# es tan fácil como esto:

using (var zip = new ZipFile()) 
{ 
    zip.AddFile("MySensitiveFile.doc"); 
    zip.Encryption = EncryptionAlgorithm.WinZipAes128; 
    zip.Password = "Very.Secret!"; 
    zip.Save("MyEncryptedArchive.zip"); 
} 

** nota: Yoshi ha publicado un documento titulado Attacking and Repairing the WinZip Encryption Scheme, que describe las hazañas de cifrado AES de WinZip argumentar que el cifrado AES de WinZip no es seguro.Sin embargo, las hazañas que describe dependen de la ingeniería social o compromisos previos o ambos. Por ejemplo, el exploit principal descrito en el documento implica que un atacante intercepta el archivo zip encriptado, lo modifica, envía la copia modificada a su destinatario previsto, hace que el destinatario intente descifrarlo y luego envía el resultado de ese cifrado a el atacante, que luego puede descifrar el archivo original. Este llamado "exploit" implica numerosos saltos de fe, acumulados en el compromiso previo de la comunicación interceptada en ambas direcciones. Nadie ha descrito ningún exploits estructural de WinZip AES, a la par de las vulnerabilidades del cifrado ZIP ZIP.

+0

Tengo la misma situación básica de la OP tiene y queremos estar seguros de que el usuario no puede acceder a la cremallera archivo en la máquina a pesar de que el software se ejecuta en su máquina. En este caso, no pueden simplemente descompilar el exectuable para obtener el "Very.Secret!" ¿contraseña? Actualmente, solo estamos protegiendo contraseñas con el cifrado "clásico" y queremos comenzar a utilizar DotNetZip. – CincinnatiProgrammer

+1

@PaulBrown - bueno, sí, eso es un riesgo si codifica la contraseña en el programa que produce el zip. Normalmente eso no es un problema. En el diseño típico, la aplicación de creación de zip pedía una contraseña al usuario, empleaba esa contraseña solo durante la creación del zip y luego descartaba la contraseña posteriormente. En ese caso, la descompilación del exe no recuperaría la contraseña. Si no puede pedirle al usuario la contraseña, puede reemplazarla por otro paso análogo, por ejemplo, "solicitar" un generador de contraseñas remotas, a través de una llamada REST, para obtener una contraseña, y usar eso. – Cheeso

+0

"queremos asegurarnos de que el usuario no pueda acceder al archivo comprimido en la máquina aunque el software se ejecute en su máquina" <- Eso es imposible. Siempre que el software contenga la información necesaria para descifrar el archivo, el usuario puede descifrar el archivo. – Antimony

0

¿A qué nivel? Existen programas que pueden descifrar el cifrado de contraseñas en un archivo zip muy rápidamente, por lo que si tiene que soportar cualquier tipo de esfuerzo, entonces no.

Si solo se trata de garantizar que alguien con una contraseña pueda abrirlo y de mantener alejadas miradas indiscretas, entonces quizás.

Si quieres tener una seguridad razonable a medio camino, me gustaría revisar los datos y luego ejecutarlos a través del software de encriptación adecuado, como gpg.

0

Debe hacerse un par de preguntas a usted mismo.

  • ¿Dónde está almacenando los archivos zip?
  • ¿Qué permisos están asociados al archivo zip?
  • ¿La contraseña es fuerte contraseña?

lo general, es un buen hábito para almacenar datos de usuario en una carpeta que es fuera de la web raíz, no se puede acceder directamente. Los generadores de contraseñas también están disponibles y deben usarse.

2

uso 7zip, que tiene una mejor seguridad de las contraseñas - y también marque la opción '' cifrar los nombres de archivo

+0

¿Debilita el archivo si los nombres de archivo no están encriptados? (excepto que puede ver los nombres) – ItsmeJulian

+0

@Julianemailde los nombres de archivo visibles pueden dar pistas que podrían ayudar a un ataque de estilo de diccionario en los archivos mismos – SteelBytes

Cuestiones relacionadas