A Bitcoin biztonságosságáról – 2. rész

2011-06-29

Szerző: Vitalik Buterin
Megjelent: 2011 június 24-én, 20:19:22-kor (UTC)

Bármilyen acélos is egy biztonsági rendszer, a leggyengébb láncszeme akkor is mindig ugyanaz marad: az emberi tényező. Hiába alkalmaz 4096 bites kódolást, a legfejlettebb hashelő algoritmusokat és egy 5 kB-os, direkt erre a célra, kézzel írt oprendszert, és hiába ellenőrzi húsz különböző biztonságtechnikai nagyvállalat, az azt használó emberekből akkor is ki lehet csalni a kulcsaikat (lásd a híres csavarkulcsos támadás esetét). Néha pedig még csak meg sem kell kerülni a védelmet, mivel az emberi gyengeség (és lustaság) abban is megnyilvánulhat, hogy egyáltalán nincs is védelem, amit meg kellene kerülni, mivel eleve sem telepítenek és/vagy nem is használnak semmilyen biztonsági rendszert. Ez a jelenség ugyanúgy megfigyelhető postafiókok és érzékeny vállalati adatok, mint ahogyan a Bitcoin esetében is. Többhelyütt régóta szajkózzák például azt is, hogy ha az ember nagyobb mennyiségű BTC-vel rendelkezik, akkor annak egy részét tartsa egy külön, megtakarítási tárcában, míg a másikat egy másik, vásárló tárcában, de a gyakorlatban csak igen kevesen használják ezt a megoldást. Ugyanígy javasolják a tárcák jelszóval való levédését, de ezt is csak kevesen teszik meg ténylegesen. Egyre szaporodnak a Bitcoinra irányuló trükkök és átverések, így csak idő kérdése, hogy mikor vághat zsebre valaki egy igazán nagy összeget.

Egészében véve a Bitcoin-ökoszisztéma egyik legnagyobb gyengeségét a gyenge jelszavak jelentik. Gyenge jelszó egyrészt az, amelyik rövid vagy közepes hosszúságú, és nem használ különleges karaktereket, másrészt pedig – és ez a rosszabbik eset – az, amelyiket mindenki más is használ. Mindössze tíz jelszó végigpróbálásával a fiókok akár 3-10%-a is feltörhető! Hogy jobban átérezhessük a helyzet komolyságát, vizsgáljuk meg, hogyan is kerülnek tárolásra a jelszavak: a legzöldfülűbbeket leszámítva a weboldalak túlnyomó többsége nem magukat a jelszavakat tárolja el, hanem azoknak a hasheit. A hash egy olyan funkció, amit bármilyen karaktersorozatból (így például egy jelszóból) könnyedén kiszámolhatunk, viszont amiből az eredeti karaktersorozatot már nem fejthetjük vissza anélkül, hogy végig ne próbálnánk az összes lehetséges kombinációt. Bármely adott fiók jelszavát kétféleképpen próbálhatjuk feltörni: tippelgethetünk, kézileg pötyögve be különböző lehetőségeket a “jelszó” mezőbe és próbálhatunk belépni velük (az oldalak általában limitálják ezt a lehetőséget, így például csak 10 próbálkozást engedélyeznek percenként), vagy rátehetjük a kezünket a jelszó-hash-adatbázis egy kiszivárogtatott példányára, és ráereszthetünk egy programot, hogy találja meg a hashekhez tartozó jelszavakat. És ezt a lehetőséget semmilyen oldal nem tudja korlátozni. Mivel pedig kiszivárogtatásra minden olyan esetben lehet számítani, amikor már egynél több ember fér hozzá az érzékeny adatokhoz, ezért érdemes jó előre felkészülni erre a lehetőségre, mivel több, mint valószínű, hogy előbb vagy utóbb mindenhol be fog következni. Megfelelő hardverrel és szoftverrel több millió hasht is végig lehet próbálni másodpercenként (Steve Gibson számológépével magad is megnézheted, hogy a te jelszavadat mennyi idő alatt találnák meg egy összehangolt támadással). Mi több, a bitcoin-bányászoknak az ehhez szükséges hardver általában rendelkezésére is áll, mivel a bányászat egyik elemét épp egy ilyen jellegű probléma megoldása alkotja. Ebből következően egy olyan jelszót, ami 1.) az angol nyelv egyik szava, 2.) az ezen a listán szereplő leggyakoribb jelszavak egyike, vagy épp 3.) mindössze hat kisbetűből áll, egyetlen másodperc alatt fel lehet törni.

