Szerteszana²

grin agymenései

Have you been pwned?

2017-10-06 11:47 írta grin

A jelszóbiztonságról szeretnék neked mesélni.

Kaptam egy emailt egy tök jó szolgáltatástól, a neve Have I been pwned?, ami neminformatikus nyelven annyit jelent, hogy „ellopták-e az adataimat?”. Az email közölte, hogy az XY@PQ.ORG email címemet a BimBamBum webes szolgáltatás 2014-es betörésekor megszerezték a jelszóval együtt, amit a BimBamBum Inc. egy 15 perc alatt visszafejthető „kódolással” kódolt le.

Szar ügy.

Ez ugye mit jelent?

  • Ha a jelszó egyszerű volt (általában a 10 karakternél rövidebb, vagy szótárban is létező szavakat tartalmazó szavakat [bármilyen „tréfás” átirattal, pl. „j3lsz0” vagy „jElSzo”] tekintsük rövidnek), akkor vehetjük úgy, hogy nem volt kódolva, vagyis az emailcím+jelszó páros ismert.
  • Ha a jelszó ismert, akkor az email+jelszó párost már el is adták jó pénzért több tucat bűnözőnek, szíves felhasználás céljából. Ezután MINDEN nyilvános szolgáltatáson robotok ezrei fogják végigpróbálni, hogy ez a párosítás eredményez-e sikeres belépést, az email küldéstől a twitteren át a banki belépésekig. Ha eredményez, boldogan használni fogják.
  • Ha a jelszó bonyolult volt, és te nem vagy politikailag vagy gazdaságilag értékes célpont, akkor nem tudják a jelszót visszafejteni, és esélyesen „csak” az email címedet fogják árulni, mint ellenőrzött spam célpontot.

És akkor most elmesélem, hogy nekem miért nem okoz ez lelki törést. Azért, hogy legközelebb neked se okozzon.

Az én jelszavam kódolt változtatát is elvitték. Nem mennek vele semmire.

Az adott szolgáltáson még 2014-ben, amikor kiderült, és a szolgáltató értesített megváltoztattam a jelszót. (Sok szolgáltató ezt automatikusan megteszi, amúgy.) Így oda ezzel már nem fognak belépni. Pipa.

A jelszavam hosszú, az ottani konkrétan 12 karakteres volt. Így ennek direkt visszafejtése (ebben az esetben) valószínűtlen, mivel a mostani technológia szerint egészen sok pénz kellene hozzá (becslések szerint 100-nál több GPU 1 évig dolgozna rajta, becsült költsége $2.5 millió.)

De tegyük fel, hogy nem volt hosszú, vagy valakinek épp van a sufniban 1000 GPU-ja és rászán egy hónapot az én kis jelszavamra. Szóval megvan a jelszó.

Ezt a jelszót csak ezen az egy szolgáltatáson használom. Másképp fogalmazva: minden belépéshez új jelszót készítek. A fentiekből kitalálhatóan hosszabbat, mint 10 karakter. A fentiekből kitalálhatóan véletlenszerű karakterekből és nem szótári szavakból.

Ez azt jelenti, hogy még ha tudják is a jelszót, azt semmilyen más szolgáltatás esetén nem fogják tudni használni, és mivel ezen a szolgáltatáson már megváltoztattam, ott sem. Nem nyertek vele semmit, maximum az email címemet spammelni (ami egy másik okból nem zavaró: az email címem közvetlenül tanítja a spam szűrőmet, amit több tucat server is használ, így minden spammer hozzájárul a világ spam-mennyiségének csökkentéséhez).

„Jó, jó, ” – mondhatod – „de hogy jegyezzek meg végtelen számú jelszót? Post-iteljem a homlokomra?”

Jó ötlet! Na de tényleg, nem az. Tök zavaró amikor pislogsz és levágja a szemhéjadat. Ne ezt tedd.

Jelszó-manager, password manager, password vault, meg Allah tudja, milyen neveken futnak azok a programok, amik megjegyzik a jelszavakat. És most mondhatod, hogy nahát, fantasztikus, akkor ha valaki ellopja ezt a file-t, ott vannak a jelszavak!

