Titkosítás (majdnem) mindenkinek
"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-nal (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 is 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ét 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. Vagyis: 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 kielégíteni. 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ügvé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 vissazkö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ú Rivest -
Shamir - Adleman 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ő 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 a tényleg 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 viszonyítva).
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
ugyan ú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, azaz 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.
Amivel 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 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 640x480 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 file rendszer staganográ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 a 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.
Galántai Zoltán (2002)
* A történeti hitelesség kedvéért említsük meg, hogy az angol
kormánynak dolgozó James Ellis és Clifford Cocks Malcolm Williamsonnal
már 1975-re megoldotta a kulcsmegosztási problémát, de hallgatniuk
kellett róla - elvégre a hadászatban is alkalmazható eredményről volt
szó.
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
- 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