Am încercat să decriptez manual o parte din traficul TLS 1.3 din motive educaționale și am dat peste un obstacol. Până acum, am reușit să finalizez cea mai mare parte a programului de chei, inclusiv să obțin secretele corecte de trafic de strângere de mână din cheile ECDHE. Cu toate acestea, nu am reușit să găsesc multe informații despre modul în care textul cifrat și eticheta de autentificare sunt formatate în mesajele de date ale aplicației.
Iată înregistrarea completă.
1703030017bf687d10e2f209661418d92aaf3626dfe5670f3127d6ed
Și iată secretul de trafic al serverului de strângere de mână:
475a0f3b5a86d4797e24545c2eb6388de9507e5e0bc367c74c3e78e0d8033f34b721a2e3a1d89ec5990287954402fc43
Wireshark îmi spune că prin decriptarea acestui mesaj se obține textul simplu 08 00 00 02 00 00
, corespunzătoare mesajului Extensii criptate.
Din câte îmi pot da seama, „datele asociate” ar trebui să fie octeții 17 03 03 00 17
, iar restul înregistrării este text cifrat + etichetă de autentificare.RFC 8446 spune că suita de criptare TLS_AES_256_GCM_SHA384 este definită în RFC 5116, dar RFC 5116 spune:
Acest document nu specifică nicio codificare specială pentru AEAD
intrări și ieșiri, deoarece codificarea nu afectează securitatea
servicii furnizate de un algoritm AEAD.
Cu toate acestea, toate încercările mele de a decripta datele nu au reușit să se autentifice, ceea ce mă duce la două posibilități:
- Obțin greșit cheile de trafic. Știu că rutina mea HKDF-Expand-Label funcționează, deoarece toate celelalte secrete sunt derivate corect și se potrivesc cu valorile înregistrate de OpenSSL. Cu toate acestea, desigur, nu sunt 100% sigur care sunt cheia corectă și lungimea IV. În prezent, folosesc o cheie de 32 de octeți și IV de 12 octeți. Nu știu dacă asta folosește TLS 1.3.
- Citesc greșit eticheta de autentificare/text cifrat. Nu am reușit să găsesc referințe despre formatul potrivit, așa că toate încercările mele în acest domeniu au fost doar presupuneri. În special, nu sunt sigur cât de lungă este eticheta de autentificare pentru această suită de criptare, deși căutarea pe Google sugerează că este de 12 octeți.
ce fac greșit?