jueves, 28 de junio de 2007

Cómo funciona la clave de aacs (round 2)

Bien, una vez estudiado mejor el tema, vuelvo a intentar la explicación:

Aacs es un sistema de protección anticopia para los discos de alta definición. Se basa en meter la clave de descifrado de la película dentro de mismo disco que la contiene, pero para acceder a ella se requiere un lector óptico autorizado y un reproductor software autorizado. De este modo en teoría no se puede construir simplemente un ripeador que te copie el contenido al disco duro y ya está, ya que ese ripeador no estará autorizado y no podrá obtener la clave para leer el contenido.

Antes de explicar las formas de atacar el sistema, voy a detallar un poco más el funcionamiento. De nuevo dejo los términos en inglés por si leeis algo más en otro lado.

Parte I: Descripción simplificada de aacs .

(Todas las uniones son operaciones criptográficas)


¿Por qué un disco tiene dos claves? Una de ellas está en un sitio donde no se puede escribir (por ahora) con una grabadora doméstica de discos de alta definición (la escribe una grabadora industrial), por lo que no se podría hacer una copia exacta de ese disco a otro (si no, menuda protección anticopia). No se ha metido directamente ahí la otra clave porque, simplemente, es un espacio muy pequeño y no cabe, ya veremos por qué más tarde. Llamaremos a esa clave "Volume id".

Hay otra clave que se llama "Media Key Block", y que está cifrada. Sólo los reproductores autorizados tienen la manera de descifrarla, ya que tienen un conjunto de claves secretas llamadas "device keys", de forma que al menos una de ellas descifre esa clave.

Así que: un reproductor autorizado pide el Volume id y el Media Key Block, descifra el Media Key Block con una de sus claves secretas, y hace una operación criptográfica con el resultado que ha obtenido y el Volume id para obtener la clave definitiva con la que descifrará la película.

¿Dónde está la seguridad? Obviamente un reproductor autorizado, que puede leer una película, podría permitir copiarla, ripearla, u otras operaciones "indeseables". Para evitar ésto es posible "revocar" un reproductor, de forma que no pueda seguir leyendo la clave cifrada incluida en el disco. De este modo, se fuerza a que un reproductor autorizado no ofrezca de golpe una opción de "copia esta película", o que si ha dejado escapar (o le han robado) sus claves para que las usen reproductores "pirata", éstas claves dejen de funcionar. Hablaré sobre la revocación y sobre lo que ésto implica más adelante.

Parte II: La relación entre hardware y software

El consorcio de aacs ha montado todo un sistema (ehm, digamos mafioso) para que todas las partes de la cadena sean "buenas" y no permitan a un usuario hacer operaciones "no permitidas". La cadena va como sigue:



Tanto el lector como el programa reproductor tienen unos certificados firmados que les permiten demostrar que son quienes dicen ser (supongo que para evitar unidades virtuales y ripeadores a uno y otro lado). Se demuestran entre sí que son agentes autorizados antes de que el lector comience a leer el disco (comenzando por las claves) y a darle los datos al reproductor.

¿Qué ocurre si el lector o el programa reproductor son revocados? Si el lector o el programa reproductor dejan de estar autorizados, siguen teniendo el certificado que tenían anteriormente y podrían seguir usándolo. ¿Cómo evitarlo? Se crean unas listas de lectores y reproductores revocados, de forma que si un lector o reproductor está en una de esas listas no está autorizado, aunque tenga un certificado (y el lector o el programa reproductor "bueno" debería dejar de hablarle).

¿Cómo distribuyes las listas de revocación? Si revocas un dispositivo, deberás hacer llegar a todos los lectores y reproductores una lista renovada que lo incluye. Para ello, cada vez que publicas un disco con una película, metes en el Media Key Block, además de la clave cifrada para descifrar la película, una copia de las últimas listas de revocación que tengas. De este modo el lector y el programa, cada vez que leen un disco, ven si tienen que sustituir la lista de revocación que tienen por la que aparece en el disco, viendo si ésta última es más moderna que la suya.

Resumiendo: tú tienes un programa y un lector óptico en tu ordenador. El consorcio de aacs decide revocar tu lector, por ejemplo, porque está permitiendo (queriendo o no) que reproductores no autorizados accedan al contenido del disco, o por que le han robado la clave secreta que corresponde al certificado, o simplemente porque no les ha pagado la cuota de protección de ese año. Tú no lo sabes, y te funciona todo perfectamente. Compras una película de estreno y la metes en tu ordenador. De pronto, no sólo no puedes ver esa película de estreno, sino que tu reproductor ya ha guardado la lista de revocación mejorada y desconfía del lector (o al revés), y ya no se comunica con él. No puedes ver ninguna película, ni siquiera las que veías antes. En el mejor de los casos, podrás solucionarlo conectándote a internet o obteniendo un disco que actualice el software de tu reproductor o lector, dándole un nuevo certificado que no esté revocado. En el peor de los casos estás jodido.

Yo sinceramente no creo que esa opción se use mucho, ya que si compras un disco, lo metes, y todo deja de funcionar, la gente se va a cabrear sobremanera (yo me cabrearía, vamos).

Y llegamos al modo de ataque número 1 (muy difícil pero bastante interesante): Lamentablemente las listas de revocación van firmadas criptográficamente por el consorcio de aacs, pero si, suponiendo que las listas van númeradas 1,2,3... y que un número mayor indica que es más moderna, se pudiese hacer una lista número 999.999.999 (o el número mayor posible), sólo metiendo un disco que contuviese esa lista podrías hacer que a partir de entonces el reproductor y lector sustituyesen las listas que tuviesen e ignorasen las listas de revocación posteriores (ya que no hay ninguna lista que pueda publicar aacs que sea "más actual" que esa). Así podrías hacer que tu lector no pueda ser revocado (el programa reproductor es otra historia, como diré en la siguiente entrada).

(continuará...)