CSS y DeCSS








split@splitcc.net






1.Introducción


Las posibilidades multimedia que han surgido en los últimos años eran impensables hace tan solo unos años. Los formatos de compresión tanto de video como de audio, permiten ver y escuchar vídeos de muy buena calidad y ocupando un tamaño relativamente pequeño. Si a esto añadimos la apareción de tecnologías de almacenamiento de datos como los DVDs (Digital Video Disk)que permiten guardar hasta 15 GB (en los grabados a doble cara y a doble cara) y por lo tanto permitiendo muchisimas posibilidades que otros formatos no pueden ofrecer.

La "tecnología DVD" propiamente dicha, no es dueña de ninguna compañía. La especificación oficial fue desarrollado por un consorcio de 10 compañías: Hitachi, JVC, Matsushita, Mitsubishi, Philips, Pioneer, Sony,Thomson, Time Warner, y Toshiba.


Se ve últimamente cómo todos estos nuevos formatos se están introducioendo en el mercado, complementandose por ejemplo con los videos en formato VHS. Pero a parte de las ventajas que esto supone para las distribuidoras y el negocio del cine, los DVDs se pueden reproducir en los ordenadores, por lo que pueden ser copiables fácilmente. Con el fin de querer evitar esto, apareció el sistema CSS (Content Scrambling System) un sistema de cifrado y protección de los datos del DVD, para que no fuese posible la distribución y copia de los conteidos de éste.




  1. CSS (Content Scrambling System)



Para poder explicar el sistema CSS debemos pararnos a ver cuales son los elementos que intervienen en el sistema de reproducción de los DVDs.

Por un lado tenemos el propio DVD, donde los datos están cifrados y con ellos, el sistema de descifrado de dichos datos para que sea posible la reproducción del video.


Dicho sistema, solo puede ser leído por los reproductores que pasen un proceso de autentificación. Las licencias para la reproducción y la manipulación de los DVDs, son suministradas a las empresas que desarrollen este tipo de software/hardware por la llamada 'DVD Copy Control Association'.


Por otra parte disponemos de dicho reproductor, creado por una empresa con la licencia (ya veremos más adelante que esto no es del todo cierto), que dispone de una serie de claves para descifrar la clave de disco o Disk Key, un código de zona que indica en qué zonas puede ser utilizado el reproductor y otra clave, es ta vez para autentificarse con la máquina (clave de sesión).


Los estudios cinematográficos y productoras, quieren controlar los lanzamientos locales en diferentes países ya que en el cine, los estrenos no son simultáneos; por ejemplo, una película que todavía está proyectandose en el cine en Europa, podría salir en vídeo en Estados Unidos). Incluso, los estudios venden los derechos de distribución a diferentes distribuidores extranjeros y les gustaría garantizar un mercado exclusivo. Por lo tanto, las empresas del mundo del cine, han requerido que el estándar DVD incluya códigos que se puedan usar para prevenir la reproducción de ciertos discos en ciertas zonas geográficas. Cada lector tiene un código de la zona en la que es vendido. El lector se negará a leer discos que no son permitidos en esa región. Esto quiere decir que los discos comprados en un país podrían no leerse en lectores comprados en otro país.

Se han definido 8 regiones o también llamadas "zonas". Los lectores y los discos se identifican con el numero de la región sobreimpresionado en un plano del mundo. Si un disco se lee en más de una región tendrá mas de un numero en

el mapa.


Zona 1 - USA, Canada, territorios USA

Zona 2 - Japón, Europa, Sur África, Medio Este (incluyendo Egipto)

Zona 3 - Sureste de Asia y Este de Asia (incluye Hong Kong)

Zona 4 - Australia, Nueva Zelanda, Islas de Pacifico, América Central, Sudamérica,

Caribe

Zona 5 - Europa del Este (Unión Soviética), subcontinente Indio, África, Corea del

Norte, Mongolia

Zona 6 - China

Zona 7 - Reservado

Zona 8 - Especial para usos internacionales (aviones, cruceros, etc...)




Y por último la máquina donde se ejecute el reproductor, que deberá contener una clave privada para poder autentificar el reproductor.


Las claves y códigos usandos para el cifrado de los datos del DVD, son los siguientes:


El proceso de lectura del contenido de un DVD para su reproducción, consta de 6 fases principales que se describen a continuación:


          1. Autentificación mútua: el ordenador donde se ha introducido el DVD y el reproductor usan un sistema de pregunta-respuesta con el fin de poder establecer la confiabilidad de la transmisión, estableciendo entre ellos dos una clave de sesión.

          2. Decodificación de los datos del disco: a continuación, el reproductor prueba la serie de claves que dispone para intentar descifrar la Clave de Disco. Esto se realiza descifrando la entrada apropiada en la tabla de claves del dvd y después lo verifica descifrando la clave de disco.

          3. Transmisión de claves: el reproductor manda las claves de disco y título al ordenador cifrados con la clave de sesión para evitar posibles recogidas de información de programas externos.

          4. El DVD manda el sector al ordenador.

          5. El ordenador descifra la Clave de Título usando la Clave de Disco

          6. Y por último, se descifra el sector usando la Clave de Título y la de Sector que aparecerá en la cabecera de éste, como hemos indicado antes.


