Les clés de session ont-elles la même valeur des deux côtés pendant TLS?

Aug 15 2020

J'ai deux questions sur les clés de session générées lors des dernières étapes de la phase de prise de contact:

  1. La "clé d'écriture du client" et la "clé d'écriture du serveur" ont-elles la même valeur, même si les deux clés sont générées indépendamment des deux côtés?

  2. (Même question) La "clé MAC d'écriture du client" et la "clé MAC d'écriture du serveur" ont-elles également la même valeur?

Question générale: le client et le serveur arrivent-ils aux mêmes résultats lors de la génération des clés de session?

Réponses

5 MaartenBodewes Aug 15 2020 at 21:49

La "clé d'écriture du client" et la "clé d'écriture du serveur" ont-elles la même valeur, même si les deux clés sont générées indépendamment des deux côtés?

Non, voyez la réponse suivante.

Pour les clés de chiffrement, cela est moins important car le message est de toute façon MAC. Cependant, dans TLS 1.2 et avant l'utilisation de MAC-then-encrypt, ce qui peut exposer certaines vulnérabilités indésirables. Par exemple, si l'expéditeur est vulnérable aux attaques oracle, vous pouvez l'utiliser pour décrypter les messages lorsque la même clé serait utilisée. Cela montre que la séparation des clés est toujours une bonne idée, car les attaques d'oracle de remplissage n'étaient initialement pas envisagées.

(Même question) La "clé MAC d'écriture du client" et la "clé MAC d'écriture du serveur" ont-elles également la même valeur?

Non, ils sont délibérément différents de sorte que vous ne pouvez pas demander aux expéditeurs de se voir rejouer leur propre message. Fondamentalement, un KDF (le PRF dans le langage TLS 1.2) utilise une étiquette différente pour chaque clé, ce qui signifie que chaque clé dérivée ne dépendra que de la clé principale (en utilisant une fonction à sens unique).

Question générale: le client et le serveur arrivent-ils aux mêmes résultats lors de la génération des clés de session?

Oui, c'est ce qu'ils font. Mais ils finissent simplement avec les mêmes valeurs pour chaque clé spécifique . Le client et le serveur dérivent des secrets principaux identiques, puis procèdent à l'utilisation des mêmes étiquettes pour les clés spécifiques. Ainsi, les deux côtés auront la "clé d'écriture client", mais le serveur l'utilisera pour déchiffrer les messages.