Ho cercato di calcolare il master secret utilizzato per crittografare alcuni dati utilizzando la chiave pubblica del client B
, la chiave privata del server a
ei valori casuali del client e del server. Ho calcolato k=B^a
, che a mio avviso mi dà il segreto premaster. Quindi inserisco questo insieme ai valori casuali nella seguente funzione PRF ( pagina 15 di questo pdf ):
def prf(secret,label,seed,numblocks):
seed=label+seed
output = ''
a=hmac.new(secret,msg=seed,digestmod=hashlib.sha256).digest()
for j in range(numblocks):
output += hmac.new(secret,msg=a+seed,digestmod=hashlib.sha256).digest()
a=hmac.new(secret,msg=a,digestmod=hashlib.sha256).digest()
return output
def master_secret(pms,client_random,server_random):
out=prf(pms,"master secret",client_random+server_random,2)
return out[:48]
Secondo le specifiche RFC per TLS1.2, questo dovrebbe fornire il master secret, ma quando lo si verifica con i dati che ho, è sbagliato. Dov'è il mio errore?