Vamos a continuación a explicar más detalladamente cómo está implementando el algoritmo CSS. Técnicamente hablando, hace uso de dos LFSRs.


La técnica LFSRs (Linear FeedBack Shift Registers) es una de las más populares para generar flujos pseudo-aleatorios de bits. Mediante LFSRs, no podemos generar verdaderas secuencias aleatorias, por lo que es importante la configuración ya que de ello depende en gran medida el período de generación cíclica (tiempo que se tardará en repetir la secuencia generada).


Para intentar ganar un grado más de complejidad, se suele combinar esta técnica con sumadores, multiplexores o puertas Lógicas y con ello producir flujos de bits menos predecibles.


Podemos decir por lo tanto, que un LFSR es un registro de un número determinado de bits al que se da un cierto valor inicial denominado semilla (este paso también es conocido con el nombre de "configuración del LFSR"). A partir de entonces, por cada ciclo de reloj, una serie de bits determinados del registro se utilizan para evaluar una función de retroalimentación que devuelverá un bit. Este bit es colocado en el la posición más significativa del registro y el resto de bits son desplazados hacia la derecha. El bit que sobra por la izquierda es lo que se denomina "salida del registro".

Como hemos dicho entonces, CSS hace uso de dos LFSRs. El primero es de 17 bits e inicialmente contiene una semilla de 2 bytes con un "1" insertado en el bit 14. Este bit es insertado para prevenir un posible "null cycling" (fenómeno de generar continuamente secuencias de 0s). El segundo LFSR opera de la misma forma excepto que esta formado por 25 bits.

Otro aspecto común es la función de retroalimentación, esta es la operación XOR de los bits de entrada. En el LFSR de 17 bits se utilizan los bits 1 y 15 y en el LFSR de 25 se utilizan los bits 1,4,5 y 15.

A diferencia de los métodos típicos de cifrado en flujo basados en LFSRs, CSS toma como valor de "salida" del LFSR, el valor devuelto por la función de retroalimentación (que también se usa para la entrada para el registro, como hemos visto antes).

CSS usa claves de 40 bits (5 bytes) de ahí la longitud de los LFSR: uno es configurado inicialmente con los 2 primeros bytes de la clave y el otro con los 3 bytes restantes.

La salida de los 2 LFSRs comentados, es combinada usando una suma de 8 bits. Después de que cada LFSR recopile 8 bits de salida, se efectúa la operación suma con la recopilación de salidas del otro LFSR; el acarreo de esta suma es utilizado posteriormente para las próximas sumas.

Llegado a este punto, nos encontramos que CSS tiene cuatro modos diferentes. Dependiendo del modo, la salida de uno o de ambos LFSRs se invierte antes de la operación de suma. Las inversiones se dan en el LFSR-17 para la Autentificación y para Datos y en el LFSR-25 para la Clave de título.

Para cifrar y descifrar los datos, se genera un flujo de bits mediante la técnica que hemos descrito anteriormente y se utiliza la operación XOR con cada uno de los bits del flujo MPEG-2 original, es decir, el vídeo del DVD. Como semilla de los LFSRs se utiliza una combinación de la clave de título y la clave de sector. Cada vez que se lee un sector del DVD, se toma la cabecera y con ella la clave de sector y se utiliza, una vez más, la operación XOR con la clave de título. El resultado de esta operación es el que se toma para inicializar los LFSRs.

A partir de este punto, se van generando los bytes (correspondientes a la salidas acumuladas y sumadas de los LFSRs) y se toman para ir cifrando o descifrando el flujo MPEG2 de video. Es utilizado además un sistema de dispersión mediante una "S-box" (basada en tablas) en los bytes del flujo MPEG2 antes de utilizar la XOR.

Antes de que el reproductor (o dispositivo) de DVD empiece a enviar datos a través del bus del sistema hacia el propio PC, se efectúa un proceso de autentificación mutua entre ellos. En este proceso, el reproductor negocia la clave que se usará en el cifrado de datos que se transmitirán por el bus. Este cifrado es necesario porque porque de otra forma sería posible obtener un volcado de los datos en texto claro simplemente leyendo el bus con algún software especial. Como decíamos en anteriores ocasiones, esta clave negociada es llamada clave de Sesión o también llamada clave de bus.



La negociación comienza cuando el PC o dispositivo, pide el AGID (Autentication Grant ID) del dispositivo. Este ID puede ser un ID de Sesión o un ID de Thread lo importante es que dará un nombre a la negociación.

