Windows - Az SSL/TLS Handshake és Record rétege

SSL/TLS 2. rész

Az SSL/TLS protokollpáros két rétegének ismertetését olvashatja cikkünkben. Bemutatjuk a protokoll handshake (megállapodás az adatátvitelről) rétegének részelemeit, és a titkosítás, hitelesítés, darabolás módszereit. Ezzel a technológiával biztonságos adatátvitelt valósíthatunk meg az Interneten, többféle alkalmazás alatt.
Az SSL/TLS-t elsődlegesen titkos adatok kódolt átvitelére használjuk nyilvános hálózaton keresztül, mint amilyen az Internet. A HTTPS protokollban a titkosított adatok típusa tartalmazza az URL-t, a HTTP fejlécet, a cookie-kat, és az átküldött form adatokat. Egy SSL/TLS segítségével titkosított weboldal olyan URL-el rendelkezik, amely "https://"-el kezdődik.
Az SSL/TLS biztonsági protokoll az alkalmazásréteg és a TCP/IP réteg között helyezkedik el, ahol titkosítani és küldeni lehet az alkalmazás adatait a szállítási rétegnek. Mivel e két réteg között helyezkedik el, ezért képesnek kell lennie több alkalmazási réteg protokoll-támogatására.
Az SSL/TLS protokoll két rétegre választható szét. Az első réteg a Handshake Protocol Layer, amely kézfogást, vagy másként megállapodást jelent. Ez három alprotokollból áll: Handshake protokoll, Change Cipher Spec protokoll és Alert protokoll. A másik réteg a Record Protocol Layer, ami felvevő réteget jelent.
A Handshake réteg
A Handshake réteg három alkomponense:
  • Handshake. Ez az alprotokoll arra használható, hogy megvitassa a viszony- vagy session információs adatokat a kliens a szerverrel. A viszonyinformáció tartalmaz egy session azonosítót, egyenrangú bizonyítványt, a használandó titkos kulcsot, a tömörítési algoritmust és egy közös titkot, amely alapján kulcsokat generálnak.
  • Change Cipher Spec. Ez az alprotokoll arra használható, hogy a titkosításhoz használt kulcsokat változtassa a kliens és a szerver között. Ez a közös titok egy ömlesztett adat, amely a titkosításhoz használt kulcs készítésére alkalmas. A protokoll egy üzenetből áll, amely a viszonyban résztvevő másik taggal közli, hogy kicsoda és hogy új kulcskészletre akar áttérni. A kulcs az átvitt Handshake protokoll információból számítódik.
  • Alert. A riasztás arra használható, hogy a státuszban történt változást, vagy hibát jelezze a társának. Sokféle riasztás létezik, amellyel értesülhetnek a tagok a normális vagy hibás működésről. A teljes lista az RFC 2246-ban (The TLS Protocol Version 1.0.) található meg. Riasztás megszokott módon akkor történik, amikor egy kapcsolat lezárul, ha érvénytelen üzenet érkezik, egy üzenet nem dekódolható, vagy ha a felhasználó megszakította a műveletet.
