Primeiro, seu arquivo mseed (o rótulo + valor inicial no PRF) deve ter 77 bytes, e não 69. Você deve ter bagunçado o cliente e / ou servidor de alguma forma.
Em segundo lugar, -hmac spre.key
está muito errado. Utiliza os caracteres reais s p r e . k e y
, isto é, os octetos 73 70 72 65 2e 6b 65 79 como a chave HMAC. Você precisa usar o valor do segredo pré-mestre descriptografado, que é o conteúdo do seu arquivo spre.key. E porque são dados binários que podem incluir bytes que são códigos de caracteres especiais como null, tab, dollarsign, quote, barra invertida, delete, etc., você não pode passá-lo com segurança diretamente, como -hmac {key}
ou mesmo -hmac '{key}'
; em vez disso, você precisa usar -mac hmac -macopt hexkey:{hex key value}
como mostrei na resposta anterior, exceto usando o valor real da chave hexadecimal que você mostrou neste Q, ou seja, 0303CB30...2CDC
.
Terceiro, como mostrei na resposta anterior, você concatena os resultados da camada segundo dos HMACs, ou seja, em minha notação k1, k2, ... para formar a saída (que nesse exemplo era 100 octetos):
$ cat k1 k2 k3 k4 | head -c100 | xxd
mas, como eu disse:
... for the actual TLS1.2 handshake also, adjusted for the correct lengths: 48 for the master secret, and depending on the ciphersuite for the working keys.
Para a primeira derivação (premaster-to-master) você precisa de 48 octetos, então você só precisa dos dois primeiros pedaços de 32 (a0- > a1- > a2 a1 + a0- > k1 a2 + a0- > k2) então concatene k1 + k2 e tome os primeiros 48 octetos.
Para a segunda derivação (master-to-working), o comprimento que você precisa depende do ciphersuite que foi negociado. Você disse que está usando RSA-com-AES256CBC-SHA que (em TLS1.2 ou 1.1, mas não 1.0) precisa de 40 octetos de chaves HMAC e 64 octetos de chaves de criptografia totalizando 104 octetos. Para 104 ocets, você precisa calcular 4 trechos de 32, concatenar k1 + k2 + k3 + k4 e dividi-los em cliente-MAC, servidor-MAC, criptografia de cliente, criptografia de servidor nessa ordem. Veja 6.3 do RFC. Observe também que o rótulo é diferente e, para essa derivação, a semente é (label +) server_random + client_random, não (label +) client_random + server_random como no primeiro.