Puncte:0

Cum pot identifica valoarea grupului ECDHE utilizată într-o sesiune TLS

drapel us

În ECDHE, grupul este o valoare publică. Vreau să obțin această valoare pentru o sesiune. Am inspectat sesiunea folosind Wireshark. Sub ServerHello -> extensie de partajare cheie -> intrare de partajare cheie, am găsit acești parametri:

Intrare partajare cheie: Grup: x25519, Lungime schimb cheie: 32
Grup: x25519 (29)
Lungimea schimbului de chei: 32
Schimb de chei: 22d9....88e....635... (lungimea completă este de 64 de caractere hexadecimale, 256 de biți)

Poti explica mai multe? Cum poate valoarea Key Exchange Length să fie atunci 32, dar este de 256 de biți și 64 de caractere hexadecimale?

kelalaka avatar
drapel in
Are 32 de octeți și înseamnă 64 de caractere hexadecimale. Întrebările legate de instrumente sunt în afara subiectului aici.
randomname avatar
drapel us
@kelalaka Mulțumesc! Postarea nu este despre instrument. Dar ce valoare are din rezultatul postat al instrumentului?
kelalaka avatar
drapel in
@knaccc aceasta este notația ECC; ar trebui să fie $x([a]G)$. Este $x22519(a,9)$ în notația RFC care execută Montgomery Ladder și returnează doar prima coordonată. Nu sunt sigur cum vede cu adevărat acest lucru Wireshark, totuși, se pare că omit codificarea punctului de bază. Consultați [rfc7748 6.1](https://datatracker.ietf.org/doc/html/rfc7748#section-6.1) și secțiunea 5. Credeți că această întrebare este într-adevăr de răspuns? TLS 1.3 spune că respectă rfc7748 unde codarea de $9$ este, de asemenea, de 32 de octeți.
Maarten Bodewes avatar
drapel in
Da, cheia publică este întotdeauna comprimată pentru acest x25519 în format brut (doar un întreg big endian de dimensiune statică). Dimensiunea acestuia este de 256 de biți (notație cripto), 32 de octeți (în protocol) sau - numai pentru consum uman - 64 de caractere hexadecimale.
Puncte:2
drapel es

Strângerea de mână TLS 1.3 funcționează după cum urmează:

Clientul va trimite o structură de date „ClientHello” către server. În această etapă, clientul nu știe încă ce „Grupuri” suportă serverul. Pentru a evita o călătorie suplimentară dus-întors la server, poate conține în mod speculativ un „element de grup” pentru grupul pe care ar prefera să-l folosească. În cazul întrebat, elementul de grup este o cheie publică de 32 de octeți pentru utilizare cu „Grupul 29” (29 == hex 0x1d), care este un identificator TLS pentru ceea ce este cunoscut în mod obișnuit ca X25519. O listă a numerotărilor pentru toate grupurile acceptate TLS este aici: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml

X25519 înseamnă un schimb Diffie-Hellman folosind un punct de bază bine-cunoscut G pe curba eliptică Curve25519, unde elementele grupului sunt în subgrupul ciclic mare care conține G în această curbă. Punctul G nu trebuie transmis, deoarece este definit ca parte a X25519 standard și este același pentru toate invocările lui X25519.

Cheia publică efemeră a clientului este „elementul de grup” care a fost trimis în mod speculativ. Pentru X25519, are o lungime de 32 de octeți (64 de caractere hexadecimale sau 256 de biți). Acest element de grup este listat ca valoare „schimb de chei” în secțiunea „parte de cheie” a structurii de date ClientHello.

Serverul va răspunde cu un mesaj „ServerHello” dacă este de acord să utilizeze grupul inclus în mod speculativ al clientului, aici Grupul 29. Acesta include elementul de grup al serverului în valoarea „schimb de chei” din secțiunea „Partajare cheie”.Acest element de grup este cheia publică efemeră a serverului.

Cu aceste informații, atât clientul, cât și serverul vor putea calcula fiecare același secret partajat numit „secretul pre-master”. Acesta este apoi combinat cu datele ClientHello și ServerHello pentru a obține chei de criptare simetrice (consultați https://datatracker.ietf.org/doc/html/rfc8446#section-7.1). Acestea permit serverului și clientului să comunice în siguranță unul cu celălalt folosind criptare autentificată, cum ar fi AES-GCM.

Dacă serverul nu este de acord cu grupul propus de client sau clientul a optat să nu propună niciun grup, dar serverul este de acord cu un (alt) grup clientul listat în „grupuri acceptate”, acesta trimite în schimb HelloRetryRequest care îi spune client să reîncerce ClientHello folosind un grup specificat, pe care serverul îl acceptă apoi ca mai sus. Dacă serverul nu este de acord orice grupul pe care clientul îl acceptă, trimite o alertă de eroare și strângerea de mână eșuează -- cu excepția cazului în care clientul a propus și un PSK disponibil, dar de obicei asta se întâmplă doar pentru reluare, iar dacă strângerea de mână inițială eșuează, reluarea nu este posibilă.

TLS 1.0-1.2 gestionează ECDHE în mod diferit -- dacă este deloc, pentru că acolo este opțional. În aceste protocoale, ciphersuite specifică schimbul de chei și autentificarea, precum și cifrul de date și hash pentru HMAC (dacă nu AEAD) și PRF (dacă 1.2). Clientul trimite ClientHello listarea suitelor de criptare pe care le acceptă, oricare, unele sau toate pot utiliza ECDHE în combinație cu autentificarea RSA sau ECDSA (adică certificat), și o extensie de grupuri suportate (sau curbe suportate înainte de RFC7919) care specifică curbele pe care le suportă. Dacă serverul este de acord cu un pachet de criptare ECDHE oferit și o curbă oferită, trimite ServerHello specificând pachetul de criptare, apoi lanțul său de certificate, apoi ServerKeyExchange care conține id-ul curbei și cheia publică efemeră.Clientul (dacă acceptă certificatul) trimite ClientKeyExchange care conține cheia sa publică efemeră, după care calculul secret partajat procedează în mod similar, deși detaliile despre modul în care sunt derivate cheile de lucru diferă de 1.3 și, de asemenea, între 1.2 și mai devreme.

kelalaka avatar
drapel in
aceasta este notația ECC; ar trebui să fie $x([a]G)$. Este $x22519(a,9)$ în notația RFC care execută Montgomery Ladder și returnează doar prima coordonată. Nu sunt sigur cum vede cu adevărat acest lucru Wireshark, totuși, se pare că omit codificarea punctului de bază. Consultați [rfc7748 6.1](https://datatracker.ietf.org/doc/html/rfc7748#section-6.1) și secțiunea 5. Credeți că această întrebare este într-adevăr de răspuns? TLS 1.3 spune că respectă rfc7748 unde codarea de $9$ este, de asemenea, de 32 de octeți.
knaccc avatar
drapel es
@kelalaka hexadecimalul „schimb de chei” din ServerHello este cheia publică a serverului, care este punctul de bază (coordonata x de 9) scalar înmulțit cu cheia privată a serverului sau X25519(server_private_key, 9) în notația rfc7748.Nu sunt sigur ce vrei să spui prin „săriți codarea punctului de bază” - nu este niciodată nevoie să transmiteți punctul de bază 9, deoarece este binecunoscut ca parte a specificațiilor X25519.
kelalaka avatar
drapel in
După cum am spus, pur și simplu sub întrebarea este despre maparea standardului în WireShark, care nu oferă informații despre punctul de bază codificat $9$. De ce s-au arătat așa depinde de alegerea designerului.
knaccc avatar
drapel es
@kelalaka Cred că am interpretat altfel întrebarea. Am presupus că problema era că afișul era confuz cu privire la ceea ce înseamnă „grup”, mai ales că grup ar putea însemna „grup 29”, ar putea însemna elementul de grup care este cheia publică a serverului sau ar putea însemna grupul punctului de bază. Prin urmare, abordarea mea a fost să explic toată terminologia.
Puncte:0
drapel vu

Grupul este cel folosit în schimbul de chei X25519, care folosește Curve25519 de la DJB (Daniel J. Bernstein).

Există o serie de standarde comerciale cunoscute ca SEC#* (Standard for Efficient Cryptography) care specifică criptografia cu curbă eliptică. Cheile publice (punctele) din aceste standarde sunt fie 2x+1 (coordonate x-y necomprimate cu un octet antet) fie x+1 (coordonată x comprimată cu un octet antet) lungime de octeți.

Mai sunt și DJB și echipele lui efort de a crea acum curbe eficiente și fără canale laterale cunoscut ca X25519 (pentru schimbul de chei) și Ed25519 (pentru semnătură digitală). Cheile publice sunt, de asemenea, puncte, dar sunt definite direct în ceea ce privește codificarea octetului unei coordonate într-o dimensiune, deci nu este nevoie de un octet de antet.

Instrumentul dvs. a indicat că este x25519, care este creat de oamenii DJB.

Ați putea fi, de asemenea, interesat să știți că, există o altă serie de standarde cunoscute sub numele de PKCS#* (Public-Key Cryptography Standard), primul din serie a specificat criptografia RSA folosită pe internet (există și alte standarde RSA utilizate în altă parte) .

kelalaka avatar
drapel in
X25519 nu folosește coordonatele $y$.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.