Estoy escribiendo un sistema VPN que encripta (AES256) su tráfico a través de la red (¿Por qué escribir el mío cuando ya hay 1,000,001 más? Bueno, el mío es especial para una tarea específica que ninguno de los otros encaja).
Básicamente quiero pasar mi pensamiento más allá de ti para asegurarme de que estoy haciendo esto en el orden correcto.
Por el momento, los paquetes están encriptados antes de ser enviados, pero quiero agregarles algún nivel de compresión para optimizar un poco la transferencia de datos. No es una compresión fuerte: no quiero maximizar la CPU todo el tiempo, pero quiero asegurarme de que la compresión sea lo más eficiente posible.
Entonces, mi opinión es, ¿debería comprimir los paquetes antes de cifrarlos, ya que un paquete no cifrado se comprimirá mejor que uno cifrado? ¿O al revés?
Probablemente usaré zlib para la compresión.
Lea más en el blog Super User .
fuente
Respuestas:
Si el cifrado se realiza correctamente , el resultado son datos básicamente aleatorios. La mayoría de los esquemas de compresión funcionan mediante la búsqueda de patrones en sus datos que de alguna manera pueden ser eliminados, y gracias al cifrado ahora no hay ninguno; Los datos son completamente incompresibles.
Comprima antes de encriptar.
fuente
Comprimir antes del cifrado. Los datos comprimidos pueden variar considerablemente para pequeños cambios en los datos de origen, por lo que es muy difícil realizar un criptoanálisis diferencial.
Además, como señala Mr.Alpha, si encripta primero, el resultado es muy difícil de comprimir.
fuente
Incluso si depende del caso de uso específico, recomendaría Encrypt-then-Compress. De lo contrario, un atacante podría filtrar información del número de bloques cifrados.
Asumimos que un usuario envía un mensaje al servidor y un atacante con la posibilidad de agregar texto al mensaje del usuario antes de enviarlo (por ejemplo, mediante JavaScript). El usuario quiere enviar algunos datos sensibles al servidor y el atacante quiere obtener estos datos. Entonces puede intentar agregar diferentes mensajes a los datos que el usuario envía al servidor. Luego, el usuario comprime su mensaje y el texto adjunto del atacante. Asumimos una compresión DEFLATE LZ77, por lo que la función reemplaza la misma información con un puntero a la primera aparición. Entonces, si el atacante puede reproducir el texto sin formato del agujero, la función de compresión reduce el tamaño del texto plano al tamaño original y un puntero. Y después del cifrado, el atacante puede contar el número de bloques de cifrado, para que pueda ver si sus datos agregados eran los mismos que los datos que el usuario envió al servidor. Incluso si este caso suena un poco construido, es un problema de seguridad grave en TLS. Esta idea es utilizada por un ataque llamado CRIME para filtrar cookies en una conexión TLS para robar sesiones.
fuente: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf
fuente
Mi opinión es que cuando comprimes un mensaje lo proyectas a una dimensión inferior y, por lo tanto, hay menos bits, lo que significa que el mensaje comprimido (suponiendo una compresión sin pérdidas) tiene la misma información en menos bits (¡los que eliminaste eran redundantes! ) Por lo tanto, tiene más información por bit y, en consecuencia, más entropía por bit, pero la misma entropía total que tenía antes cuando el mensaje no estaba comprimido. Ahora, la aleatoriedad es otra cuestión y ahí es donde los patrones de compresión pueden arrojar una llave inglesa.
fuente
La compresión debe hacerse antes del cifrado. un usuario no quiere pasar tiempo esperando la transferencia de datos, pero necesita que se haga de inmediato sin perder tiempo.
fuente
Compresión antes del cifrado como se ha señalado anteriormente. La compresión busca la estructura que puede comprimir. El cifrado codifica los datos para evitar que se detecte la estructura. Al comprimir primero, es mucho más probable que tenga un archivo más pequeño y, por lo tanto, menos carga útil para transferir. El cifrado hará su trabajo independientemente de si está comprimido o no y, nuevamente, como se señaló anteriormente, es probable que sea más difícil realizar un criptoanálisis diferencial en un archivo comprimido.
fuente
La compresión reduce la entropía de la información. La compresión máxima hace que la entropía sea mínima. Para datos perfectamente encriptados (ruido), la entropía máxima y mínima es la misma.
fuente