Köszönet Galántai Zoltánnak az alábbi cikkért. Az eredeti a következő címen (volt) elérhető:
http://galantai.inno.bme.hu/computing/titkositas_majdnem_mindenkinek.html
„Kétféle titkosítás létezik, az egyik segítségével azt tudjuk meggátolni, hogy a nővérünk, a másikkal pedig azt, hogy a kormány elolvassa a leveleinket.”
(Bruce Schneier)
Amikor az 1960-as években David Kahn amerikai újságíró elkezdett a titkosítás történetéről szóló könyvén dolgozni, a világ legnagyobb kémszervezeténél, az NSA-nál (National Security Agency) azonnal rákerült a megfigyelendők listájára, és az ügynököknek joga volt lehallgatni telefonbeszélgetéseit meg elolvasni a leveleit. Sőt, azt is felvetették, hogy betörnek hozzá, ha csak így lehet meggátolni a könyv kiadását.
Az NSA ugyanis két dologban egészen biztos volt: egyfelől abban, hogy a titkosítás alapvető fontosságú, másfelől pedig abban, hogy ennek megfelelően rajtuk kívül senki nem foglalkozhat vele.
Aztán sor került az utóbbi kétezer év bízvást legnagyobbnak nevezhető kriptográfiai felfedezésére, és ma már – még ha nem tetszik is ez az NSA-nak – az internetről szabadon tölthetünk le titkosító szoftvereket.
Az aszimmetria diszkrét bája
A kriptográfia megjelenése óta létezett a kulcsmegosztás problémája is. Mindenki tisztában volt vele, hogy az önmagában édeskevés, ha bármilyen erős titkosítással látunk el egy dokumentumot: arra is szükség van, hogy a címzett – és kizárólag a címzett – legyen azt képes visszafejteni és elolvasni. Kétezer éven keresztül (!) mindenki úgy gondolta, hogy ehhez el kell juttatnunk a címzettnek azt a „kulcsot”, amivel a titkosítást végeztük. És innentől kezdődtek az igazi gondok, hiszen ha két ember, mondjuk Alice és Bob titkos üzeneteket akart váltani egymással (az efféle példákban valamiért mindig Alice és Bob szerepel), akkor a visszafejtéshez szükséges kódot nem küldhették el egymásnak például titkosítatlan e-mail-ben. Az e-mail-t viszont nem tudják titkosítani, amíg nem állapodtak meg a közös kódban, és ebből az ördögi körből legfeljebb a személyes találkozó során történő kulcscsere jelentett (korántsem kényelmes, gyors vagy olcsó) kiutat.
A kriptográfusok meg voltak ugyanis győződve róla, hogy a dolgot nagyjából úgy kell elképzelni, mintha a titkosított üzenet egy lakattal lezárt, betörésbiztos vaskazettában lenne, és ezért (feltételezve, hogy a lakatot túlságosan nehéz feltörni) az egyetlen megoldást az jelenti, ha átadjuk hozzá a kulcsot is.
Aztán 1975-ban kiderült, hogy ez még sincsen így. Whitfield Diffie amerikai számítógéptudósnak Martin Hellmannnal együtt dolgozva az jutott az eszébe, hogy mi lenne, ha rengeteg olyan, egyforma lakatot csinálnánk, amihez kizárólag nekünk van kulcsunk, és ebből egy-egy másolatot a világ minden elképzelhető pontjára eljuttatnánk.
Vagyis: ha Bob titkos üzenetet akar Alice-nak küldeni, akkor azt egyszerűen berakja egy kazettába, rákattintja a lakatot, és feladja a postán. Az eddigi gyakorlattal szemben, ami a szimmetrikus kulcson alapult (ezt a megoldást azért szokás szimmetrikusnak nevezni, mert ugyanaz a kód kellett a titkosításhoz és a visszafejtéshez) miért is ne lehetne asszimetrikus megoldást alkalmazni, ahol az egyik kulcs csak a titkosításra, a másik pedig kizárólag visszafejtésre alkalmazható? Amennyiben az előbbit mindenki számára hozzáférhetővé tesszük, az utóbbit pedig nagyon gondosan megőrizzük, akkor képesek leszünk egy nem biztonságos csatornán keresztül is biztonságosan komunikálni az első pillanattól kezdve.
Feltéve persze, hogy sikerül az elméletet a gyakorlatba is átültetni, és találunk egy olyan matematikai függvényt, ami amellett, hogy viszonylag egyszerűen kezelhető, képes a kulccsal és a lakattal kapcsolatos elvárásoknak megfelelni. Ez korántsem volt könnyű, de a Ronald Rivest – Adi Shamir – Leonard Adleman hármas 1977-re azért csak megoldotta. Lényegében ekkor született meg a nyilvános kulcsú kriptográfia.
Az általuk felfedezett függvény segítségével ugyanis egy nyilvános (public) és egy titkos (secret) kulcsot generálhatunk: amit a nyilvános kulccsal kódolunk, azt csak a titkossal lehet dekódolni és vice versa. Tehát elég, ha az Interneten közzétesszük a nyilvános kulcsunkat, és máris biztonságosan kommunikálhatunk bárkivel, hiszen a nyilvános kulcsból gyakorlatilag lehetetlen visszakövetkeztetni a másikra – valahogy úgy, mint ahogy abból sem következik, hogy ki tudjuk nyitni a lakatot, ha be tudtuk csattintani.
A gyakorlatban ez annyit jelent, hogy ha Alice összeszorozza az általa választott prímszámokat, akkor létrejön az úgynevezett N szám, ami lényegében a nyilvános kulcs lesz. Amikor Bob üzenni akar Alice-nak, akkor beilleszti a mindenki által megismerhető, egyirányú RSA függvénybe az N-t, és és így létrehozza Alice nyilvános egyirányú függvényét. Ezzel fogja titkosítani az üzenetet, Alice pedig azért tudja visszafejteni, mert az RSA-függvény csak akkor fordítható meg (gyorsan), ha tudjuk, hogy N melyik két prímszámon alapul. Két prímszámot nagyon könnyű összeszorozni, de – bár nem lehetetlen – azért jelenlegi ismereteink szerint mérhetetlenül sok nagyságrenddel több időt vesz igénybe annak megállapítása, hogy egy adott N szám melyik két prímszám szorzataként jöt létre.
Mivel a kriptográfusok kellőképpen paranoiásak, és roppant módon tartanak attól, hogy az Alice és Bob után leselkedő Eve (merthogy a gonosz harmadikat pedig így szokás nevezni) egy világméretű „összeesküvés” keretében, számítógépek tíz- vagy százmillióinak felhasználásával, minden lehetséges prímszám-kombinációt végigpróblálva, azaz a nyers erő (brute force) alkalmazásával akarja feltörni az N-t (vagyis így próbálja megállapítani, hogy az N melyik két prímszám szorzata). Ezért ott, ahol tényleg nagyon fontos a biztonság, többszáz számjegyű N-eket használnak. Próbálja csak meg valaki kiszámítani az N=114 381 625 777 888 867 669 235 779 976 146 612 010 218 296 721 242 362 562 561 842 935 706 935 245 733 897 830 597 123 563 958 705 058 989 075 147 599 290 026 879 543 541 estén! Pedig ez valóságos törpe a titkosításhoz használt prímekhez képest.
Bármilyen nagy N-t válasszunk is azonban, legalábbis elvileg akár már holnap kiderülhet, hogy ez a módszer semmit sem ér. Kiderülhet ugyanis, hogy egy matematikai módszer segítségével pillanatok alatt megállapítható, hogy N-nek melyik két prímszám az összetevője. Egyelőre úgy tűnik, hogy ehhez iszonyatos mennyiségű próbálkozás kell, és a matematikusok hajlanak arra a feltételezésre, hogy nem is létezhet egyszerű és gyors megoldás – de ez sejtés csupán, nem pedig bizonyosság.
Másfelől viszont úgysem tudunk jobbat. Nem véletlen hát, hogy a világ legelterjedtebb, nyilvános kulcsú szoftvere, a PGP (Pretty Good Privacy) is prímszámokat használ.
Legalábbis részben, a PGP ugyanis úgynevezett hibrid rendszer.
PGP most és mindörökké
1995-ben a világ legismertebb műegyeteme, az MIT (Massachussets Institute of Technology) olyan könyvet adott ki, ami 600 oldalon keresztül semmi mást nem tartalmazott, mint C nyelven írt programkódot, és a betűtípust úgy választották meg hozzá, hogy a szkennerek és a karakterfelismerő programok a lehető legkönnyebben boldoguljanak vele. Erre azért volt szükség, mert az Amerikai Egyesült Államok ugyanolyan szigorúan szabályozta ugyan a titkosító szoftverek kivitelét, mint a fegyverekét – a hagyományos, nyomtatott könyvekre azonban furcsa módon nem terjedt ki ez a tiltás, és így a PGP-t a törvények megsértése nélkül lehetett terjeszteni (nem mintha addigra nem terjesztették volna az interneten keresztül is).
Philip Zimmermann, a PGP megalkotója abból indult ki, hogy a hagyományos, titkos kulcsú kriptográfiának is megvannak a maga előnyei, hiszen a nyilvános kulcsú megoldásnál mintegy 1000-szer gyorsabb. Ha tehát Alice biztonságosan akar eljuttatni egy szöveget Bobnak, akkor a PGP először is tömöríti azt. Így gyorsabb lesz az adatátvitel, és persze ennél is fontosabb, hogy megnövekszik a biztonság, mivel az esetleges kódtörők kevesebb támadási felületet nyújtó „mintázatot” tudnak belőle kiszűrni.
Második lépésben a PGP létrehozza a részkulcsot (session key): Ez egy egyszer használatos titkos kulcs, amit az egér mozgatásából és a billentyűleütésekből létrejövő véletlen számok felhasználásával generálnak – ez aztán egy hagyományos, nagyon biztonságos és nagyon gyors, szimmetrikus algoritmust használ a szöveg titkosításához.
Végül Alice a címzett, vagyis Bob nyilvános kulcsát használva titkosítja magát a részkulcsot, és a (szintén titkosított) szöveggel együtt elküldi neki. Bob pedig visszafelé csinálja végig az egészet: a saját titkos kulcsát használva hozzáfér a session key-hez, a session key segítségével pedig magához az üzenethez.
Érdemes felfigyelni rá, hogy a konkért szöveg titkosítására használt részkulcs minden esetben más és más lesz, tehát egyszer használatos kulcsról van szó, és ez persze tovább nehezíti a kódtörők dolgát.
Ami magát a felhasználó (Alice, Bob vagy bárki más) titkos, illetve nyilvános kulcsát illeti, ezeket a PGP „keyring”-ekben (kulcsgyűjtemény) tárolja a merevlemezen. Azoknak a nyilvános kulcsát, akivel kapcsolatban vagyunk, hozzáadjuk a publikus keyring-ünkhöz, míg a titkos kulcsunkat (vagy kulcsainkat) a titkos keyring-ben tartjuk. És persze amennyiben ezt elveszítjük vagy megsemmisül, akkor mi sem leszünk képesek elolvasni a nekünk szóló, a nyilvános kulcsunkkal titkosított üzeneteket.
Mint ahogy akkor is „kizárjuk magunkat”, ha elfelejtjük azt a passphrase-t (nem jelszó, hanem inkább jelmondat), ami a titkos kulcsunk titkosításához kell – hiszen meglehetősen kockázatos dolog lenne azt csak úgy, eredeti formájában tárolni a merevlemezen. Úgyhogy a PGP a titkos kulcs védelmében a jelmondatunkból (amit a kulcspár létrehozásakor kell megadnunk) létrehoz egy kódot, és ezzel kódolja a secure key-t. Eközben egyirányú hash (digitális ujjlenyomat) funkciót használ. Ez egy olyan eljárás, ami egy szövegből meghatározott hosszúságú (mondjuk 160 bit hosszú) lenyomatot készít, és ezt úgy teszi, hogy ha az eredeti szöveg akár csak egyetlen karakternyit is változik, akkor a lenyomat is másmilyen lesz.
Persze hash-t használunk a digitális aláíráshoz is. Ha a szöveget a titkos kulcsunkkal titkosítjuk, akkor a nyilvános kulcsunk használatával bárki ellenőrizheti, hogy az tényleg tőlünk származik-e. Ám mivel a kódolás egy hosszabb dokumentum esetén roppant lassú lenne, ezért amikor nem a titkosítás, hanem a hitelesség igazolása a fontos, akkor elég a dokumentumból generált hash-t „bekulcsolni”. Elvégre az, hogy nyilvános kulcsunk használatával el lehet olvasni, bizonyítja, hogy tőlünk származik; az pedig, hogy ha a hash-hez használt algoritmussal a kézhez kapott szövegből ismét ugyanazt a lenyomatot tudjuk létrehozni, azt bizonyítja, hogy út közben senki nem változtatta meg a tartalmát.
Viszont még mindig nem értünk a nehézségek végére: mi van ugyanis akkor, ha történetünk negatív hőse, Eve legenerál magának egy kulcspárt, majd pedig közzé teszi a nyilvános kulcsot, és azt állítja, hogy ez Alice-é? Nos, ebben az esetben nyilvánvalóan ő lenne képes elolvasni a Bob Alice-nak szánt titkosított üzeneteit. Tehát ez ellen a szakirodalomban „man-in-the-middle”-nek nevezett csalás ellen is védekezni kell, és éppen erre szolgálnak a digitális tanúsítvány-ok (digital certificate, röviden: cert). Itt egy megfelelő szerv (miként például az útlevél esetében is) vagy személy igazolja, hogy az Alice tényleg Alice. Mondjuk Bob – méghozzá azáltal, hogy a saját titkos kulcsával hitelesíti Alice nyilvános kulcsát.
Ha egy hitelesítéstanúsító szervet (Certification Authority, CA) azt állítja, hogy Alice valóban Alice, akkor egyszerű a dolog, hiszen kénytelenek vagyunk ugyanúgy megbízni benne, mint mondjuk az útlevet kibocsájtó BM Központi Adatfeldolgozó Hivatalban. A PGP azonban nyilvánvalóan nem valamiféle centralizált megoldást alkalmaz – és ez az egész rendszer az Achilles-sarka. Ahhoz, hogy az aláírásom, illetve a nyilvános kulcsom mások számára is hiteles lehessen, kell találnom valakit, akinek a hitelesítésében megbíznak a PGP-használók – ami viszont magában hordja annak a veszélyét is, hogy egyesek visszaélnek a „kölcsönös hitelesítések hálózata” által nyújtott lehetőségekkel, és közreműködnek egy „személyiséghamisításban”: igazolják, hogy a nyilvános kulcs Alice-hez tartozik, pedig pontosan tudják, hogy Eve hozta létre… de hát mint mindenütt másutt, itt is az ember a leggyengébb láncszem.
Azt is titkold el, hogy eltitkoltál valamit
A valóságban szerencsére korántsem olyan bonyolult a kettős kulcsú titkosítás használata, mint amilyennek az eddigiek alapján tűnhet: immár nem csak a Windows vagy Macintosh, de például Linux alatt is vannak olyan kényelmes és felhasználóbarát, a titkosítást néhány egérkattintássá egyszerűsítő programok (és még azt is be lehet állítani, hogy azokat a nyilvános kulcsokat akarom-e hitelesnek elfogadni, melyeket két teljesen megbízható vagy három aránylag megbízható aláírás hitelesít).
Az viszont megint más kérdés, hogy használhatom-e a PGP-t?
Egyes országokban tiltott akár maga a titkosítás, akár pedig a titkosítás bizonyos formáinak használata. Magyarországon például a 2001-es, digitális aláírásról szóló törvény – a maffia elleni harcra hivatkozva – nem engedi meg az aláíráshoz használt titkosításnak a dokumentumok titkosítására való használatát (de magát a titkosítást nem tiltja).
Zimmermann szerint „Ha a titkosítást törvényen kívül helyezik, akkor csak a törvényen kívüliek fognak titkosítást használni”, és ehhez azt is hozzá tehetjük, hogy ilyen esetekben a PGP-nek meg a többi, akár szimmetrikus, akár asszimmetrikus kulcson alapuló kódolásnak van egy nagy hátulütője. Nevezetesen, hogy elég egy pillantást vetni a szövegre, és máris kiderül, ha titkosítva van.
Iyenkor jöhet kapóra a steganográfia, azaz a „rejtett írás tudománya”. Értelemszerűen ide számít a láthatatlan tintától kezdve mindenféle, magát a komunikáció tényét láthatatlanná tevő megoldás – az ilyesmikért a hivatalos szervek nem igazán szoktak rajongani. A II. Világháborúban az Amerika Cenzúra Hivatal például annyira tartott a srteganográfia segítségével továbbított üzenetektől, hogy mergtiltotta, hogy a virágcsokrot bármilyen szöveges üzenet, így például névjegykártya vagy üdvözlő lap kíséretében küldessék a szerelmes férfiak szívük hölgyének lakására (ami azért ostobaság, mert akár a virágok fajtája vagy száma is tartalmazhat kódolt üzenetet).
Az Interneten persze nem a rózsacsokor, hanem a képmanipuláción alapuló steganográfia a legelterjedtebb megoldás. Mivel egy számítógépes kép tulajdonképpen olyan számok sorozatának tekinthető, melyek az egyes képpontok tulajdonságait jellemzik, egy 640×480 felbontású, 256 színű kép (ahol egy pixelt 8 bit ír le) mintegy 300 kilobitnyi információból áll össze. Tehát semmi mást nem kell tennünk, mint az LSB-be (least significant bits, legkevésbé fontosabb bitek) beleírjuk, amit akarunk – és ez lehet akár sima, akár rejtjelezett szöveg, de lehet akár egy hangfelvétel, egy másik kép, egy vírus kódja vagy bármi más.
Vagy megtehetjük azt is, hogy nem a képpontokat, hanem a kép egyéb paramétereit manipuláljuk, és steganográfiai szoftverünk közben jobb esetben nem csupán titkosítja az üzenetünket, hanem még a titkosítás „itt kezdődik a PGP-vel kódolt üzenet” tartalmú fejlécét is kiszedi, hogy ez se válhasson árulónkká.
Persze nem az LSB használata az egyetlen megoldás: átkódolhatjuk a kép más paramétereit is. Üzenhetünk például a jpeg típusú képeknél a tömörítéshez használt DCT (Discrete Cosine Transform, diszkrét koszinusz transzformáció) felhasználásával és sok egyéb módon is. Mindenképpen érdemes azonban odafigyelni arra, hogy ne egy ismert képet használjunk, hiszen azt össze lehetne hasonlítani az általunk készített verzióval! Ehelyett készítsünk magunk egy minél részletgazdagabb fotót, és abban rejtsük el az üzenetet – majd pedig semmisítsük meg az eredetit. Még akkor is, ha a steganográfiai szoftverek rendszerint ügyelnek arra, hogy a változtatások szabad szemmel észrevehetetlenek maradjanak.
Neil F. Johnson titkosítási szakértő szerint 2001. végén mintegy 140 féle steganográfiai eszköz volt elérhető az Interneten, miközban 1999-ben még csak 60-70 féle, és 2001. végéig legalább egy millióan töltötték le őket. Más szakértők arra mutatnak rá, hogy valószínűleg nem csupán a szeptember 11-i terroristák használták a képbe való elrejtést, hanem a pedofilok is gyakran élnek vele. De hát ebben nincs semmi meglepő, hiszen minden technológiát lehet rosszra – és ugyanúgy lehet jóra is – használni. Terveztek például olyan P2P rendszert is (vagyis olyan rendszert, amiben nincs központi gép, mivel mindegyik egyenrangú a többivel), ahol a teljes fájlrendszer steganográfiával van titkosítva – és innentől kezdve kizárólag döntés kérdése, hogy egy újabb terrortámadást szerveznek-e meg a felhasználók vagy a diktatúrákban élők játsszák ki segítségével az Internet-cenzúrát.
Vagyis ezen a területen is ugyanaz a helyzet, mint a titkosítás többi, rohamosan fejlődő területein azóta, hogy Diffie előállt a kettős kulcsú megoldással.
Néhány alapfogalom
- kriptológia: a titkos kommunikáció tudománya
- kriptográfia: az üzenetek védettségének biztosítása
- kriptoanalízis: a titkosított üzenetek megfeljtésével foglalkozik
- nyílt szöveg: titkosítatlan szöveg
- ciphertext: kriptoszöveg, azaz titkosított szöveg
- Enigma:Wikipédia
- steganográfia: A steganográfia görög szó, rejtett, elfedett írást jelent. Módszereinek célja titkos kommunikáció biztosítása. A steganográfia nem azonos a rejtjelzés tudományával , amelyet kriptográfiának is neveznek. A rejtjelzés esetében a potenciális ellenfél észlelheti, tárolhatja, módosíthatja a rejtjeles üzenetet. Az üzenet védelmét az adja, hogy a vevô (és az adón kívül csak ô) rendelkezik egy titkos kulccsal, amely lehetôvé teszi, hogy a vevô a rejtjelzett üzenetet dekódolhassa. A steganográfia fô célkituzése ezzel szemben az, hogy már az üzenetváltás ténye se legyen észlelhetô az ellenfelek számára. link
- szimmetrikus algoritmus: uyganazt a kulcsot kell használni a titkosításhoz és a titkosított szöveg visszafejtéséhez
- nyilvános kulcsú algoritmus vagy aszimmetrikus algoritmus: kulcspárral dolgozik, a nyilvános kulcs (public key) arra szolgál, hogy a címzett számára titkosítsuk vele az üzenetet; a címzett ez titkos kulcsa (secre key) segítségével tudja visszafejteni
- DES (DATA Encryption Standard): az első amerikai titkosítási szabvány
- RSA: a River, Shamir és Adleman által kidolgozott algoritmus a nyilvános kulcsú titkosításához
- hibrid rendszer: a szimmetrikus és aszimmetrikus kódolás előnyeit egyesítő rendszer
- session key: egyszeri kulcs (a hibrid rendszerekben használatos)
- egyirányú függvény: az egyik irányba viszonylag egyszerű, a másik irányba exponenciálisan lassabban végrehajtható függvény. A klasszikus hasonlat szerint ilyen a tányér földhöz vágása, majd összeragasztása
- digitális ujjlenyomat (üzenet kivonat, egy irányú hash funkció): olyan függvény, ami egy változó hosszúságú nyílt szöveghez mindig ugyanakkora, rövid hash-értéket rendel hozzá
- IDEA: a DES kiváltására hozták létre az 1990-es évek elején
- DSA (Digital Signature Algorithm): az RSA egyik konkurense
- PGP (Pretty Good Privacy): a legismertebb kettős kulcsú titkosító szoftver
- GPG (GnuPG): a PGP nyílt forráskódú változata
- one-time pad: olyan rendszer, amiben egy véletlen számokon alapuló privát kulccsal titkosítanak egy szöveget, és minden alkalommal új kulcsot használnak. Ennek megfelelően feltörhetetlen – amennyiben egy kulcsot nem alkalmaznak egynél többször.