He estado intentando calcular el secreto maestro utilizado para cifrar algunos datos utilizando la clave pública del cliente B
, la clave privada del servidor a
y los valores aleatorios del cliente y el servidor. He calculado k=B^a
, lo que, a mi entender, me da el secreto premaster. Luego ingresé esto junto con los valores aleatorios en la siguiente función PRF ( página 15 de este 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]
De acuerdo con la especificación RFC para TLS1.2, esto debería generar el secreto maestro, pero al verificarlo con los datos que tengo, es incorrecto. ¿Dónde está mi error?