Feltörhetetlen jelszavak
2012. április 28.A Nyest cikkét olvasva megint elgondolkodtam ezen a jelszóproblémán, már nem először. S megint arra jutottam, hogy feltörhetetlen jelszó természetesen nincs, de létre lehet hozni olyanokat, amiknek a feltörése elképzelhetetlenül sokáig tartana.
A Kissy tizenötödik részében is lesz említés a következő technikáról:
Ugye milyen egyszerű, köznapi jelszó? Minden szótárban benne van. Hát ezt a jelszót átlagos hacker soha nem tudja feltörni, a szuperdörzsöltnek pedig időtlen időkig eltarthat. Ha az olvasó átmásolja a jelszót egy olyan szövegszerkesztőbe, ami közli a karakterkódokat (például BabelPadba), ki fog derülni, hogy itt csak egy latin betű szerepel, a J. Az S nem S, hanem egy örmény tjun betű, igazából t-nek kellene olvasni. Az A cirill betű, a T pedig egy görög tau.
Az most mellékes, hogyan tudja a jelszó jogos tulajdonosa begépelni az ilyen jelszót. Akár egy karaktertáblával is lehet (az örményhez én is azt használtam, bár persze van örmény billezetem, de így most egyszerűbb volt; a többi meg rajta van a csodabillentyűzetemen), a lényeg az, hogy legyen a gépen olyan program, amin a szükséges karakterek elérhetők és a jelszó jogos tulajdonosa ismeri a használatát.
A fő kérdés az, hogy ez a jelszó mennyire biztonságos. Átlagos hacker maximum a hétbites ASCII-vel kalkulál, szóköztől a ~ karakterig, de már ez is iszonyú mennyiség egy brute-force algoritmusnak. Ha tudja, hogy a felhasználó magyar, akkor hozzáveszi a magyar ábécé betűit; ha a felhasználó orosz, akkor az oroszét, és így tovább. Ha több különböző írásrendszerből válogatunk össze karaktereket, akkor mindet szerepeltetni kell a brute-force programnak megadott jelkészletben, és elképesztő számok jönnek ki:
– angol ábécé: 52 karakter;
– hétbites ASCII: 95;
– ASCII + magyar ábécé: 113;
– cirill alapábécé: 64;
– görög alapábécé: 49;
– örmény ábécé: 76;
– angol, cirill, görög és örmény: 241;
– hétbites ASCII, cirill, görög és örmény: 284.
Ez az utolsó kombináció kell ahhoz, hogy egy ilyen jelszót meg lehessen fejteni:
Két örmény betű, egy ASCII karakter, cirill M, két görög omikron és egy latin betű. Ugyanakkor két egyszerű angol szót utánoz, amik összefüggenek, csak ezekkel a kódokkal semmilyen szótárból nem fognak előkerülni.
Csak négy írásrendszert használtunk, de máris közel háromszáz karakterre növeltük a terhet, amivel a brute-force algoritmusnak meg kell küzdenie. Valójában azonban még többre. Semmiféle hacker nem tudja kigondolatolvasni, hogy mely írásrendszerek karaktereit szerepeltettük a jelszavunkban: ha egynél több fordul elő, akkor kénytelen lesz végigpróbálni az összeset. Akár az egész Unicode-ot.
Mekkora számítási kapacitás kell egy ilyen jelszó feltöréséhez? Számoljunk. Ha tudjuk, hogy a jelszó k darab karakterből áll, amiket egy a darabos jelkészletből válogattunk, akkor ak darab ilyen jelszó lehetséges. (Valójában nem szoktuk tudni, hogy milyen hosszú a jelszó, tehát a nyolcbetűs jelszavakhoz is csak úgy jutunk el, hogy előbb az egybetűsöktől a hétbetűsökig mindent végigpróbálunk. De a könnyebb számítás kedvéért most feltesszük, hogy ismerjük a jelszó pontos hosszát.)
Például egy 26 betűs jelkészletből (abcdefghijklmnopqrstuvwxyz) összeállítható két karakter hosszúságú szavak száma 262, azaz 676, konkrétan aa-tól zz-ig. Ez nem sok. Azért ajánlanak mindig jó hosszú jelszavakat, hogy növeljék a hatványkitevőt, hiszen ötbetűs jelszóból már közel 12 milliót lehet készíteni csak ezzel a 26 betűvel. Ha a teljes hétbites ASCII-ből készítünk ötbetűs jelszavakat, az 955 = 7,7 milliárd jelszó lesz, vagyis ha másodpercenként egymillió kombinációt próbál ki a program (az én öreg gépem közel ennyit tud, úgyhogy nem is mondtam sokat), akkor alig két óra alatt megvan.
Logikus a gondolat, hogy egyszerűbb és célszerűbb a jelszó hosszát növelni, hiszen ha kétszer akkora jelszót veszünk: 9510 = kétmillió évnyi jelszótörés az iménti sebességgel, ellenben ha ugyanolyan hosszút háromszor akkora jelkészletből: 2845 = mindössze 21 év. Sokkal jobban megéri hosszú jelszót adni, mint a jelkészletet bővíteni.
De csak matematikailag. Pszichológiailag a 284 darabos jelkészlet az életben semmilyen hackernek nem fog eszébe jutni. Ül a gépe előtt kétmillió évig, a teljes hétbites ASCII-ből végigpróbálta a kombinációkat az egy darab szóköztől a tíz darab ~ jelig, és a gép visítva rohan neki a tizenegy betűs kombinációknak, amik újabb száznyolcvanmillió évet fognak fölemészteni – és egész idő alatt nem volt semmi esélye, mert a jelszó olyan karaktereket is tartalmaz, amiket ő egyáltalán nem tett bele a program által vizsgálandó jelkészletbe. Történetesen azok a jelszótörő programok, amiket jómagam ismerek, nem is tudnak tetszőleges jelkészletre keresni; némelyikben meg lehet adni ugyan saját ábécét, de a magyar hosszú ő-ű átváltozik ékezet nélküli o-u-vá. Ezeknél elég egyetlen cirill vagy görög betű, és soha nem lesznek képesek feltörni a jelszót.
Némelyik karaktertábla-program képes a teljes Unicode-ot mutatni, vagyis a felsőbb táblákat is; például a fent említett BabelPad karaktertáblája, ami külön programként is elérhető. Ezekkel megcsinálhatjuk azt a trükköt, hogy abszolúte ismeretlen karaktereket rakunk a jelszóba. Például a linkelt oldalon levő kép tanúsága szerint az U+1F354-es karakter egy hamburgert ábrázol. Ha fölrakunk egy ilyen karaktertábla-programot, egy megfelelő fontot, és olyan jelszót választunk, hogy
ahol a csillag helyén ez a hamburgerábra van… ez egy csupán tizenkét karakteres jelszó, de csak akkor lehet rábukkanni, ha a teljes Unicode-ot végigkeresi az ember. A 6.1-es kiadásban kis híján száztízezer karakter van, de ha már liba, gágogjon, a hacker nem tudhatja, hogy nem egy teljesen definiálatlan karaktert választottunk-e. Módunkban áll. Például U+03A2 egy nemlétező karakter kódja, a görög nagy ró és szigma között; itt lyuk van az ábécében, mert ez lenne a szóvégi szigma nagybetűs párja, ilyen pedig nincsen. Ezt is meg lehet jegyezni: lehet a jelszó ΣΠqΡ, vagyis a latin SPQR rövidítés (a szenátus és a római nép) görög betűkkel leírva, és azt játsszuk, mintha a görögben is lenne Q betű, éspedig U+03A2. A karaktertábla azt is kiadja, egy kis kockát látunk helyette.
Így viszont a jelkészlet már a teljes és abszolúte teljes Unicode-kódtartományt át fogja fogni, U+0000-tól U+10FFFF-ig, leszámítva néhány olyan karaktert, amiket nem tudunk a jelszót igénylő program szövegdobozába még bemásolni se. Ez viszont már 1,1 millió darabot jelent. Tíz betű ebből a készletből 1028 milliárd évbe telik, pedig közben már egymilliárdszorosára növeltem a számítógép sebességét.
|
Osztályzat: – |
Új hozzászólás
Töltsd ki az alábbi űrlapot hozzászólás küldéséhez
2012. május 2., szerda - 16:20:15
Két kérdésem van:
- Mi a helyzet, ha a törő-program nem is foglalkozik a betűkkel, hanem csupán a byte kód alapján megy végig? Ebben az esetben uis. csak a hossz számít, az aktuálisan tárolt kódok mindegyike egyforma súllyal (eséllyel) esik latba. Vagy ez nem reális alternatíva pl. 127 ASCII + néhány tíz magyar karakter mellett?
- Van-e olyan megbízható mód, amivel ilyen szempontból bonyolult kódot be tudok írni - nem csak a saját, hanem idegen számítógépen is? Én pl. még az y-z, 0-ö vagy az ékezetes betűk problematikáját is igyekszem kerülni … ezek szerint rosszul teszem.
Köszi!
2012. május 2., szerda - 18:04:51
1. Ha brute-force algoritmussal dolgozunk, annak az a lényege, hogy minden variációt végig kell próbálni. Vagyis ha mondjuk az ábécénk az „abcd” karaktereket tartalmazza, akkor a következőket kapjuk: a, b, c, d, aa, ab, ac, ad, ba, bb, bc, bd, ca, cb, cc, cd, da, db, dc, dd, aaa, aab, aac, aad, aba, abb, abc, abd, aca… és így tovább. Ha minden lehetséges byte-értéket végigveszünk, akkor egy 256 betűs ábécével dolgoztunk, és ha a jelszó mondjuk „medve”, akkor először végigvesszük 256-féle karakter egy-, két-, három- és négybetűs kombinációit, aztán elkezdjük az ötbetűsöket öt darab nullabyte-tal…
256 karakterből négymilliárd négybetűs kombináció áll össze. Az ötbetűsökből 137 milliárd kombinációt kell végignézned, mire az első karakter eléri a 32-es kódot, vagyis a szóközt. Addig csupa olyan kombinációt néztél, amiben legalább egy vezérlőkarakter volt, amiknek roppant kicsi az előfordulási esélye, már csak technikai okokból is. A brute-force algoritmusok éppen azért kérnek ábécét a felhasználótól, mert a 256-féle kódnak nem egyenlő az előfordulási esélye. A nullás és a 13-as szinte kizárt, a 101-es viszont nagyon valószínű, mert az a kis e betű.
Ha a jelszó unicode-os, ami mai világunkban egyre valószínűbb, akkor egyáltalán nem célszerű byte-okra lebontva keresni, mert ha a jelszót UTF–8-ban tárolták, mi meg UTF–16-ban keressük (vagy fordítva), akkor nem fogjuk megtalálni még a helyes jelszót sem. Ezért kell karakterekre bontani, nem byte-okra.
2. Idegen gép elé leülve legcélszerűbb, ha megnézed, milyen a billentyűzete. Nincs olyan betű, amiben biztos lehetsz megnézés nélkül, hiszen ha mondjuk oroszra vagy kínaira van állítva, akkor a sima A betű is más kódot fog adni. Ha azt látod, hogy QWERTZ rendszerű, holott a sajátod QWERTY (vagy fordítva), akkor a jelszó beírásakor is fordítva lesz. Ha a jelszavad „magzar billentzuyet ruley”, akkor úgy kell írnod, mintha azt írnád, hogy „magyar billentyuzet rulez”, és jó lesz.
A hiányzó ékezetes betűk nehezebb ügy. Ha csak országon belül vándorolsz, akkor elméletileg nyugodtan adhatod azt a jelszót, hogy „csálé fülű sütőtök”, mert mindenütt lesznek magyar ékezetek. Külföldön már aligha. Erre az esetre, illetve a cikkben tárgyalt trükkökre csak megfelelő szoftverrel lehet felkészülni. Viheted magaddal a szükséges billentyűzet- vagy karaktertábla-programot pendrive-on, vagy használhatsz online forrásokat. Karaktertáblából vagy az örmény, görög stb. Wikipédiából is be lehet másolni a betűket. Ez persze problémás lehet nyilvános helyen, ahol átkukucskálhatnak a vállad fölött.
2012. május 2., szerda - 18:28:11
Csúcs!
Ha “átkukucskálnak”, akkor bármit írhatok, nem lesz titkos. A probléma kettős: 1. nagy biztonság 2. gyorsan beírható kód. Vagy egyik-vagy másik tehát. Szerencsére az igen fontos dolgokat az ember inkább saját kezében tartja, nem teszi ki nyilvánosság elé - és itt egy spéci billentyűzet csodát tehet - no persze, ha magát a billentyűzetet nem kaparintja meg senki. Köszi az ötletet!
2012. május 2., szerda - 18:38:02
Ha kukucskálnak, akkor is lehet titkos, mert a gép csillagozza, Te pedig úgy helyezed a kezedet a billezetre, hogy ne lehessen látni, mit ütsz le. Gyorsan, vakon gépelők előnyben. Gond akkor van, ha a képernyőn látható jeleket kell bemásolnod, mert a tyűzeten nincs rajta. Ezért jó tényleg egy olyan program, ami tud néhány speciális jelet, és azokat nem valami menüből lehet kiválasztani, hanem egyszerűen leütni egy billentyűkombinációval.