Mi több, az évek során a crackerek már rengeteg egyszerűbb karaktersorozat hashét számították ki és rendezték konkrét kikereső táblázatokba, így a maiak már építhetnek az elődeik munkásságára: elég csak ezeket a táblázatokat átfésülniük a feltörni kívánt fiók jelszavának hashe után kutatva. Ezt a lehetőséget a legkönnyebben az úgynevezett sózással vehetik el a támadóktól az oldalak: úgy, hogy nem egyszerűen csak magának a jelszónak a hashét tárolják el, hanem a jelszót még kibővítik egy felhasználónként eltérő plusz karaktersorozattal (ennek legegyszerűbb módja a jelszó és a felhasználói név összevonása, mint pl. az “123456vbuterin” esetében) is, és az ily módon kibővített jelszó hashét használják. A támadóknak így minden egyes felhasználó esetében külön-külön kell próbálkozniuk ahelyett, hogy egyszerre foglalkozhatnának minden potenciális áldozattal. Sok oldal azonban egyszerűen nem használja ezt a lehetőséget; maga az MtGox sem használta két hónappal ezelőttig. Másik lehetőség a szélsőségesen hosszú, akár több megabájtos méretű sózás, mivel így egyetlen hash-próbálkozás is egy teljes másodperc egy igen jelentékeny hányadát emésztheti fel – így egy másodperc helyett már egy évnél is tovább fog tartani egymilliárd lehetőség végigzongorázása. Hátránya azonban ennek a módszernek a tárhely- és számítás-igényessége; mindent egybevetve és összegezve nem is ér annyit, mint az egyszerűbb biztonsági intézkedések.

Problémát jelent továbbá az is, hogy sokan több különböző oldalon is ugyanazt a jelszót használják. Így ha valaki sikeresen megszerzi egy bizonyos weboldal felhasználói név/jelszó adatbázisát, akkor az abban talált adatok egy részével jó eséllyel be tud lépni majd más oldalakra is. A Bitcoin-ökoszisztéma számára pedig azért különösen égető ez a probléma, mivel egyelőre legalábbis egy viszonylag szűk közösség alkotja, melynek tagjai jobbára ugyanazt a néhány oldalt látogatják. Volt már olyan, akinek épp emiatt kompromittálódott a MyBitcoin-fiókja. A jelenlegi jelszóhasználati szokásainkat figyelembe véve kijelenthetjük tehát, hogy bármely adott jelszavunk csak annyira erős, mint az azt védő leggyengébb láncszem. Más szóval, egyetlen gyengén védett oldal az összes többi oldalon lévő fiókjainkat is veszélyezteti. Ilyen gyenge láncszemek pedig mindig lesznek; nem számíthatunk arra, hogy minden oldal a lehető leghatékonyabb biztonsági rendszereket használja. A szemfüles támadó már egyetlen apró kódolási hibát is ki tud használni, és már hozzá is jutott az adatokhoz. Jelen körülmények között érdemes legalább 12 karakter hosszú, kis- és nagybetűt, valamint speciális karaktereket is tartalmazó alfanumerikus jelszavakat használni a hash-próbálgatások kivédése érdekében – és természetesen minden oldalhoz másikat. Minden újabb karakter, amivel megtoldjuk a jelszavunkat, még 50-100-szor teszi nehezebbé a támadó dolgát. Van azonban egy másik probléma is, jelesül az, hogy hiába találunk ki feltörhetetlen jelszavakat, ha nem vesszük rá a fáradságot, hogy meg is jegyezzük őket. A francia Bitcoin-fórum egyik hozzászólója így siránkozik: “komoly kétségeim vannak azt illetően, hogy mennyi hasznát veszi a széles nyilvánosság a kriptográfiának. Megfelelő felszereléssel ma már akár tizenkettes hosszúságú, különleges karaktereket tartalmazó jelszavakat is fel lehet törni. Tizenkét karakter pedig már valóban sok … Jók az elliptikus görbe-alapú kulcspárok, de ezek sem érnek sokat, ha az őket védő jelszót egy embernek kell megjegyeznie.”

