encryption - para - Al comprimir y encriptar, ¿debo comprimir primero o encriptar primero?
winzip 7z (7)
Si tuviera que encriptar AES un archivo y luego comprimirlo con ZLIB, ¿la compresión sería menos eficiente que si primero la comprimiera y luego encriptara?
En otras palabras, ¿debo comprimir primero o encriptar primero, o importa?
Comprimir primero. Si encriptas tus datos se convertirán (esencialmente) en una secuencia de bits aleatorios. Los bits aleatorios son incompresibles porque la compresión busca patrones en los datos y una secuencia aleatoria, por definición, no tiene patrones.
Comprimir primero. Una vez que cifre el archivo, generará una secuencia de datos aleatorios, que no será compresible. El proceso de compresión depende de encontrar patrones compresibles en los datos.
Desde una perspectiva práctica, creo que primero debe comprimir porque muchos archivos están precomprimidos. Por ejemplo, la codificación de video generalmente implica una gran compresión. Si cifras este archivo de video y luego lo comprimes, ahora se ha comprimido dos veces. La segunda compresión no solo obtendrá una relación de compresión deprimente, sino que la compresión de nuevo requerirá una gran cantidad de recursos para comprimir archivos o secuencias de gran tamaño. Como y Ferruccio , la compresión de archivos cifrados puede tener poco efecto de todos modos debido a la aleatoriedad de los archivos cifrados.
Creo que la mejor y más simple política puede consistir en comprimir los archivos solo cuando se necesiten de antemano (utilizando una lista blanca o una lista negra), y luego cifrarlos independientemente.
Es cierto que el compresor solo funciona en conjuntos de datos que tienen patrones bien definidos, pero es exploratorio cifrar primero los datos que producen patrones bien definidos y no aleatorios que pueden ser manejados por el compresor con menos complejidad de tiempo.
La compresión antes del cifrado es seguramente más eficiente en el uso del espacio pero, al mismo tiempo, menos segura. Es por eso que no estoy de acuerdo con otras respuestas.
La mayoría de los algoritmos de compresión usan encabezados de archivos "mágicos" y podrían usarse para ataques estadísticos.
Por ejemplo, hay un ataque CRIME SSL / TLS .
Por supuesto que importa. En general, es mejor comprimir primero y luego cifrar.
ZLib usa la codificación Huffman y la compresión LZ77 . El árbol de Huffman será más equilibrado y óptimo si se realiza en texto sin formato, por ejemplo, por lo que la tasa de compresión será mejor.
El cifrado puede seguir después de la compresión incluso si el resultado de la compresión parece estar "encriptado", pero se puede detectar fácilmente que se comprima porque el archivo generalmente comienza con PK.
ZLib no proporciona cifrado de forma nativa. Es por eso que he implementado ZeusProtection . El código fuente también está disponible en github .
Si su algoritmo de cifrado es bueno (y AES, con un modo de encadenamiento adecuado, es bueno), entonces ningún compresor podrá reducir el texto encriptado. O, si lo prefiere al revés: si logra comprimir un poco de texto encriptado, entonces es hora de cuestionar la calidad del algoritmo de encriptación ...
Esto se debe a que el resultado de un sistema de cifrado no se puede distinguir de los datos puramente aleatorios, incluso por un atacante determinado. Un compresor no es un atacante malicioso, pero funciona al tratar de encontrar patrones no aleatorios que pueda representar con menos bits. El compresor no debería ser capaz de encontrar ningún patrón en el texto encriptado.
Entonces debe comprimir los datos primero, luego encriptar el resultado, y no al revés. Esto es lo que se hace, por ejemplo, en el formato OpenPGP .