Eventos
19 nov, 23 - 21 nov, 23
Obtenga la ventaja competitiva que necesita con soluciones eficaces de inteligencia artificial y nube al asistir a Microsoft Ignite online.
Regístrese ahoraEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
En este tema se describe cómo usar Output Protection Manager (OPM) para proteger el contenido de vídeo cuando se desplaza a una pantalla a través de un conector físico. Este tema contiene las siguientes secciones:
El contenido de vídeo Prémium normalmente se cifra para protegerlo frente a la duplicación no autorizada. Por supuesto, para que el vídeo se pueda ver, antes debe descifrarse. Los fotogramas descifrados y sin comprimir deben desplazarse a través de un conector físico hasta llegar a la pantalla. Los proveedores de contenido pueden requerir que los fotogramas de vídeo estén protegidos en ese momento, ya que viajan a través del conector físico.
Existen varios mecanismos de protección para tal fin, entre los que se incluyen Protección de contenido digital de ancho de banda alto (HDCP) y Protección de contenido de DisplayPort (DPCP) en el caso de las salidas digitales; y Copy Generation Management System - Analog (CGMS-A) en el de las salidas analógicas.Protección de contenido digital de ancho de banda alto. Por lo general, estos mecanismos implican cifrar o rastrear la señal antes de llegue a la pantalla.
OPM permite a las aplicaciones aplicar mecanismos de protección de contenido en la salida de vídeo. Mediante OPM, la aplicación envía comandos y solicitudes de estado al controlador de gráficos a través de un canal seguro de confianza. OPM permite que las aplicaciones:
OPM reemplaza el Protocolo de protección de salida certificada (COPP) y usa una API similar. Por no perder la compatibilidad con las versiones anteriores, la interfaz de OPM puede emular la interfaz de COPP. Estas son algunas de las diferencias entre OPM y COPP:
Si la aplicación usa el conjunto de tecnologías Protected Media Path (PMP) para reproducir contenido de vídeo, no es preciso usar OPM API, ya que PMP realiza todas las llamadas a OPM necesarias. OPM API está disponible para todas aquellas aplicaciones que no usan PMP.
OPM está disponible tanto en Windows Vista como en las versiones posteriores, pero la API no se hizo pública hasta Windows 7. Para usar OPM en una aplicación, es preciso tener tanto los encabezados como los archivos de biblioteca del SDK de Windows 7. Para usar OPM en Windows Vista o Windows Server 2008 no es necesario redistribuir ningún archivo DLL.
Las tarjetas gráficas pueden tener varias salidas físicas, cada una de ellas con sus propias funcionalidades. Para que una aplicación pueda reproducir contenido protegido, debe establecer los mecanismos de protección adecuados en todas las salida de vídeo asociadas a la tarjeta gráfica que mostrará el vídeo. Los mecanismos de protección que se van a aplicar dependerán de las reglas de uso del contenido.
Cada salida de vídeo se representa mediante una instancia de la interfaz de IOPMVideoOutput. Para obtener las salidas de vídeo se pueden usar un dispositivo Direct3D o controladores de monitor.
Uso de un dispositivo Direct3D:
Uso de controladores de monitor:
Antes de que la aplicación envíe comandos o solicitudes de estado de OPM, no solo debe comprobar que la salida de vídeo es de confianza, sino que también debe establecer una clave de sesión. La clave de sesión se usa para firmar los datos que se intercambian entre la aplicación y el controlador de gráficos.
OPM API define un protocolo de enlace que establece tanto la confianza como la clave de sesión. Este protocolo de enlace se debe ejecutar en todas las instancias de la interfaz de IOPMVideoOutput, como se indica a continuación:
Llame a IOPMVideoOutput::StartInitialization. Este método recupera dos datos:
Compruebe que Microsoft ha firmado la cadena de certificados.
Nota
La revocación de certificados está fuera del ámbito de OPM.
Obtenga de la cadena de certificados la clave pública del controlador.
Genere una clave de sesión AES de 128 bits.
Genere dos números aleatorios de 32 bits:
Para generar estos números se debe usar un generador de números pseudoaleatorios protegidos criptográficamente, como CryptGenRandom.
Copie el número aleatorio del controlador (obtenido en el paso 1), la clave de sesión y los dos números de secuencia en una estructura OPM_ENCRYPTED_INITIALIZATION_PARAMETERS, como se describe en IOPMVideoOutput::FinishInitialization.
Cifre la estructura OPM_ENCRYPTED_INITIALIZATION_PARAMETERS con RSAES-OAEP, para lo que debe usar la clave pública del controlador, que se encuentra en el certificado del controlador.
Las solicitudes de estado de OPM devuelven información sobre la salida de vídeo, como el tipo de conector físico y el nivel de protección actual. Para obtener una lista de los tipos de solicitud, consulte Solicitudes de estado de OPM.
Para enviar una solicitud de estado, siga los pasos que se indican a continuación.
Inicialice una estructura OPM_GET_INFO_PARAMETERS como se muestra en la siguiente tabla.
Miembro | Descripción |
---|---|
omac | Omita este campo por ahora. |
rnRandomNumber | Un número aleatorio de 128 bits protegido criptográficamente. Siempre que realice una solicitud de estado tendrá generar un nuevo número aleatorio, aunque realice la misma solicitud. Almacene el número en una variable, ya que tendrá que hacer referencia a él más adelante. |
guidInformation | GUID que identifica la solicitud de estado. Para obtener una lista de solicitudes de estado, consulte Solicitudes de estado de OPM. |
ulSequenceNumber | El número de secuencia global. En el caso de la primera solicitud de estado, use el número de secuencia inicial que especificó en el método IOPMVideoOutput::FinishInitialization (paso 5 de Inicialización de una sesión de OPM). En cada solicitud de estado posterior, tendrá que incrementar este número en 1. |
abParameters | Matriz de bytes que contiene datos de entrada adicionales para la solicitud. El formato de los datos de entrada aparece en el tema de referencia de cada solicitud de estado. |
cbParametersSize | El tamaño de los datos válidos de la matriz abParameters. El contenido del resto de la matriz no está definido. |
Calcule el código CBC-MAC de una clave (OMAC-1) para calcular un hash para el bloque de datos que aparece después del miembro omac y, después, elija este valor para el miembro omac. Consulte Código de ejemplo de OPM.
Llame al método IOPMVideoOutput::GetInformation. Utilice un puntero con la estructura OPM_GET_INFO_PARAMETERS y otro con una estructura OPM_REQUESTED_INFORMATION. La respuesta del controlador se escribe en la estructura OPM_REQUESTED_INFORMATION.
Calcule un OMAC para la estructura OPM_REQUESTED_INFORMATION, sin incluir el miembro omac. Compruebe que el OMAC coincide con el valor del miembro omac.
Asegúrese de que el miembro cbRequestedInformationSize de la estructura OPM_REQUESTED_INFORMATION proporciona el tamaño correcto a los datos de salida. Por ejemplo, los datos de salida de la consulta OPM_GET_CONNECTOR_TYPE son una estructura OPM_STANDARD_INFORMATION, por lo que el valor de cbRequestedInformationSize debe sersizeof(OPM_STANDARD_INFORMATION)
.
Convierta el miembro abRequestedInformation de la estructura OPM_REQUESTED_INFORMATION en la estructura de datos de salida correcta. Por ejemplo, si la solicitud de estado es OPM_GET_CONNECTOR_TYPE, convierta abRequestedInformation en una estructura OPM_STANDARD_INFORMATION.
Asegúrese de que el miembro rnRandomNumber de la estructura de datos de salida coincide con el valor de rnRandomNumber del paso 1.
Compruebe el miembro ulStatusFlags de la estructura de datos de salida, como se describe en Control de una salida de vídeo deshabilitada.
Si se produce un error en alguna de las comprobaciones de los pasos 5 a 8, la aplicación debe dejar de mostrar el contenido protegido.
Los comandos de OPM se usan para establecer el nivel de protección y otros valores de configuración en la salida de vídeo. El envío de un comando de OPM es similar al envío de una solicitud de estado, excepto que no hay datos de respuesta del controlador. Para obtener una lista de comandos, consulte Comandos de OPM.
Para enviar un comando de OPM, siga los pasos que se indican a continuación.
Rellene una estructura OPM_CONFIGURE_PARAMETERS como se muestra en la tabla siguiente.
Miembro | Descripción |
---|---|
omac | Omita este campo por ahora. |
guidSetting | GUID que identifica el comando. Para obtener una lista de comandos, consulte Comandos de OPM. |
ulSequenceNumber | El número de secuencia global. En el caso del primer comando, use el número de secuencia inicial que especificó en el método IOPMVideoOutput::FinishInitialization (paso 5 de Inicialización de una sesión de OPM). En cada envío posterior de un comando, tendrá que incrementar este número en 1. |
abParameters | Matriz de bytes que contiene datos de entrada adicionales para el comando. El formato de los datos de entrada aparece en el tema de referencia de cada comando. |
cbSettingDataSize | El tamaño de los datos válidos de la matriz abParameters. El contenido del resto de la matriz no está definido. |
Calcule un OMAC para el bloque de datos que aparece después del miembro omac y, después, elija este valor para el miembro omac.
Llame a IOPMVideoOutput::Configure.
Para la mayoría de los comandos, hay una solicitud de estado correspondiente que devuelve el estado del comando. Por ejemplo, el comando OPM_SET_PROTECTION_LEVEL establece el nivel de protección, mientras que el comando OPM_GET_VIRTUAL_PROTECTION_LEVEL obtiene el nivel de protección actual.
Cualquier salida de vídeo se puede deshabilitar automáticamente en cualquier momento para evitar el uso no autorizado del contenido de vídeo. Esto puede suceder si algún mecanismo de protección deja de funcionar, si el controlador detecta alteraciones o si la pantalla se ha desconectado del conector físico. Durante el proceso de deshabilitación de una salida de vídeo, no se muestran fotogramas de vídeo.
Mientras la protección de contenido esté habilitada, una aplicación debe realizar periódicamente (al menos una vez cada 2 segundos) los siguientes pasos:
Las siguientes marcas se definen para ulStatusFlags.
Marca | Descripción |
---|---|
OPM_STATUS_LINK_LOST | La protección de salida dejó de funcionar por algún motivo; por ejemplo, es posible que la pantalla no esté enchufada al conector. Detenga la reproducción y desactive todos los mecanismos de protección de salida. |
OPM_STATUS_RENEGOTIATION_REQUIRED | La aplicación debe restablecer la sesión de OPM. Responda como se muestra a continuación:
|
OPM_STATUS_REVOKED_HDCP_DEVICE_ATTACHED | Esta marca solo se aplica cuando se usa HDCP e indica que hay algún dispositivo HDCP revocado. Detenga la reproducción y desactive todos los mecanismos de protección en esta salida de vídeo. Siempre que se establece esta marca, también se establece la marca OPM_STATUS_LINK_LOST. |
OPM_STATUS_REVOKED_HDCP_DEVICE_ATTACHED | El controlador ha detectado alteraciones. Detenga la reproducción y no reproduzca más vídeos con esta salida de vídeo. También se recomienda dejar de usar cualquier otra salida de vídeo, ya que ello podría suponer un peligro para el sistema. |
En esta sección se describe cómo habilitar la protección de salida HDCP mediante OPM. Este es un esquema general de los pasos que debe realizar la aplicación. Más adelante se proporciona detalles al respecto.
Para establecer el SRM, siga los pasos que se indican a continuación.
Para habilitar HDCP, siga los pasos que se indican a continuación.
Cuando el método GetInformation vuelve, la matriz abRequestedInformation de la estructura OPM_REQUESTED_INFORMATION contiene una estructura OPM_STANDARD_INFORMATION. El miembro ulInformation de esta estructura contiene un valor de la enumeración OPM_HDCP_PROTECTION_LEVEL. Si el valor es OPM_HDCP_ON, significa que HDCP está habilitado. De lo contrario, repita los pasos 1 a 2 hasta que HDCP esté habilitado o se produzca un error (recuerde incrementar el número de secuencia y generar un nuevo número aleatorio cada vez).
Normalmente se tardan entre 100 y 200 milisegundos para habilitar HDCP, pero puede tardar más tiempo. No suponga que HDCP está habilitado hasta que lo haya comprobado.
Cuando la aplicación termine de reproducir contenido protegido, desactive HDCP. Los pasos son los mismos que para habilitar HDCP, pero en el paso 1, establezca ulProtectionLevel en OPM_HDCP_OFF.
Nota
No habilite HDCP si el tipo de conector es OPM_CONNECTOR_TYPE_DISPLAYPORT_EMBEDDED (consulte Marcas del tipo de conector de OPM).
Eventos
19 nov, 23 - 21 nov, 23
Obtenga la ventaja competitiva que necesita con soluciones eficaces de inteligencia artificial y nube al asistir a Microsoft Ignite online.
Regístrese ahora