Én a magam részéről nem osztom ezt a pesszimizmust. Meglátásom szerint itt egyszerűen arról van szó, hogy időbe telik, amíg egy új rituálé – így például egy új biztonságtechnikai gyakorlat – bevésődik a tömegek tudatába. Képzeljünk el például néhány olyan embert, akik egyéves koruktól fogva internet-hozzáféréssel nőnek fel; ők kezdettől fogva megszokják a net használatához szükséges óvintezkedéseket, egymástól teljesen különböző, 20 karakteres jelszavakat is meg tudnak jegyezni minden egyes oldalhoz, amit csak használnak – viszont egész életükben soha nem mozdulnak ki a szülői házból.Ha ezeknek az embereknek egy szép napon adnánk egy saját lakást és egy saját autót, úgy több, mint valószínű, hogy évekbe telne, mire megtanulják, hogy zárják be maguk után a kocsi és a lakás ajtaját, és a kocsikulcsot se hagyják soha a gyújtásban, mivel ezeket a rituálékat előzőleg nem alakították ki magukban, és így egyszerűen kényelmesen (értsd: lustán) járnának el. Számunkra azonban, akik a fizikai világban nőttünk fel, nem jelent gondot a fizikai óvintézkedések alkalmazása – bár a kockázati szintek még így is eltérőek: az első világ lakosainak ezirányú rituáléi például kétségkívül gyengébbek, mint a bűnözéstől erősen terhelt harmadik világbeli régiók lakosaié. Így tehát az internettel is csak az a baj, hogy a legtöbben soha nem védtek jelentősebb értékeket jelszóval. Ott vannak ugyan az emailfiókok, de a legtöbbek számára nem ezek jelentik az elsődleges kommunikációs csatornát. Lehet ugyan csalni a hitelkártyákkal is, de a chargeback lehetősége ettől is megvédi az embereket. Azonban változnak az idők. A biztonság kérdése ma már az internet minden területét érinti (és még annál is több mindent), a Bitcoin pedig egy kulcsfontosságú új állomása ennek a folyamatnak: a Bitcoinnal ugyanis mára elérkeztünk oda, hogy egyetlen egy fájl önmagában érhet akár félmillió dollárt is, erre pedig az emberek – kiváltképpen az első világbeliek – még nincsenek felkészülve. Az internet gazdagsága az első, míg a bűnözőktől való terheltsége a harmadik világéhoz mérhető, ezért az első világ lakosainak is el kell sajátítaniuk a megfelelő – az általuk már megszokottaknál jóval erősebb – netes óvintézkedéseket.

Rövid távon ezért olyan biztonsági rendszerekre is szükség lesz, amelyek fizikai óvintézkedésekké fordítják le a kibertér óvintézkedéseit, mivel a fizikai tárgyak védelméhez sokkal jobban hozzászoktunk, mint az információ védelméhez. E gondolatmenet alapján javasolja Bruce Schneier biztonságtechnikai szakértő például azt, hogy a jelszavainkat írjuk fel egy papírdarabra, amit aztán éppúgy védhetünk és elrejthetünk, ahogyan a fizikai kulcsainkat. De persze vannak más lehetőségek is:

* Kétlépcsős ellenőrzés mobiltelefonokkal, ahogyan azt a Gmail is csinálja: ha az ember be akar lépni a fiókjába, úgy küldenek a mobiljára egy egyszer használatos kódot, amit szintén be kell írnia a jelszavával együtt ahhoz, hogy beléphessen. Így a fiókhoz való hozzáféréshez már a megfelelő mobilhoz való hozzáférés is szükséges.
* Kétlépcsős ellenőrzés helyben tárolt szoftverrel, ahogyan azt a Gmail szintén lehetővé teszi. Ehhez egy, az ember saját gépén (vagy épp mobilján, netalán egy speciális USB-kulcson) tárolt programmal kell generálni egy egyszer használatos kódot a fiókhoz való hozzáféréshez. (A YubiKey tényleges billentyűzetként is azonosítja magát, és maga írja be a kódot.)
* Vannak további variációk a jelszavak leírásának témájára is: használhatunk például USB-kulcsot papírdarab helyett (a YubiKey ilyen lehetőséget is kínál). Vagy használhatunk olyan jelszókártyát is, amelyen csak mi tudjuk, hogy pontosan hol is helyezkednek el a jelszavaink, így azoknak máris két komponense lesz, jelesül egy írott (a papíron) és egy memorizált (a leolvasás módja).