Handshake alprotokoll függvények
A Handshake alprotokoll számos fontos biztonsági függvényt nyújt. Ezek sokféle üzenetváltást kezdeményeznek, amelyek elindítják a hitelesítést, megállapodnak a titkosításban, a darabolásban, és a tömörítési algoritmusban.
Hitelesítést
Hitelesítési szempontból a Handshake protokoll az X.509-es tanúsítványt használja, hogy szilárd biztosítékot nyújtson a másik félnek, így segít neki az azonosításban, amely megőrzi a tanúsítványt és a megfelelő privát kulcsot. A tanúsítvány egy digitális azonosítási forma, amelyet általában a tanúsítványi hivatal állít ki, és azonosítási információt, lejárati időt, publikus kulcsot, azonosító számot, és digitális aláírást tartalmaz a kiadótól.
Egy CA (tanúsítványi hivatal) kölcsönösen bizalmat élvező harmadik fél, amely megerősíti a tanúsítvány-kérő azonosítását (általában felhasználó vagy számítógép kéri) és kiadja számára a tanúsítványt. A tanúsítvány összeköti a kérő azonosítóját egy nyílt kulccsal. A CA-k meg is újíthatják és vissza is vonhatják a tanúsítványt, ha szükséges. Például, ha egy kliens megjelenik egy kiszolgálói tanúsítvánnyal, akkor a kliens megpróbálhatja megfeleltetni a kiszolgáló CA-ját a kliens megbízható tanúsítványi hivatalaival. Ha a kapott CA megbízható, akkor a kliens megvizsgálja, hogy a tanúsítvány hiteles-e, és hogy nem hamis-e. Végül a kliens elfogadja a tanúsítványt a szerver vélelmezett azonosítójaként.
Titkosítás
Két fő típusú titkosítás létezik: szimmetrikus kulcsú (más néven közös titkos kulcsú) és aszimmetrikus kulcsú (más néven nyílt kulcsú, vagy nyílt-privát kulcsú). Az SSL/TLS mindkét fajta titkosítást használja.
  • Szimmetrikus kulcs. A szimmetrikus kulcsú titkosításnál ugyanaz a kulcs használható az üzenet kódolásához és dekódolásához. Ha a két fél titkos módon akar üzenetet váltani, akkor birtokukban kell, hogy legyen egy másolat ugyanarról a szimmetrikus kulcsról. A szimmetrikus kulcsú titkosítást gyakran használjuk nagymennyiségű adatok titkosításához, mivel gyorsabban számítható, mint az aszimmetrikus titkosítás. Tipikus algoritmusok a DES (Data Encryption Standard), 3-DES (Triple DES), RC2, RC4, és AES (Advanced Encryption Standard).
  • Aszimmetrikus kulcs. Aszimmetrikus, vagy nyílt kulcsú titkosítás egy kulcspárt használ, amelyek egymásból származnak egy komplex matematikai folyamat során. Egyik kulcs nyilvánosnak készül, tipikus módon megkérünk egy CA-t, hogy adjon ki egy publikus kulcsot egy tanúsítványban. A privát kulcs a címben őrzi a titkot és sohasem tárható fel senkinek. A kulcsok együttműködnek, az egyik arra használható, hogy a másik műveletét visszafejtse: Ha a nyílt kulccsal titkosítottuk az adatot, akkor csak a privát kulcs párjával tudjuk azt dekódolni; ha a privát kulccsal titkosítottunk, akkor csak a nyílt kulcs segítségével dekódolható. Ez a kapcsolat lehetővé tesz egy nyílt kulcsú titkosítási sémát, amellyel két fontos dolgot tehetünk. Bárki, akinek megvan a nyílt kulcs, titkosíthat adatot, de csak az tudja dekódolni, akinek megvan a privát kulcs hozzá. Másrészt, ha titkosításra kerül az adat privát kulccsal, bárki dekódolhatja a nyílt kulcs segítségével. Ez utóbbi találmány a digitális aláírás. A legáltalánosabban használt algoritmusa az RSA (Rivest, Shamir & Adleman).
Az SSL/TLS nyílt kulcsú titkosítást használ, hogy hitelesítse a szervert a klienssel, és esetlegesen a klienst a szerverrel. Nyílt kulcsú titkosítás szintén használható viszony kulcs megállapításához. A viszony kulcs a szimmetrikus algoritmusban használható, hogy titkosítsa az adattömeget. Ez kombinálható az aszimmetrikus titkosítás előnyeivel úgy, ha a hitelesítéshez a gyorsabb, kevésbé processzorfaló szimmetrikus kulcsú titkosítást használjuk.
Daraboló algoritmusok
A Handshake folyamat alatt a hash algoritmus kölcsönös megállapodás szerint működhet. Egy hash az értékek egyirányú megfeleltetése egy kisebb méretű értékkel, amely reprezentálja az eredeti tartalmat, így a végeredmény kisebb, mint az eredeti üzenet, és a hash minden eredeti adathoz egyedi. A hash hasonlít az ujjlenyomatra. Egy ujjlenyomat minden ember esetében egyedi, és sokkal kisebb, mint az eredeti ember. A hash folyamat arra használható, hogy biztosítsuk az adategyezőséget az átvitel közben. Két általános hash algoritmus a Message Digest 5 (MD5) és a Standard Hash Algorithm 1 (SHA-1). Az MD5 128 bites hash értéket képez, az SHA-1 pedig 160 bites értéket.
A hash algoritmus tartalmaz egy értéket az átvitt adat egyezőségének biztosítása érdekében. Ez az érték akár a MAC, akár a HMAC segítségével képződhet. A MAC egy megfeleltető függvényt használ, hogy leírja az üzenetadatot fix hosszúságú, lehetőleg kisebb adatként és ezután képez egy hash értéket az üzenetből. A MAC biztosítja, hogy az adat ne változzon az átvitel alatt. A különbség a MAC és a digitális aláírás között az, hogy mindegyik egy hitelesítő folyamat. Az SSL MAC-et használ.
A HMAC hasonló a MAC-hoz, de a hash algoritmust egy közös titkos kulccsal kombinálja. A közös titkos kulcs hozzáadódik az adathoz. Ez sokkal biztonságosabbá teszi a hash értéket, mivel mindkét félnek rendelkeznie kell a közös titkos kulccsal, hogy ezáltal az adat hiteles legyen. A TLS HMAC-ot használ.
A record réteg
A felvételi réteg protokollja fogadja és titkosítja az adatokat, amelyeket az alkalmazási réteg küld a szállítási rétegnek. A felvételi protokoll veszi az adatot, feldarabolja arra a méretre, amely a titkosító algoritmusnak szükséges, lehetőség szerint tömöríti (vagy ha adat érkezett, akkor kicsomagolja), végrehajt egy MAC vagy HMAC hitelesítést (ez utóbbi csak TLS esetén) és titkosítja (vagy dekódolja) az adatot, felhasználva a Handshake protokoll által tartalmazott megállapodás információit.

SSL/TLS cikksorozat