Nyilván a jelszavakat titkosítani kell. Ez nehéz feladat: az interneten található „biztonságos” jelszótárolók nagy része egyszerűen csak – népies kifejezéssel élve – szar. Nem biztonságos, rosszul van megírva, siralom. A másik feladat sem könnyebb: ha jó is a titkosítás akkor is kell egy mesterjelszó (master password), ami sokkal biztonságosabb, mint a jelszavak, amiket tárol, hiszen ha ezt visszafejti valaki akkor ott az összes jelszó. És ezt meg kell jegyezni, ezt az egyet, de azt nagyon, és ezt sokat kell begépelni, hiszen – optimális esetben – a jelszótároló rendszeresen rákérdez, ha egy ideig nem használtad (általában 5-10 perc nem használat után illik újra rákérdezni). Ez egy nehéz feladat.

Az első esetben sajnos vagy értesz a kriptográfiához, a programozáshoz, és sok időd van, és ellenőrzöd a kiválasztott jelszótároló program biztonságát, vagy pedig próbálsz olyan forrásokat találni, akik ezt megtették. Én nem tudok neked garantált választ adni…

Frissítés: Eredetileg azt írtam, hogy:

…de azt tudom, hogy én a Keepass2-t használom (én Linux és Android alatt, de eredetileg Windows-os); ez egy nyílt forrású, egészen sokat nézegetett program, és eddig jelentős kifogást nem hallottam róla. Ha gondolod, ezt tudod használni…
…de egy konktruktív szakmai vita folytán, mely során felmerült a KeePass gagyi integrációja a böngészőkkel, a múlt évezredbeli (vagyis Mono) GUI, illetve a tárolt adatok formátumának „elméleti (nem)biztonsága”, rátaláltam a Password Safe programra, és „ahogy megismertem Őt, azonnal megváltoztatta az életem, és ezen a héten húsz százalékkal olcsóbban!”. ;-) Úgyhogy úgy néz ki, hogy importáltam a KeePass jelszavaimat és most őt tesztelem; ugyanúgy offline, de jelentősen modernebbnek néz ki, és kellemes browser és android integrációja van. Így most úgy néz ki, ezt fogom használni. Én konkrétan az eszközeim között megosztom a jelszófile-t, így a gépen felvett jelszó elérhető a telefonon is (mert felhőből továbbra is csak a sajátot).

(Én nem szeretem az online jelszótárolókat, mint amilyen például a LastPass. Számos probléma volt velük azon túl, hogy hálózati kapcsolat szükséges a használatukhoz, ami nem minden esetben szerencsés, pláne, hogy jelszavakat küldözgetünk egy távoli rendszerre, még ha kódoltan is. Mások viszont szeretik és használják, így nem mondom, hogy ne. De azt se, hogy ige. :-))

A második és sokkal nehezebb probléma a mesterjelszó, ami – mint említettem – legyen megjegyezhető, legyen hosszú, ne legyen kitalálható, ne tartalmazzon szótári szavakat[1], és ne legyen extrém bonyolult beírni (például telefonon). Ez egy szép, egymásnak is látszólag ellent mondó feltételrendszer. Az emberiség által jelenleg legjobbnak tartott módszer az, hogy nem „jelszót”, hanem „jelmondatot” használsz, vagyis több, lehetőleg egymáshoz semmi kapcsolattal nem rendelkező szót, vagy olyan mondatot ami írásban nem fordul elő, lehetőleg legalább 1-2 olyan szóval, ami egyáltalán nem létezik. Jó, hülyén hangzik, de a klasszikus módszerek egyike például, hogy veszel egy számodra megjegyezhető kifejezést, mondjuk „három ember képes egy titkot megőrizni, ha ebből kettő már meghalt” (– Benjamin Franklin), és a kezdőbetűkből képzed a „heketmhekmm” szót. (Praktikus módon, ha könyvből akarsz kifejezést nyerni, akkor igyekezz nem unalomig ismert forrást találni, például kerüld az iskolában kötelező módon tanított verseket vagy a Himuszt [bár azt úgysem tudod már].)

Tekintve, hogy a jelszót sokszor be kell írni, én így a „jelmondat” és a „nem létező szó” kombinációt javaslom: 1-2 nem létező szóból álló, legalább 10 karakternél hosszabb mesterjelszó a mindennapi élethez elegendő biztonságot adhat („a tudomány mai állása szerint”). Ha az ember belehajít még egy-két írásjelet is, az is sokat dob a helyzeten, a fenti példából mondjuk egy „heketmhekmm%emaktyk” egészen frappáns jelszó lehet (persze ezeket a példákat kerüld el, mert az Anyám tyúkja is egészen ismert).

