Si queremos tanto el cifrado como la compresión durante la transmisión, ¿cuál será el orden más preferible?
- Encripta y luego comprime
- Comprimir y luego cifrar
Debes comprimir antes de cifrar.
El cifrado convierte sus datos en datos de alta entropía, generalmente indistinguibles de un flujo aleatorio. La compresión se basa en patrones para obtener cualquier reducción de tamaño. Debido a que el cifrado destruye dichos patrones, el algoritmo de compresión no podría proporcionarle una gran reducción de tamaño (si la hubiera) si lo aplica a los datos cifrados.
La compresión antes del cifrado también aumenta ligeramente su resistencia práctica contra el análisis de criptoanálisis diferencial (y algunos otros ataques) si el atacante solo puede controlar el texto sin comprimir, ya que la salida resultante puede ser difícil de deducir.
EDITAR: Estoy editando estos años más tarde porque este consejo es realmente deficiente en un caso interactivo. No debe comprimir los datos antes de cifrarlos en la mayoría de los casos. Se puede usar un método de ataque de canal lateral conocido como "oráculo de compresión" para deducir datos de texto sin formato en los casos en que el atacante puede hacer que las cadenas se coloquen de forma interactiva en un flujo de datos de texto sin formato de otro modo desconocido. Los ataques a SSL / TLS como CRIME y BREACH son ejemplos de esto.
Si comprime después del cifrado y la compresión hace algún bien (es decir, realmente reduce la longitud en una cantidad no despreciable), entonces puede deshacerse del cifrado, es muy débil. El texto cifrado debe ser indistinguible de la aleatoriedad; incluso los datos mal cifrados no se pueden comprimir.
Por lo tanto, comprime antes del cifrado. Esta es la razón por la que los protocolos que tratan con el cifrado generalmente incluyen algún soporte para la compresión, por ejemplo. OpenPGP (sección 5.6) y SSL / TLS . En algunos casos, la compresión puede filtrar información sobre datos confidenciales (porque la compresión reduce la longitud según los datos , y la longitud cifrada coincide más o menos con la longitud del texto simple); esta es la idea detrás del nuevo ataque CRIME a SSL / TLS .
Excepción marginal: si cifra un mensaje con OpenPGP y luego "ACSII armor" el resultado, es decir, lo codifica en Base64, esta codificación aumenta los datos en un 34%: 3 bytes se convierten en 4 caracteres (más la nueva línea impar). La compresión con DEFLATE será efectiva para cancelar esta ampliación (gracias a los códigos de Huffman). Ese es un caso de utilidad de compresión después del cifrado, pero, en realidad, es más compresión sobre Base64, en lugar de compresión sobre cifrado.
Recomendaría comprimir primero los datos y luego cifrarlos.
El algoritmo de compresión podría beneficiarse del conocimiento de la estructura de datos y esa estructura quedaría disimulada por el cifrado. Un ejemplo sería mp3 que solo puede comprimir datos de sonido.
tendría que cifrar menos datos. Mientras que cuando cifras por primera vez y luego comprimes, no ganarás velocidad.
Lea otras preguntas en las etiquetas encryption compression