As chaves de sessão têm o mesmo valor em ambos os lados durante o TLS?

Aug 15 2020

Tenho duas perguntas sobre as chaves de sessão geradas durante as últimas etapas da fase de handshake:

  1. A "chave de gravação do cliente" e a "chave de gravação do servidor" têm o mesmo valor, embora ambas as chaves sejam geradas independentemente em ambos os lados?

  2. (Mesma pergunta) O "client write MAC key" e a "server write MAC key" também têm o mesmo valor?

Pergunta geral: o cliente e o servidor chegam aos mesmos resultados ao gerar as chaves de sessão?

Respostas

5 MaartenBodewes Aug 15 2020 at 21:49

A "chave de gravação do cliente" e a "chave de gravação do servidor" têm o mesmo valor, embora ambas as chaves sejam geradas independentemente em ambos os lados?

Não, veja a próxima resposta.

Para chaves de criptografia, isso é menos importante, pois a mensagem é transmitida por MAC de qualquer maneira. No entanto, dentro do TLS 1.2 e antes do MAC-then-encrypt ser usado, o que pode expor algumas vulnerabilidades indesejadas. Por exemplo, se o remetente é vulnerável a ataques oracle, então você pode usar isso para descriptografar mensagens quando a mesma chave seria usada. Isso mostra que a separação de chaves é sempre uma boa ideia, já que ataques de oráculo de preenchimento não foram inicialmente previstos.

(Mesma pergunta) O "client write MAC key" e a "server write MAC key" também têm o mesmo valor?

Não, eles são deliberadamente diferentes, de modo que você não pode permitir que os remetentes tenham suas próprias mensagens sendo reproduzidas de volta para eles. Basicamente, um KDF (o PRF no jargão do TLS 1.2) usa um rótulo diferente para cada chave, o que significa que cada chave derivada dependerá apenas da chave mestra (usando uma função unilateral).

Pergunta geral: o cliente e o servidor chegam aos mesmos resultados ao gerar as chaves de sessão?

Sim, eles fazem. Mas eles simplesmente acabam com os mesmos valores para cada chave específica . O cliente e o servidor derivam segredos mestres idênticos e, em seguida, passam a usar os mesmos rótulos para as chaves específicas. Portanto, ambos os lados terão a "chave de gravação do cliente", mas o servidor a usará para descriptografar as mensagens.