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?
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
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.
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.
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.
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 compartidarn
. Antes de que comience el cálculo, la clave precompartidakd
debe ser identificada con un número aleatorio previamente compartido (kd
). El número aleatoriorrx
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.
(Amablementeproporcionadopor
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.
Lea otras preguntas en las etiquetas drm