Mivel azonban még az ilyen rituálék alkalmazása sem vált szokásunkká, ezért sokan a lusta megoldást választják – így például egy könnyen megjegyezhető, nyolcbetűs szót vagy nevet, aminek a végéhez esetleg írnak még egy 1-est is (ez utóbbi hozzátoldásnak azonban, amint az a kiszivárgott jelszólistából is kiviláglik, nincs sok értelme; ha már számot írsz a jelszavad végére, akkor legyen az például a 2-es, és ezzel máris valamivel biztonságosabb a jelszavad). Hosszútávon, ahogy az internet egyre központibb tényezővé válik az emberek életében, az óvintézkedések is egyre jobban rögzülni fognak. Mivel azonban az oktatási trendek jelenleg hajlamosak ellenezni a memorizáló tanulást, ezért bizonyára sokan (bár nyilván nem mindenki) élnek majd inkább a jelszókártyák, semmint a memorizálás használatának lehetőségével. A különösen kényes alkalmazások esetében pedig kétségkívül szükségessé válik majd a jelszóval kombinált egyszer használatos kódok alkalmazása is. Ahogy egyre jobban rögzülnek bennünk a rituálék, és egyre gyakrabban halljuk a “Bezártad az ajtót?” mellett az “Állítottál be új jelszót?” kérdést is, annál inkább válik az életünk szerves részévé az információbiztonság is.

Mivel azonban – amint arra már rámutattunk – rituálék hiányában a lustaság az alapállás, ezért rövid távon biztonságos alapbeállításokkal kell védeni a Bitcoint, hogy ily módon a biztonság válhasson az egyszerűbb – kényelmesebb, lustább – megoldássá. A Bitcoin-tárcák kódolásának alapértelmezetté tétele folyamatban van, a jövőben pedig már akár több tárcát is kínálhat majd a kiens, valamint segédkezhet a biztonsági másolatok készítésében és kezelésében is. A Bitcoin programozóinak rá kell ébredniük, hogy egy pénzügyi alkalmazást fejlesztenek, és ehhez mérten erős védelmet is kell biztosítaniuk a klienshez. Gondoskodniuk kell róla, hogy senki ne lophassa el valaki másnak az összes bitcoinját már akkor is, ha csak 10 másodpercre fér hozzá az illető gépéhez (ennek jegyében a kódoló patch már minden egyes tranzakció elindításához is kérni fogja a jelszót). Javaslom, hogy ha megvalósul a kódolás is, úgy mindenki használjon legalább 15 karakteres (különleges karakterekkel együtt) jelszót a Bitcoinhoz, és jegyezze is meg azt – és amit megtoldhat még egy jelszókártya karaktereivel is. Minél gyakrabban kell aztán begépelnie ezt a kódot (minden egyes tranzakcióhoz), annál könnyebben jegyzi is meg az ember; ha használsz a gépeden képernyőzárat, úgy gondolj csak arra, hogy azt is milyen simán és könnyedén írod be mindig.

Persze a Bitcoin nem csak a kliensről és a hálózatról szól, hanem az ökoszisztéma teljes egészéről. Számos online szolgáltatás – így például a Gmail – határoz meg minimális jelszóhosszokat és alkalmaz jelszóerősség-mérőket, és a Bitcoin-szolgáltatásoknak is rá kell szokniuk ezekre. A kiemelten fontosaknak pedig, mint amilyen például a MyBitcoin és a piacok is, kétlépcsős ellenőrzést is be kell vezetniük, hogy a széles nyilvánosság mihamarabb elkezdhesse megszokni azokat az óvintézkedéseket, amelyeket már vagy tíz éve meg kellett volna szoknia. Minden újabb feltört oldal és vagyonából kiforgatott gazdag felhasználó csak erősíteni fogja a Bitcoinnal szembeni aggályokat, tovább hátráltatva annak az elterjedését. Mindenki, aki nem védi magát eléggé, kockázati tényezőt jelent mindenki más – az egész rendszer – számára is. Ha Bitcoin-felhasználókként szeretnénk bebizonyítani, hogy nincs szükségünk kormányzati beavatkozásokra ahhoz, hogy megvédjük magunkat, akkor valóban meg is kell védenünk magunkat. Elvégre egy hajóban evezünk.

Forrás: Bitcoin Weekly

A lap szövege Creative Commons Nevezd meg! – Ne add el! – Így add tovább! 3.0 licenc alatt áll, felhasználni csak forrásmegjelöléssel, és ide mutató linkkel szabad.