@t[Feltörhetetlen jelszavak]~~META:date created = 2012-04-28~~
A Nyest [[http://www.nyest.hu/hirek/konnyen-megjegyezheto-nehezen-feltorheto|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 [[http://kissy.lattilad.org|Kissy]] tizenötödik részében is lesz említés a következő technikáról:
@center[ՏА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 [[http://www.babelstone.co.uk/software/babelpad.html|BabelPad]]ba), 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 [[meg_szoftvertamogatasabb|csodabillentyűzetem]]en), 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:
@center[Տտ&Мοο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 [[http://www.babelstone.co.uk/software/babelmap.html|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
@center[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.
@blogf[jelszó Unicode biztonság görög cirill örmény brute-force írások számtech billentyűzet]