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:

ՏАJΤ

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:

Տտ&Мοοn

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

ettem egy *t

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:


(1: legrosszabb, 5: legjobb)
  1. Avatar for T T

    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!

  2. Avatar for LAttilaD LAttilaD

    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.

  3. Avatar for T T

    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!

  4. Avatar for LAttilaD LAttilaD

    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.

Új hozzászólás

Töltsd ki az alábbi űrlapot hozzászólás küldéséhez