In HDCP 2.3 (pdf ) durante lo scambio delle chiavi di sessione, il trasmettitore HDCP invia anche l'HMAC a 256 bit di riv (HMAC-SHA256 (riv, kd)).
Perché è richiesto? Previene qualsiasi attacco?
Iniziamo a suddividere questo (HMAC-SHA256(riv, kd))
.
Come descritto in RFC2104 , un HMAC può essere definito come segue:
%codice%
dove HM AC=H(K⊕opad||H(K⊕ipad||text))
è la funzione di hash scelta, H
è la chiave segreta, K
è il simbolo OR esclusivo, ⊕
è il simbolo di concatenazione e ||
, ipad
sono valori costanti.
Basato su questo articolo , la costruzione di HMAC sulla funzione di hash Merkle-Damgård backdoor produce uno schema HMAC backdoored, che è facilmente rimediabile usando la chiave backdoor.
Quindi, è facile vedere che dopo che i messaggi sono stati inseriti in opad
, continuano a causare una collisione nella catena hash interna di HMAC ~ h. Poiché la catena esterna è uguale per tutti i messaggi, k⊕ipad
e m
hanno entrambi lo stesso tag m∗
. Mettendo in modo diverso , HMAC non è resiliente per le backdoor solo perché usa una chiave segreta. In sintesi, poiché un avversario in possesso di una backdoor può forgiare un tag per un nuovo messaggio, HMAC ~ h è perdonabile e quindi non è pseudocasuale.
Per favore, fai riferimento a paper , per ulteriori informazioni.
A HMAC is a specific construction for calculating a message authentication code (MAC) involving a cryptographic hash function in combination with a secret key. Input is a message and a key, output is the HMAC value. It is used to verify data integrity and authenticity of a message. The accompanying hash function for the HDCP standard is the SHA256 function which works with input blocks of 512 bits.
In the HDCP standard, the HMAC-SHA256 function is used for the locality check and the calculation of H (HMAC of
km
). The most demanding HMAC calculation concerning the timing is the one used in the locality check. As mentioned before, the NIOS processor has not enough computing power to complete a HMAC-SHA256 operation within 2 ms. That’s why this block has to be rewritten in VHDL. The HMAC for the locality check has a key size of 256 bits and a message size of 64 bits.
The locality check asks receiver and transmitter to calculate a HMAC value of a random number
rn
(message) and the pre-shared keykd
. Before the calculation starts, the pre-shared keykd
has to be xored with a pre-shared random number (rrx
). The random numberrn
is sent in plaintext to the receiver, the receiver sends back the HMAC value. The transmitter checks now if its own HMAC is identical to the received HMAC. Only someone who is in possession of the pre-shared key can compute the correct HMAC value. Additionally, it is impossible to conclude the key from the HMAC value, because the HMAC-SHA256 algorithm is a one way function.
(Gentilmentefornitodalla
Come mostrato sotto, la chiave viene generata usando p = ((riv XOR streamCtr) || inputCtr). È necessario che "non ci siano due flussi elementari contenuti in un dato programma o programmi diversi che possano avere lo stesso streamCtr se questi flussi elementari condividono lo stesso Ks o riv" in modo che gli stream vengano crittografati con chiavi diverse (utilizzando p differenti).
Se un attaccante può modificare il riv, può fare in modo che il trasmettitore generi la chiave di un altro streamCtr inviando un riv modificato.
Lo scopo di inviare HMAC è di fornire più autenticità al messaggio.
HDCPReceiver’spublickeyCertificateisverifiedbytheHDCPtransmitterthenthedevicesshareamasterkeyKm.[...]UponreceivingtheencryptedKm,receiverdecryptitusingthereceiverprivatekey.
Quindieccoloscopodell'HMAC:
Afterthereceiversuccessfullydecryptsthekm,itsendsbacktheH_Prime,aHMAC-SHA-256,hashvalueofthemasterkeyKmtothetransmitter.ThisistoprovideanacknowledgementtothetransmitterthatthereceiverhasindeedsuccessfullydecryptthemasterKeyKm.
Controllaquesto