2 votes

Message fini fou en TLS

J'essaie de comprendre quel est le contenu de l'article. Finished Message de TLS. J'utilise wireshark pour capturer le trafic entre mon navigateur et l'internet. J'ai remarqué une "étrangeté" lorsque la suite de chiffrement choisie est AES_GCM. Comme il s'agit d'un chiffrement par flux, il n'y a pas de remplissage. Si j'ai bien compris, les données envoyées dans le Finished Message sont :

  • 8 octets Nonce explicite
  • 12 bytes verify_data
  • Tag d'authentification de 16 octets

C'est-à-dire, 36 octets au total. Le "problème" est que la taille des paquets de messages finis est la suivante 40 octets .

Et voilà :

enter image description here

Pourquoi le paquet de messages est de 40 octets et quels sont les octets rouges ?

Et pourquoi Wireshark voit deux requêtes hello ?

Et un autre ceci... le Client répond avec un 176 octets paquet :

enter image description here

Je deviens fou...

Qu'est-ce que je rate ?

2voto

juhraffe Points 141

EDIT : à l'origine je pensais que le message était corrompu, mais le commentaire de dave_thompson est correct et le message fini est crypté avec GCM (j'avais supposé à l'origine CBC), donc la réponse est corrigée à la lumière de cette nouvelle information.

En regardant le contenu binaire du serveur, 14 03 03 00 01 01 est le message Change Cipher Spec, qui est suivi par les octets suivants (et mon explication de leur signification) :

16 (En-tête de l'enregistrement de la poignée de main)
03 03 (TLS Version 1.2)
00 28 (longueur du message)
00 00 ... [40 octets] (message crypté)

Le commentaire de Dave ci-dessous décrit correctement la structure du GCM AES crypté. Cependant, sur la base de l'analyse de Wireshark, il semble que Wireshark ne comprenne pas qu'un message crypté est le suivant (après Change Cipher Spec), il essaie donc de l'analyser comme un message de poignée de main non crypté. Le 0x00 de tête indique que le type de message est Hello Request, et les données ultérieures ne le contredisent pas, donc Wireshark l'analyse incorrectement comme une Hello Request non chiffrée au lieu du message Finished chiffré.

En ce qui concerne les 36 octets par rapport aux 40 octets, le message fini est de 16 octets :
En-tête de 1 octet (0x14 pour Fini)
Longueur de 3 octets (0x00000c pour 12 octets)
12 octets de données

Ces 4 octets supplémentaires (en-tête et longueur du message fini) expliquent la différence.

Pour le message client de 176 octets qui suit, 176 octets sont la longueur de l'enregistrement chiffré. Sans décryptage, je ne peux pas dire ce qu'il contient, mais il commence par 0x16, ce qui indique une poignée de main, donc il s'agit probablement d'un message Client Finished avec un ou plusieurs autres messages de poignée de main.

1voto

StackzOfZtuff Points 1391

Pourquoi 40 octets ?

Pourquoi le paquet de messages est de 40 octets et quels sont les octets rouges ?

Je ne sais pas. Tout ce qui suit un "Change Cipher Spec" est crypté.
De https://www.rfc-editor.org/rfc/rfc5246#section-7.1 :

The ChangeCipherSpec message is sent [...]
before the verifying Finished message is sent.
[...] once the ChangeCipherSpec has been sent, the
new CipherSpec MUST be used.

De https://www.rfc-editor.org/rfc/rfc5246#section-7.4.9 :

The Finished message is the first one protected with
the just negotiated algorithms, keys, and secrets.  

Pourquoi deux ?

Et pourquoi Wireshark voit deux requêtes hello ?

Je suppose qu'il s'est embrouillé en essayant d'interpréter des données cryptées.

Suggestion

  • Essayez de capturer à nouveau, mais cette fois, demandez à Firefox d'enregistrer le secret du prémaître. Ensuite, utilisez le secret premaster pour décrypter avec WireShark. Voir : Question sur la SecSE

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X