# Common Scrambling Algorithm

Common Scrambling Algorithm (CSA) es un algoritmo de cifrado utilizado para proteger streams de vídeo en redes de difusión DVB (Digital Video Broadcasting). La televisión digital de pago en Europa y algunos proveedores de televisión por satélite usan este algoritmo para proteger sus emisiones de la decodificación ilegal.

## Historia

El CSA se utiliza para proteger transport streams de estándar MPEG-2. Fue especificado por ETSI y adoptado por el consorcio DVB en mayo de 1994, aunque realmente no se empezó a conocer hasta primavera de 2002 (mantenido prácticamente en secreto durante un largo período). Sin embargo, la fecha en la que se empezó a diseñar no ha quedado del todo clara.
Antes de 2002 poco se conocía sobre este algoritmo de seguridad, solo pequeña información como un reportaje técnico de ETSI 'Eur96' y usos evidentes 'Bew98','WAJ98' lo dieron a conocer, aunque nunca detalladamente, de forma pública. En otoño del 2002 apareció un programa para Windows conocido como FreeDec que implementaba el CSA en software. Esto permitió que se corrigieran pequeños errores y por lo tanto la reimplementación del algoritmo en lenguajes de programación de más alto nivel. Las especificaciones se pueden obtener a través de ETSI: debido a que los detalles del CSA están ligados a la seguridad de la difusión de las señales, las especificaciones no han sido publicadas aunque las compañías que desen disponer del servicio pueden conseguirlas siempre y cuando se firme un contrato de confidencialidad.

## Características

CSA es una combinación de dos algoritmos: un cifrado block y un cifrado stream. Ambos tiene la misma llave, lo que quiere decir que con atacar a uno de los 2 se podría romper el algoritmo.
CSA se basa en el principio de cifrado simétrico. Esto significa que el transmisor y el receptor utilizan la misma llave. La llave del algoritmo usa 64 bits lo que da muchas posibilidades (10$^{19}$ combinaciones). Este gran número de combinaciones da una idea de lo complicado de resolverlo ya que si tardáramos 1 μs por cada intento nos supondría aproximadamente más de 100.000 años de media. De los 64 bits en realidad solo desconocemos 48 bits, desde el byte 3 al 7 son usados como bytes de control y pueden ser fácilmente recalculados. Esto permite ahorrar tiempo de ataque donde 32 bits reciben un ataque de fuerza bruta, 16 bits son calculados con tablas de memoria construidas desde un texto cifrado y 16 bits calculados como suma de verificación con un tiempo de arranque de O(2$^{16}$)+O(2$^{32}$), lo que nos llevaría menos de 1 segundo si lo implementamos en una arquitectura hardware FPGA.
La llave para descodificar flujos de datos de vídeo actualmente cambia cada aproximadamente 10 segundos, lo que en un principio asegura que no se pueda romper la protección de cualquier forma y salvaguardar así los derechos de la televisión por pago.
En el caso de romper el algoritmo, las transmisiones codificadas DVB serían descifrables, independientemente del sistema de acceso usado. Esto podría comprometer seriamente la televisión digital por pago en Europa y en otros lugares ya que muchos proveedores de televisión por satélite usan CSA. La no publicación en detalle del algoritmo hace que CSA sea una fuerte medida de seguridad ahora y durante un largo período.