¿Por qué se requiere HMAC riv en HDCP 2.3?

0

En HDCP 2.3 (pdf ) durante el intercambio de claves de sesión, el transmisor HDCP envía también el HMAC de 256 bits de riv (HMAC-SHA256 (riv, kd)).

¿Por qué es necesario? ¿Previene algún ataque?

    
pregunta moti 19.11.2018 - 13:38
fuente

3 respuestas

0

El propósito de enviar el HMAC es proporcionar más autenticidad al mensaje.

  

EltransmisorHDCPverificaelcertificadodeclavepúblicadelreceptorHDCPyluegolosdispositivoscompartenunaclavemaestraKm.[...]AlrecibirelKmcifrado,elreceptorlodescifrautilizandolaclaveprivadadelreceptor.

EntoncesesteeselpropósitodelaHMAC:

  

Despuésdequeelreceptordescifraconéxitoelkm,devuelveel  H_Prime,unHMAC-SHA-256,valorhashde  Lallavemaestrakmaltransmisor.Estoesparaproporcionaruna  acusedereciboaltransmisorqueefectivamentetieneelreceptor  DescifrarconéxitolaclavemaestraKm.

Marqueeste enlace para detalles

    
respondido por el Soufiane Tahiri 19.11.2018 - 14:25
fuente
0

Primero desglosemos este (HMAC-SHA256(riv, kd)) .

Como se describe en RFC2104 , una HMAC se puede definir de la siguiente manera: %código% donde HM AC=H(K⊕opad||H(K⊕ipad||text)) es la función hash elegida, H es la clave secreta, K es el símbolo OR exclusivo, es el símbolo de concatenación y || , ipad son valores constantes.

Sobre la base de este papel , crear HMAC sobre la función hash de Merkle-Damgård de puerta trasera produce un esquema HMAC de puerta trasera, que es fácilmente perdonable utilizando la llave de puerta trasera.

Por lo tanto, es fácil ver que después de que los mensajes sean precedidos por opad , todavía conducen a una colisión en la cadena de hash interna de HMAC ~ h. Como la cadena externa es igual para todos los mensajes, k⊕ipad y m tienen la misma etiqueta m∗ . Poniéndolo de manera diferente , HMAC no es resistente a la puerta trasera solo porque usa una clave secreta. En resumen, dado que un adversario que tiene una puerta trasera puede falsificar una etiqueta para un mensaje nuevo, HMAC ~ h se puede perdonar y, por lo tanto, no es pseudoaleatorio.

Consulte el documento para obtener más información.

¿Qué es el HMAC?

  

Un HMAC es una construcción específica para calcular un código de autenticación de mensaje (MAC) que involucra una función criptográfica hash en combinación con una clave secreta. La entrada es un mensaje y una clave, la salida es el valor HMAC. Se utiliza para verificar la integridad de los datos y la autenticidad de un mensaje. La función hash que acompaña al estándar HDCP es la función SHA256 que funciona con bloques de entrada de 512 bits.

¿Por qué se requiere en el estándar HDCP?

  

En el estándar HDCP, la función HMAC-SHA256 se usa para verificación de localidad y el cálculo de H (HMAC de t ). El cálculo HMAC más exigente en relación con el tiempo es el que se utiliza en la verificación de localidad. Como se mencionó anteriormente, el procesador NIOS no tiene suficiente potencia de cómputo para completar una operación HMAC-SHA256 dentro de 2 ms. Es por eso que este bloque debe reescribirse en VHDL. El HMAC para la verificación de localidad tiene un tamaño de clave de 256 bits y un tamaño de mensaje de 64 bits.

Función del algoritmo HMAC-SHA256 para la verificación de localidad:

  

La verificación de localidad pide al receptor y al transmisor que calculen un valor HMAC de un número aleatorio km (mensaje) y la clave previamente compartida rn . Antes de que comience el cálculo, la clave precompartida kd debe ser identificada con un número aleatorio previamente compartido ( kd ).   El número aleatorio rrx se envía en texto simple al receptor, el receptor devuelve el valor HMAC. El transmisor comprueba ahora si su propio HMAC es idéntico al HMAC recibido. Solo alguien que esté en posesión de la clave precompartida puede calcular el valor HMAC correcto. Además, es imposible concluir la clave a partir del valor HMAC, ya que el algoritmo HMAC-SHA256 es una función unidireccional.

Diagrama de bloques HD sobre sistema IP:

(Amablementeproporcionadopor Master Thesis de Lukas Itin)) / p>     

respondido por el mike 19.11.2018 - 14:39
fuente
0

Como se muestra a continuación, la clave se genera utilizando p = ((riv XOR streamCtr) || inputCtr). Se requiere que "no haya dos transmisiones elementales contenidas en un programa dado o programas diferentes puedan tener la misma secuencia si esas transmisiones elementales comparten la misma Ks o riv" para que las transmisiones se cifren con claves diferentes (utilizando p diferentes).

Si un atacante puede modificar el riv, puede hacer que el transmisor genere la clave de otro streamCtr enviando un riv modificado.

    
respondido por el moti 12.12.2018 - 10:25
fuente

Lea otras preguntas en las etiquetas