El siguiente punto importante es que el host o PC genera una flujo arbitrario de bytes denominado "Nonce" o "Challenge" y se lo manda al dispositivo. El dispositivo encripta este flujo de bytes y se lo manda de vuelta al host. Acto seguido, el host descifra el flujo de bytes y se asegura que es correcto. De esta forma el host consigue saber si el dispostivo es auténtico puesto que sabe el algoritmo y el "secreto" para cicfrar el "Nonce".

El reproductor, por su parte, realiza el mismo proceso que hemos descrito generando un "Nonce" y mandándolo al PC para que este lo cifre. Una vez terminado este proceso, ambas partes están seguras de la veracidad del otro participante. A lo que llamamos "secreto" es una serie de información almacenada en el firmware de cada reproductor o dispositivo de DVD. Finalmente, la clave de sesión se forma combinando los dos "Nonces" generados.

3. DeCSS

Hace poco ha salido en diversos medios informativos que el chico noruego Jon Johansen, de 15 años de edad, era absuelto del juicio que le imputaba la responsabilidad del desarrollo y de la publicación del software DeCSS. Lo que hacía este programa, es descifrar los códigos de cifrado del DVD pudiendo así leer y reproducir el contenido de éste.

El trabajo fue realizado por varias personas trabajando en paralelo, como Derek Fawcus que descubrió y analizó todo el tema de autentificación, Frank Stevenson, grupos como MoRE("Masters of Reverse Engineering") o DoD ("Drink or Die") que escribieron el software y un cracker alemán que fue quien realmente realizó el crack propiamente dicho, aunque fue Jon Johansen quien se llevó todo el mérito final y la "fama". Pero realmente, lo único que hizo fue copiar y hacer unas modificaciones violando la licencia GPL por la cual se distribuía todo el trabajo hecho hasta entonces, ya que posteriormente se negaba a distribuir el código fuente de su aplicación (para windows, y no para sistemas Linux como también se ha dicho). Derek Fawcus, en un descuido de Johansen pudo hacerse con su código fuente, el cuál lo comparó con el suyo y mandó este mail a la lista de desarrolladores de DeCSS:

  From: Derek Fawcus <derek@spider.com>
  Subject: Re: [Livid-dev] DeCSS 1.1b has been released
  Date: Wed, 6 Oct 1999 19:49:25 +0100

  I've just read through the source to DeCSS,  compare CSSauth.cpp to
  css-auth.c in my authentication package.

  The authors have taken it almost verbatim - all they did was remove
  my copyright header,  one block comment, and rename the functions.
  I don't mind them using the code - it's out there, but they could have
  left my name on it.

  Interesting this - I only released that file under GPL!

El código que rompía el criptograma de CSS, fue publicado de forma anónima el 25 de Octubre de 1999 en la lista de correo de Livid("Linux Video and DVD Project") , donde se reunían todos los interesados por el tema y desarrolladores de reproductores de DVD en sistemas GNU/Linux. También, Frank Stevenson ya había publicado un programa escrito en C que realizaba un pequeño ataque al sistema de cifrado.

Todos estos programas, aprovechan las vulnerabilidades o flaquezas de CSS. Por ejemplo, cada disco DVD está cifrado mediante una clave única de 40 bits (por temas de leyes norteamericanas que no permiten exportar software cifrado con una clave superior a dicha cantidad de bits). Ello supone un grave riesgo en sí mismo, ya que 40 bits es un valor lo bastante pequeño como para que sea factible un ataque por fuerza bruta. Pero, por si ello no fuera suficiente, el algoritmo de cifrado (que fue diseñado de forma privada) tiene graves defectos criptográficos que hacen que la clave efectiva sea de apenas 25 bits, prácticamente atacable por cualquier programador con un par de horas libres.

El primer problema, pues, es doble: por un lado, el limitar la clave de cifrado a 40 bits y, por otro, el haber diseñado un algoritmo privado cuya seguridad, como se ha comprobado, deja mucho que desear (clave efectiva de 25 bits).

Pero los problemas no acaban ahí. Como ya se ha dicho, cada DVD se cifra con una clave aleatoria de 40 bits. Esa clave de sesión se cifra con la clave de apertura de cada fabricante de hardware o software reproductor. En la práctica eso implica que la clave de sesión aparece grabada en el DVD unas 400 veces, una vez por cada fabricante reconocido. Cuando un reproductor (ya sea hardware o software) va a leer un disco DVD, lee la clave de sesión cifrada con su clave de apertura, la descifra (usando su clave de apertura) y luego la utiliza para reproducir la película.

