ECDHE, ECDSA és elliptic curve kriptográfia

Az elliptic curve kriptográfia (ECC) a modern TLS-kapcsolatok alapja. A legtöbb HTTPS-kapcsolat ma már ECC-alapú titkosítást és aláírást használ — és pontosan ez az, ami a TLS-fingerprintelést is lehetővé teszi.

Mi az az elliptic curve?

Az elliptic curve egy matematikai görbe, amelynek egyenlete:

y² = x³ + ax + b  (hol 4a³ + 27b² ≠ 0)

Ez a görbe olyan tulajdonságokkal rendelkezik, amelyek lehetővé teszik két pont összeadását és egy pont szorzását. Ezekből a műveletekből épülnek fel az ECC-algoritmusok.

A lényeg: egy elliptic curve pontjaival végzett műveletek számítási nehézsége a Discrete Logarithm Problem-ből ered — egy pontból és annak szorzatából nem lehet hatékonyan visszaszámolni a szorzót. Ez a tulajdonság teszi biztonságossá az ECC-t.

ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)

Az ECDHE a Diffie-Hellman kulcscsere ECC-alapú, ideiglenes (ephemeral) változata.

Hogyan működik?

  1. Mindkét fél (kliens és szerver) generál egy ideiglenes elliptic curve kulcspárt
  2. A nyilvános kulcsokat elküldik egymásnak a TLS-kézfogás során
  3. Mindkét fél a saját privát kulcsával és a másik nyilvános kulcsával kiszámolja a közös titkot
  4. Ebből a közös titokból származtatják a tényleges titkosító kulcsokat
  5. A privát kulcsok azonnal törlődnek — ez az „ephemeral" jelző

Miért fontos?

  • Forward secrecy (előremenő titoktartás): mivel a kulcsok ideiglenesek, egy későbbi privát kulcs kiszivárgása nem teszi lehetővé a korábbi forgalom visszafejtését
  • Teljesítmény: az ECC kisebb kulcsméreteket igényel ugyanolyan biztonsági szint mellett (pl. 256 bites ECC ≈ 3072 bites RSA)
  • TLS-fingerprintelés: a kliens a ClientHello-ban elküldi a támogatott elliptic curve-okat (supported groups) és pontformátumokat — ezek egyediek böngészőnként és csomagonként

Példa egy ClientHello-ból

supported_groups: x25519(29), secp256r1(23), secp384r1(24)
ec_point_formats: uncompressed(0)
  • x25519 — a leggyakoribb modern curve, gyors és biztonságos
  • secp256r1 (NIST P-256) — klasszikus NIST curve
  • secp384r1 (NIST P-384) — nagyobb biztonsági szint

ECDSA (Elliptic Curve Digital Signature Algorithm)

Az ECDSA az ECC-alapú digitális aláírási algoritmus — a TLS-ben a szerver ezzel írja alá a tanúsítványát.

Hogyan működik?

  1. A szerver rendelkezik egy privát kulccsal és egy hozzá tartozó nyilvános kulccsal
  2. Amikor tanúsítványt küld, a nyilvános kulcsot és az ECDSA aláírást is elküldi
  3. A kliens a CA (Certificate Authority) nyilvános kulcsával ellenőrzi az aláírást
  4. Ha érvényes, megbízhat benne, hogy a szerver valóban az, akinek mondja magát

Miért jobb, mint a RSA-aláírás?

  • Kisebb méret: egy ECDSA-P256 aláírás 64 bájt, míg egy RSA-2048 aláírás 256 bájt
  • Gyorsabb generálás és ellenőrzés
  • Kisebb tanúsítványok: kevesebb sávszélesség a TLS-kézfogás során

Kapcsolat a TLS-fingerprinteléssel

Amikor a Python kliensed HTTPS-kapcsolatot nyit, a ClientHello-ban elküldött titkosítók, kiterjesztések és elliptic curve paraméterek együttese egyedi ujjlenyomot alkot. A szerver (vagy egy botvédelmi rendszer, mint a DataDome) ezt összehasonlítja a böngészőkre jellemző mintákkal:

  • OpenSSL (Python): széles legacy-cipherlista, GREASE nélkül, klasszikus kiterjesztés-sorrend
  • BoringSSL (Chrome): GREASE-értékekkel kezdődik, modern kiterjesztések (ECH, ALPS), x25519 elsőként
  • curl_cffi (impersonation): pontosan azt a ClientHello-t küldi, mint a célböngésző — a TLS-ujjlenyomat megegyezik

Ezért nem elég a HTTP-fejlécek másolása: a TLS-réteg önállóan is leleplezi a botot.

Összefoglaló

Komponens Szerep a TLS-ben Fingerprintelési jelentőség
ECDHE Kulcscsere, forward secrecy A támogatott curve-ok listája egyedi ujjlenyomot ad
ECDSA Szerver tanúsítvány aláírása Nem közvetlenül fingerprintelhető, de a választott curve a ServerHello-ban szerepel
Elliptic curve-ok Matematikai alap A supported_groups és ec_point_formats mezők egyediek

Hivatkozások