# BD+

BD+ es un sistema anti copia desarrollado para su uso dentro del sistema de Gestión de derechos digitales de Blu-ray. Fue desarrollado por Cryptography Research Inc. y está basado en el concepto Self-Protecting Digital Content (SPDC) desarrollado por la misma empresa. Su objetivo es evitar copias no autorizadas de Blu-ray así como la reproducción de estos en dispositivos no autorizados. El sistema BD+ tuvo un papel determinante en la guerra digital entre Blu-ray y HD DVD ya que este sistema de seguridad propició el apoyo de varios estudios de cine al Blu-ray. Este hecho decantó la "Guerra de los Formatos" que terminó con el abandono de los HD DVD por parte de Toshiba.
BD+ es un intérprete basado en el uso de una máquina virtual diseñado especialmente para la seguridad de los discos Blue Ray. Este intérprete se encarga de ejecutar código almacenado en el disco con objeto de proteger el contenido del disco y realiza diversas funciones listadas a continuación:
* Examinar el entorno de ejecución, para ver si el reproductor ha sido manipulado. Cada fabricante del dispositivo que disponga de licencia deberá facilitarla a la autoridad de la BD + para poder identificar sus dispositivos.
* Verificar que las claves del reproductor no han cambiado. Si el hardware ha sido modificado se puede evitar la reproducción sin necesidad de revocar las claves usadas en el lector.
* Ejecutar código nativo, posiblemente para reparar sistema inseguros.
* Transformar la salida de audio y vídeo. Partes del contenido no se podrán ver sin una reparación realizada por el BD+. De esta forma no se permite la reproducción del contenido si no dispone de licencia.
* Limitar la reproducción de un disco Blu-Ray solamente en el primer dispositivo en el que se reproduzca el disco.
Si un fabricante de dispositivos de reproducción considera que los dispositivos han sido atacados, puede liberar código que detecta y evita la vulnerabilidad. Estos programas pueden ser incluidos en todas las versiones del disco nuevo.
Las especificaciones de la BD + de máquina virtual solo están disponibles oficialmente a los fabricantes de dispositivos con licencia. Una lista de los adoptantes la licencia está disponible en el sitio web de BD Android 11; ZTE A7040 Build/RP1A.201005.001

## Máquina Virtual

Los ataques a la seguridad del sistema han permitido descubrir detalles de la implementación de la máquina virtual. El código se ejecuta en un procesador big endian virtual con 4 MB de memoria. Este procesador soporta 59 instrucciones diferentes y de 32 registros de propósito general y tres registros de propósito específico para el filtro de la instrucción, el contador de ciclos de reloj y el contador de programa. La Máquina Virtual BD+ aplica la protección de memoria mediante el enmascaramiento del acceso a memoria para evitar que puedan acceder fuera de las áreas de memoria designada. La ejecución de código contenido comienza en la dirección 0x1000 en relación con el principio de la carga útil del primer bloque del archivo 00001.svm (ubicado dentro del directorio BDSVM).

### Llamadas al sistema

Si bien la máquina virtual BD + es extremadamente simple, la interfaz entre la máquina virtual y el reproductor es algo más complicado. BD + proporciona el código contenido con 25 llamadas al sistema o "trampas". Hasta el momento se han analizado el grupo de identificadores siguiente: 00 (el manejo de eventos), 01 (operaciones de criptografía), 02 (operaciones aritméticas), 03 (operaciones de memoria), 04 (acceso a la memoria de la ranura), 05 (acceso a los dispositivos) y 80 (depuración).
Cada una de las llamadas al sistema puede ser invocado por la instrucción TRAP. Por defecto el registro 29 se usa como puntero a la pila de forma que apunta a la zona de memoria con los parámetros. Después de cualquier llamada al sistema el código de retorno se escribe en el registro 1. Durante la ejecución del contenido el código realiza diversas pruebas para verificar que está siendo ejecutado en un dispositivo de confianza. Estos test incluyen la petición del certificado y la verificación de la signatura usando la clave pública del dispositivo.