Obviamente si fuese posible obtener la clave de apertura de algún reproductor "legal" de DVD, podría leerse cualquier película, sin necesidad de atacar por "fuerza bruta" su clave de sesión (aunque ya hemos explicado que esto es bastante sencillo y rápido también). Los reproductores hardware son un objetivo complicado pero para el sistema operativo Microsoft Windows existen un buen número de reproductores DVD por software. Son programas. Y, como tales, pueden ser estudiados y analizados hasta en sus más íntimos detalles.

Por seguridad, la mayoría de los reproductores software protegen su clave de apertura mediante operaciones complejas, pero se ha visto que existe al menos uno que apenas protege su clave de apertura. Por ejemplo, el reproductor XingDVD. Por ingeniería inversa, se obtuvo la clave de este programa.

Una vez obtenida su clave de apertura, se tiene acceso a cualquier DVD. Es más, con esa clave de apertura es posible obtener el resto de claves de apertura mediante un ataque por "fuerza bruta" de bajo coste: sencillamente se toma un DVD cualquiera y se obtiene su clave de sesión mediante la clave de apertura del XingDVD. Seguidamente se toman el resto de claves cifradas y se intentan descifrar mediante claves aleatorias hasta obtener de nuevo la clave de sesión.

Utilizando esta técnica, los autores del DeCSS han encontrado unas 170 claves, de las 400 que existen en un DVD actual, en apenas unas pocas horas de cálculo.

A partir de estas técnicas fue por las que se sacó el algoritmo de descifrado de CSS, que nos permite ver DVDs en el ordenador sin tener que depender de compañías o empresas, que quieran o no desarrollar el reproductor para el sistema operativo que estemos usando.

Ultimamente, han aparecido variaciones del DeCSS original, como un par de programas escritos en Perl o en C que en tan solo 7 líneas, rompen con todo el sistema de cifrado de DVD. Uno de ellos, es el creado por Charles H. Hannum que mostramos a continuación:

/*     efdtt.c     Author:  Charles M. Hannum <root@ihack.net>             */
/*                                                                         */
/*     Thanks to Phil Carmody <fatphil@asdf.org> for additional tweaks.    */
/*                                                                         */
/*     Length:  434 bytes (excluding unnecessary newlines)                 */
/*                                                                         */
/*     Usage is:  cat title-key scrambled.vob | efdtt >clear.vob           */

#define m(i)(x[i]^s[i+84])<<
unsigned char x[5],y,s[2048];main(n){for(read(0,x,5);read(0,s,n=2048);write(1,s
,n))if(s[y=s[13]%8+20]/16%4==1){int i=m(1)17^256+m(0)8,k=m(2)0,j=m(4)17^m(3)9^k
*2-k%8^8,a=0,c=26;for(s[y]-=16;--c;j*=2)a=a*2^i&1,i=i/2^j&1<<24;for(j=127;++j<n
;c=c>y)c+=y=i^i/8^i>>4^i>>12,i=i>>8^y<<17,a^=a>>14,y=a^a*8^a<<6,a=a>>8^y<<9,k=s
[j],k="7Wo~'G_\216"[k&7]+2^"cr3sfw6v;*k+>/n."[k>>4]*2^k*257/8,s[j]=k^(k&k*2&34)
*6^c+~y;}}
  1. Conclusión



Ya se ha conseguido lo que se quería, poder ver DVDs en cualquier ordenador y con cualquier sistema operativo, con independecia de que algún organismo "oficial" quiera o no desarrollarlo, ya que de esta forma siempre habría sistemas sin poder reproducir DVDs.

Una vez más se ha vuelto a reafirmar el dicho de "hecha la ley, hecha la trampa", ya que a pesar de la prohibición que existe sobre el código fuente del algoritomo DeCSS, se idearon muchas formas de hacerlo público, como técnicas de esteganografía, grabar la lectura por alguien del código y distribuirlo en mp3...

Por desgracia, todo esto también aumenta el pirateo de películas debido a la facilidad con la que se puede "rippear" un DVD y dejarlo copiado en el disco duro descifrado en apenas unas horas.

La MPAA (Motion Picture Association of America) lo va a tener ciertamente difícil para paliar todo esto ya que ya son millones los reproductores y DVDs distribuidos y vendidos, por lo que costaría mucho más una vuelta atrás en la especificación técnica y actualización de todos los equipos que dejar que se sigan copiando DVDs ilegalmente. Solo el tiempo nos dará la soluciones.



  1. Links:

HYPERLINK "http://www.lemuria.org/DeCSS/decss.html"HYPERLINK "http://www.lemuria.org/DeCSS/decss.html"

http://www.lemuria.org/DeCSS/decss.html

http://www.gnu.org/directory/security/crypt/libdvdcss.html

http://www.linuxvideo.org/

http://www-2.cs.cmu.edu/~dst/DeCSS/Gallery/




CC
Alvaro Marin, 2004. Algunos derechos reservados.
http://creativecommons.org/licenses/by-nc-sa/2.0/