Cifrado
AES-256 en ZIP y 7z, nombres ocultos, contraseñas y límites de integridad.
Actualizado el
Arca cifra archivos .zip con AES-256 usando el esquema WinZip AE-2, el mismo que escriben 7-Zip, WinRAR y NanaZip. interop.sh lo comprueba en ambas direcciones contra 7-Zip.
El esquema ZIP
Decisiones de diseño
- Una sal por entrada. Reutilizar una sal reutilizaría el flujo de clave, y dos archivos idénticos se verían idénticos dentro del archivo comprimido.
- Comprimir y luego cifrar. Es el orden que pide la especificación, porque los bytes cifrados no dejan nada que comprimir al compresor.
- El CRC se guarda como cero. AE-2 lo exige: es una suma de verificación del texto plano y no tiene sentido una vez que el HMAC responde por los datos.
- La manipulación falla de forma ruidosa. Un byte alterado no sale como contenido; falla el código de autenticación.
Uso
arca create secret.zip folder/ -p "a password"arca extract secret.zip -o where/ -p "a password"7z t -p"a password" secret.zip # 7-Zip lo leeCifrado 7z y nombres ocultos
arca create secret.7z folder/ -p "a password" --hide-namesarca list secret.7z -p "a password"arca test secret.7z -p "a password"arca extract secret.7z -o where/ -p "a password"7z t -p"a password" secret.7z7z usa AES-256-CBC y una KDF SHA-256 (potencia 19 al crear con Arca), con sal e IV aleatorios nuevos para cada bloque de datos y cabecera. No es WinZip AE-2 y no tiene HMAC: CRC-32 detecta corrupción accidental pero no es autenticación criptográfica. Un fallo de descifrado/CRC significa contraseña incorrecta o archivo corrupto, no demuestra cuál de los dos ha ocurrido.
Sin --hide-names los nombres son visibles y list no exige contraseña. Con
esa opción se cifran las cabeceras y hasta el listado la necesita. Arca valida
todos los datos cifrados antes de crear directorios, abrir destinos o sustituir
ficheros existentes. Después vuelve a descodificar lo seleccionado; el origen
debe permanecer estable entre ambas pasadas. Esto protege el destino ante fallos
de contraseña/CRC, no frente a una falsificación deliberada del CRC.
La contraseña no puede estar vacía. Si todas las entradas están vacías, hay que ocultar los nombres para poder comprobarla. Las contraseñas CLI pueden aparecer en el historial del shell y los argumentos del proceso; usa el campo de la ventana si esto importa. No se garantiza el borrado seguro de secretos en memoria.
ZipCrypto heredado
ZipCrypto, el esquema de contraseña antiguo, se lee pero nunca se escribe: un archivo de otra herramienta se abre con su contraseña, y arca password lo pasa a AES-256. El esquema está roto por diseño, así que no se crea nada nuevo con él. Su comprobación de contraseña es un único byte, así que una contraseña incorrecta de cada 256 lo supera y falla en la suma de verificación en su lugar.
Cambiar la contraseña de un archivo existente
arca password secret.zip -p "a password" # la quitaarca password plain.zip --new "a password" # pone unaarca password secret.zip -p "old" --new "new" # la cambiaarca password secret.zip -p "a password" -o clean.zip # deja el original intactoNada se vuelve a comprimir. AES cifra los bytes ya comprimidos, así que quitar el cifrado devuelve exactamente el flujo Deflate que había, y el tamaño comprimido no cambia. Lo que sí cuesta es el CRC: una entrada AE-2 guarda cero ahí, así que la entrada se descomprime una vez para calcularlo antes de poder escribirse sin cifrar.
En la ventana
El diálogo de creación admite contraseñas ZIP y 7z y Ocultar nombres en 7z. Las cabeceras ocultas piden la contraseña antes del listado; el resto se valida en segundo plano antes de extraer, probar, previsualizar o abrir una entrada. Reintentar retoma la acción original; cancelar no escribe salida.
Cambiar contraseñas existentes, añadir, borrar y renombrar entradas son funciones exclusivas de ZIP. No están disponibles en 7z, cuyos bloques sólidos pueden necesitar una reescritura completa.