Az is igaz, hogy a mesterjelszó problémára létezik egy „harmadik” megoldás, a klasszikus információbiztonság elveinek megfelelően a „valami, amit tudsz + valami, amivel rendelkezel + valami, ami vagy”, vagyis egy titkos információ, egy titkosító eszköz és egy személyes biometriai jellemző (például ujjlenyomat vagy retinaminta). Ezzel várhatóan fogsz találkozni, valahányszor be kell menned a Nevadai sivatagban található Area-51 bázisra, de amúgy otthoni jelszótárolásnál nem jellemző. Vannak programok (és elvileg a KeePass is képes rá) amik képesek mesterjelszó helyett USB tokent használni; különösen ha a token PIN kóddal is védett, akkor ez meglehetősen biztonságos módja a jelszótárolásnak.

Összefoglalva tehát: ha nem akarod, hogy kiverjen a víz amikor kiderül, hogy ellopták egy jelszavadat egy feltört weblapról, webshopból vagy szolgáltatásból, akkor a jelszavaid legyenek egyediek, legyenek véletlenszerűek, legyenek hosszúak (10 karakter minimum), tárold őket biztonságos módon titkosított jelszókezelőben amit egy biztonságos, hosszú, megjegyezhető és használható jelmondattal védesz. Így egészen jók az esélyeid, hogy a nevedben ne történjenek olyan dolgok, amiket nem szeretnél, és ne vezessenek ahhoz, hogy az internet szolgáltatód letilt, a tárhelyszolgáltatód kizár vagy éjjel kettőkor mérsékelten udvrias rendőrök kérdezik a személyes adataidat.

Lábjegy

  1. Jogos kritikaként érkezett, hogy igazából ha 3-4 szóból áll a jelmondat akkor ha a szavak szótári, de amúgy vegyesen gyakori és ritka szavakból állnak, illetve nem kitalálhatóak vagy kapcsolhatóak a személyhez (mert tegyük fel, hogy aki vissza akarja fejteni akár infomációkat is próbálhat gyűjteni) akkor az is kellően biztonságosnak tekinthető. A statisztikák szerint egy átlagos beszélő 10-20 ezer szót ismer és használ, ami szavanként nagyjából 13 bitet jelentene, ha csak a szótári kombinációkat nézzük. Ilyen szempontból 4 szó már kielégítő, és ezeket már vizuális technikákkal meg lehet jegyezni.
  2. Aaron Toponce: Random Passphrases Work, Even If They're Build From Known Passwords.
  3. Password strength checker a zxcvbn könyvtárat és csak helyben futtatott javascriptet használva; főként angol szavakra kihegyezve.

Másiklábjegy (2017-11-12)

Mivel több esetben felmerült, beidéznék néhány cikket arról, hogy Bill Burr, aki 2003-ban elkészítette a ma már közismert „krixkrax jelszó, rendszeresen megváltoztatva” elvet bocsánatot kért a világtól a tévedéseiért, hogy mi változott 2017-ben és hogy miért nem alapvetően jó megoldás a userek halálra szivatása, és persze hogy mi az új NIST irányelv, ami a jelszavakról is említést tesz (lásd 5.1 fejezet illetve az Appendix A).

A lényeg – according to NIST – 2017-ben: minimum 8 karakter, és a maximum hossz minimum 64 karakter (de a melléklet említi a megabyte méretű jelszavak életrevalóságát is, persze inkább anekdotikus szinten), a karakterkészlet lehetőség szerint nem korlátozott (tehát lehet benne szóköz, bármi nem non-printing karakter, unicode [de ennél fontos a normalizálás: NFKC/NFKD], stb.), nem használunk publikus „hint”-eket és kifejezetten nem „titkos személyes információkat” (pl: mi a jó édes anyádnak… a neve?), valamint kiszűrni a nagyon gáz jelentkezőket: a legismertebb jelszavak listái, szótári szavak, ismétlődő mintázatok és kontextusfüggő egyezések, mint pl. a user saját neve vagy emailcímének darabjai. Javasolt a jelszóerősség mutatása, a jó jelszó ismérveinek nem kötelező érvényű ismertetése. Nem alkalmazunk további megkötéseket és nem követelünk rendszeres jelszóváltást (NIST SP-800-63B; 5.1.1.2.).

Have you been pwned?

Szerteszana²

grin agymenései