Hozzáadva: 2021. Július 18.
A Monero egy olyan kriptovaluta, amely lehetőséget ad arra, hogy a felhasználók elrejtsék a tranzakcióikat leíró gráfokat a nagyközönség kíváncsi szemei elől. Ezt a tranzakciókhoz való, értéktelen koinok hozzákeverésével érik el. Ezeket az értéktelen kriptopénzeket az angol szakirodalmak “mixin”-nek nevezik és az alábbiakban így fogunk rájuk hovatkozni. Kiderül azonban, ez a stratégia nem teljesen tökéletes és két ponton elég súlyos sebezhetőségi problémát mutat. Nézzük akkor a részleteket!
Tudományos kutatásokból kiderül, hogy a tranzakciós bemenetek 62%-a lánc-reakciós analízissel (chain-reaction analysis) felfedhető, magyarul a tényleges bemenetet vissza lehet fejteni, mert a mixin-eket 0-mixin-es tranzakciókkal költik el.
Másodsorban pedig, a monero mixin-ek életkorbeli eloszlása bizonyos mintázatot követ és emiatt könnyen fel lehet őket ismerni a tranzakciós adatok között. Röviden arról van szó, hogy a legfrissebb tranzakciós bemenet általában a tényleges bemenet (és nem a mixin). A kutatási eredmények arra világítanak rá, hogy ezzel a módszerrel az 1 vagy több mixin-t tartalmazó tranzakciók 80%-os pontossággal visszafejthetők és fel lehet fedni a tényleges tranzakciós bemenetet.
Az első sebezhetőség a RingCT bevezetése előtt megjelent monero kliens szoftvereket érinti, a második azonban a legújabb monero klienseket is fenyegeti.
A monero egy olyan titkosítás orientált kriptovaluta, amely a Cryptonote protokollt használja és 2021 júliusában a 26. Legnagyobb piaci kapitalizációval rendelkező kriptopénz. Míg az első kriptovaluta, a bitcoin hálózata lehetőséget ad a tranzakciós gráfok felfedésére a Cryptonote protokoll nem valós tranzakciók keverésével képes elrejteni a teljes tranzakciós gráfot a publikum elől. Ezeket a nem valós tranzakciókat az előzőekben említett módon “mixin”-eknek hívják.
A monero mixin-es megoldása azonban a titkosítási problémákat nem oldja meg teljes mértékben. Ezek a problémák egyáltalán nem újak és a monero fejlesztői már 2015 óta diszkutálják az ügyet.
A mixin-es megoldás első problémája
Sok monero tranzakció visszafejthető mixin-t tartalmaz és a mixin-eket hozzá lehet kötni múltbeli tranzakciókhoz lánc-reakciós analízis (chain-reaction analysis) segítségével.
A monero kliensek általában lehetőséget adnak a tranzakcióba belekeverendő mixin-ek számának megadására. A legtöbb monero tranzakció nem is tartalmaz mixin-t(!). 2017-ben például a tranzakciók 66.09 százaléka nem tartalmazott mixin-t. Ezekben közvetlenül meg van adva az előző TXO (tranzakciós kimenet), hasonlóan egy mezei bitcoin tranzakcióhoz. Ezzel nem csak az a probléma hogy így nem beszélhetünk tranzakciós adat titkosításról, hanem az is, ami egyébként még aggasztóbb, hogy más felhasználók ezeket a ténylegesen elköltött kimeneteket belekeverhetik egyéb más tranzakciókba mixin-ként használva. Amikor ugyanis egy monero kliens mixin-eket választ, nem figyel arra hogy ezeket már elköltötték-e. Kiderül, hogy az 1 vagy több mixin-t tartalmazó monero tranzakciók 62%-a visszafejthető és ezeket egyértelműen vissza lehet követni múltbeli TXO-ra.
A mixin-es megoldás második problémája
A monero mixin-eket olyan eloszlásból mintavételezik, amely nem hasonlít valós tranzakciós bemenetekre és emiatt a valós tranzakciós bemeneteket könnyedén azonosítani lehet. Amikor egy monero kliens átutal egy koin-t, akkor a mixin-eket olyan rendezett tranzakciós bemenetek háromszög eloszlásából veszi, amelyek összege megegyezik a tranzakciós összeggel. Azonban a tapasztalati tények azt mutatják, hogy a tranzakciók megvalósulása során a koin-okat nem véletlenszerűen választják a blokkláncról, hanem azok egy meglehetősen eltolt (mondjuk exponenciálist) eloszlást követnek.
Egy 2015-ös monero fórumon található bejegyzés, EhVedadoOAnonimato felhasználótól a következő módon írja le a problémát:
“A valóságban megvalósuló tranzakciók esetében nem beszélhetünk tökéletes véletlenszerűségről, a tranzakciós kimenetek kora befolyásolja a felhasználás valószínűségét. Magyarul a fiatalabb TXO-k gyakrabban kerülnek felhasználásra. Bitcoin és más kriptopénzek esetében is jelen van ez a tökéletlenség.”
A bitcoin 2009-es megjelenése óta a monero mellett számos más alternatív kriptopénzt fejlesztettek ki. A kriptovaluták olyan, a résztvevő felek közvetlen kapcsolatát lehetővé tevő hálózatok, amely elosztott adatbázist tárolnak és ez az adatbázis csak a hozzáfűzés műveletet támogatja. Azt adatbázisra a szakirodalom blokkláncként hivatkozik. Ez a blokklánc hivatott letárolni a felhasználók pénztárcájának egyenlegét és az egyenleg nem más mint egy egyértelmű megfeleltetés a pénztárcák hash címe és az azokon található kriptovaluta mennyisége között. Amikor egy felhasználó el szeretne küldeni valamennyi kriptopénzt, akkor először digitálisan aláírt üzenetet küld a hálózatba. Ezt hívjuk tranzakciónak és ezt validálni kell, majd hozzá kell adni a blokklánchoz. Ha egy kicsit részletesebben szeretnénk tárgyalni a dolgot, akkor azt mondhatjuk, hogy minden egyes kriptovaluta tranzakció tartalmaz valamennyi bemenetet és valamennyi kimenetet. A bemenetek koin-okat fogyasztanak el, a kimenetek pedig új koin-okat hoznak létre, így az összesített egyenleg nem változik. Minden egyes bemenet olyan el nem költött tranzakciós kimenetet költ el (TXO), amelyek korábbi tranzakciókban keletkeztek. Ezeket összesítve tranzakciós gráfot lehet felépíteni. Mivel a blokklánc teljesen publikus, a felhasználói adatok bizonyos esetekben napvilágra kerülhetnek. Továbbá minden egyes tranzakciót nyilvánosan szétterjesztenek a hálózatban és azt sokszor replikálják is ha valahogyan lehetőség nyílik a tranzakciós adatok visszafejtésére, akkor az abból kinyerhető adatokon az adathalászok évekre visszamenőleg élősködhetnek. A bitcoin blokkláncával kapcsolatban végzett fejlesztések és tudományos munkák nem egy olyan analizátort eredményeztek, amelyek a kriptovaluta tranzakciós gráfját képesek visszafejteni. Kiderül továbbá, hogy az anonimitására nagyon is büszke monero hálózat azonban hasonló módon visszafejthetőségi veszélyeknek van kitéve.
Ez a protokoll olyan megoldást ad a kriptopénzek mozgatására, amelynek segítségével a felhasználók el tudják rejteni identitásukat a tranzakciók során és a tranzakciókat nem lehet egyértelműen hozzákötni az azt indító és fogadó fizikai személyhez. A Cryptonote protokoll használata során nem adják meg, hogy pontosan melyik TXO-t fogják elkölteni, hanem egy halmazt alakítanak ki és ebben a halmazban lehetnek valós és képzetes TXO-k is. A képzetes TXO-kra mixin-ként hivatkoznak a monero-sok. A tranzakciót ezek után nem egy hagyományos digitális aláírással egészítik ki, hanem gyűrű aláírást (ring signature) használnak. A gyűrű aláírást egyfajta ismeretet nem igénylő bizonyítékként (zero knowledge proof) lehet felfogni. Ez a gyűrű aláírás megfelel az egyik TXO-nak, de nem árulkodik arról, hogy pontosan melyiknek. A dupla költekezés (double spend) problémáját a monero hálózat úgy oldja meg, hogy minden egyes bemenetnek kulcs ábrát (key image) kell tartalmaznia és ezek az ábrák egyediek kell hogy legyenek. A hálózat feladata pedig az, hogy ellenőrizze a kulcs ábra felhasználhatóságát (vagyis hogy sosem volt még felhasználva). A Cryptonote protokoll-t egyébként sok más kriptopénz hálózata is alkalmazza. Közöttük van a Boolberry, a Dashcoin és a Bytecoin is. A tárgyalást ki lehetne terjeszeteni a többi Cryptonote protokoll-t alkalmazó kriptovalutára is, de mivel a monero piaci kapitalizációja a legjelentősebb, érdemes lehet vele foglalkozni most.
A Cryptonote protokoll nem beszél arról, hogy hogyan kell a mixin-eket a tranzakciós adatokba belekeverni. Igaz ugyan az, hogy az eredeti Cryptonote implementáció egyenletes kiválasztási stratégiát alkalmazott és a monero esetében is ez lett megvalósítva. A tranzakciós bemenet minden egyes TXO-ja ugyanazt az kriptovaluta egyenleget kell hogy tartalmazza, ezért a monero pénztárca alkalmazásnak nyilván kell tartania a felhasználható TXO-k listáját és természetesen ismerni kell minden TXO összegét is. A mixin-eket ezekből a TXO-ból választják ki valahogyan és az időrendi sorrendjükön kívül nem vesznek figyelembe semmilyen más adatot a választás során.
Igazándiból a felhasználó kezében van, hogy milyen mixin-eket kever a tranzakciós adatai közé és ilyen téren nincs közmegegyezés, mert a monero bányászoknak nem feladata a mintavételezés során használt eloszlás ellenőrzése, szóval a kliens programok, amelyek ugyanazon blokklánchoz vannak csatlakozva a saját kényük, kedvük szerint mintavételezik a felhasználandó mixin-eket. A monero parancssoros kliense használata során van lehetőség megadni a használandó mixinek számát, ennek az alapértelmezett értéke 4.
Az utóbbi néhány évben a monero mixin választási politikája számos változáson ment keresztül.
A 0.9.0 monero verzió előtt a mixin-eket egyenletesen választották az olyan TXO-k közül, amelyek ugyan annyi koin-t tartalmaztak mint az elköltendő, ebből viszont az következett, hogy a fiatalabb tranzakciók gyakrabban kerültek bele a tranzakciós adatokba.
A 0.9.0 verzió megjelenése után háromszög eloszlást használtak a TXO-k kiválasztásakor. A háromszög eloszlás az egyenletes eloszlással ellentétben el van tolva és gyakrabban választ új koin-okat mint régieket. A monero fejlesztői ezt valószínűleg azért alkalmazták, mert a valós tranzakciós bemenetek is nagy valószínűséggel fiatalok (újak) lesznek. Azonban a tényleges blokkláncon megjelenő adatok analíziséből kiderül az is, hogy a háromszög eloszlás nem annyira eltolt, mint a tényleges eloszlás. Az új monero verzió 2-ben minimalizálta a kötelezendően alkalmazandó mixin számot. Ez a szabály egy 2016-ban történt hard fork hatására lett bevezetve.
A 0.10.0 monero verzió RingCT implementációt tartalmazott és ennek segítségével a felhasználók el tudták rejteni a tranzakciós összegeket, így már nem volt szükség az átküldendő koin további feldarabolására az anonimitás megőrzése céljából. A RingCT tranzakciók 2017 január 5-ig nem voltak aktívak a monero hálózatban. Az aktiválásra a 1220516. blokk után került sor.
A RingCT megvalósítás nem feltétlenül oldja meg a tranzakciós adatok visszafejthetőségének problémáját. Viszont olyan szempontból megoldás ad, hogy mivel a RingCT típusú tranzakciók csak RingCT kimeneteket tartalmazhatnak mixin-ként és továbbá mivel a kötelezően alkalmazandó mixin szám 2-ben lett minimalizálva nem jelenhetnek meg 0-mixin RingCT bemenetek, amelyek esetlegesen veszélynek tennék ki a tranzakciós adatokat.
A 0.10.1-es monero verzió megjelenésével a mixin kiválasztási stratégia megváltozott és ekkor a protokoll már kimondja, hogy bizonyos mennyiségű mixin-t az 5 napnál fiatalabb TXO-k közül kell kiválasztani. Ezt hívják angolul “recent zone”-nak és ennek segítségével a mixinek megközelítőleg 25%-a relatíve új tranzakciós adatokból van kiválasztva.
A monero blokkláncról kiderül, hogy roppant mennyiségű 0-mixin-es tranzakciót tartalmaz. Ezek a tranzakciók visszafejthetőségüket tekintve nem különböznek mondjuk egy bitcoin tranzakciótól. A kezdeti időszakokban, amikor a felhasználók még régi monero klienseket használtak, akkor nem kevertek mixin-eket a tranzakciós adataikba.
Első ránézésre azt gondolhatnánk, a mixin-t nem tartalmazó tranzakciók praktikusak, mivel kisebb méretűek, alacsonyabb költséggel járnak és olyan felhasználók választhatják ezeket a 0-mixin tranzakciókat, akik nem feltétlenül akarják elrejteni tranzakciós adataikat. Kiderül azonban, hogy így a többi, mixin-t már tartalmazó tranzakció is potenciálisan visszafejthetővé válhat.
Egy egyszerű példával szemléltetve a helyzet a következő. Ha mondjuk van 2 tranzakció “a” és “b” és “b” nem alkalmaz mixin-t, de “a”-ra hivatkozik mint TXO, akkor egyértelműen tudjuk, hogy “a” “b”-ben lett elköltve. Ekkor ha veszünk egy “c” tranzakciót, amely “a”-t költi el mixin-ként és egy másikat nem mixin-ként, akkor vissza lehet fejteni, hogy “a” “c” mixin-e, mert “a” “b”-ben már el lett költve. Vegyük észre azt is, hogy “b” és “c” időrendi sorrendje felcserélhető és nem tudjuk mikor jön majd egy olyan tranzakció a blokkláncban, amely leleplezi a mixin-t. A monero kliensek nem foglalkoznak ezzel a problémával és a tranzakciós adatok közé nyugodtan kevernek felesleges (anonimitást nem garantáló) mixin-eket is.
A fenti eszmefuttatásból következően lehet generálni egy olyan algoritmus, amely végigpásztázza a monero blokkláncot és kiszűri a 0-mixin tranzakciókat. Ezen eljárás segítségével sok egyéb más tranzakciót is vissza lehet fejteni. Ha ezt az algoritmus lefuttatjuk, akkor kiderül, hogy az 1 vagy annál több mixin-t tartalmazó tranzakciók megközelítőleg 66%-a visszafejthető.
A probléma ellen két módon biztosan lehet védekezni. Elsősorban több mixin-t kell belekeverni a tranzakciós adatokba, másodsorban pedig érdemes a monero klienst folyamatosan a legfrissebb verzión tartani, mert az új kliensek alacsonyabb valószínűséggel használnak 0-mixin-es tranzakciókat és így már kevésbé vannak kitéve ezen veszélynek. Az analízisből kiderül azonban az is, hogy mégha valaki több, mint 10 mixin-t alkalmaz (nagyfokú tranzakciós anonimitás a célja) akkor sem tudja teljes mértékben elkerülni a tranzakciós visszafejtés problémáját.
A lánc reakciós típusú visszafejtési problémával egyébként már régóta foglalkozik a monero közösség. Eleinte az olyan jellegű támadási lehetőségekre hívták fel a figyelmet, amelyek megkövetelték hogy a támadó rendelkezzen a múltban már használt monero koin-okkal és a támadás során fedje fel személyazonosságát. Itt most azonban kiderül, hogy nincs szükség aktív módon megtámadni a monero hálózatot és így is vissza lehet fejteni viszonylag sok tranzakciós adatot.
Eleinte a monero fejlesztői úgy tartották, hogy ha legalább 2 mixin-t kevernek a tranzakciós adatok közé, akkor egy passzív támadásból viszonylag gyorsan képes regenerálódni a hálózat. Az újabb vizsgálatok szerint viszont igaz ugyan, hogy ha legalább két mixin-t használnak a tranzakciók során, akkor jelentősen csökken a visszafejthető tranzakciók száma, de még mindig maradnak olyan tranzakciós adatok, amelyek felfedhetik bizonyos felhasználók titokban tartandó adatait. A korábbi modellek csak elméleti síkon fontolgatták az ilyen jellegű támadások lehetőségét, később viszont kiderült, hogy a probléma valós és mérhető a visszafejthető tranzakciók mennyisége. Ha valóban kielemezzük a monero blokklánc adatait, akkor pontos számot kaphatunk a visszafejthető tranzakciókról. Egy 2014 szeptemberében elvégzett analízis adatai alapján kiderült, hogy a monero tranzakciók 80%-a nem tartalmazott mixin-t.
A RingCT mechanizmus bevezetése óta természetesen sokat javult a helyzet és a visszafejthetőség problémája inkább csak a régebbi monero tranzakciókat érinti. A felhasználók 2017 februárja óta használhatják a RingCT-t is tartalmazó implementációt és a RingCT-vel kiegészített tranzakciók immunisak a visszafejtést célzó támadások ellen. Itt egyébként érdemes megjegyezni, hogy nem közvetlenül a RingCT implementáció oldja meg a visszafejthetőségi problémát, hanem az hogy a RingCT-t a minimum 2 mixin megkövetelése után vezették be és így a RingCT-t tartalmazó tranzakciós kimeneteket nem lehet elkölteni 0-mixin-es bemenetekkel.
Érdekes egyébként a mixin-ek időbeni eloszlása is. A Cryptonote protokollt alkalmazó kriptovaluták esetében az elköltendő koin-ok a blokkláncban egy múltbéli tranzakcióra hivatkoznak. Ez tulajdonképp egy időbeni eltolás, amelyet ábrázolni lehet. Itt csak azokat a tranzakciókat kell figyelembe venni, amelyek kimenete megegyezik a kérdéses tranzakció bemenetével. Ha a monero blokkláncon elvégezzük az analízist kiderül, hogy a felhasználók viszonylag gyorsan elköltik pénzeiket. Magyarul mondjuk van egy kriptovaluta tőzsde (Binance, Gate IO, OKEX, stb.), ott kereskedik egy felhasználó, majd úgy gondolja kiutalja magának a koin-t és ezek után néhány órával már pattintja is tovább a koin-t. Ritkán van olyan, hogy a koin-okat évekig tárolja pénztárcájában. Ebből viszont az is következik, hogy a valós bemenetek időbeni eloszlása erősen eltolt lesz, mert nagyobb valószínűséggel költenek el egy nemrég beérkezett koin-t, mint egy régi koin-t. A mixin-eket viszont háromszög vagy egyenletes eloszlásból választja a monero kliens. Ez így akkor nem lehet probléma? De igen! És kiderül, hogy ha összehasonlítjuk a valós tranzakciós bemenetek elolszlását a mixin-ek időbeli eloszlásával akkor nagy különbséget kapunk. Ebből pedig ki lehet következtetni a valós bemenetet. A tranzakciós adatok analízisének segítségével 80%-os valószínűséggel meg lehet mondani egy tranzakciós bementetről, hogy az mixin-e vagy valódi tranzakciós bemenet.
Egy bizonyos ponton ha visszafejtjük az előbb ismertetett technológia segítségével a monero tranzakciókat, akkor kiderül, hogy ekkor az 1 vagy annál több mixin-t tartalmazó tranzakciók átlagosan 92%-ában a valós tranzakciós bemenet a legújabb bemenet. Kiderül továbbá az is, hogy a mixin-ek alkalmazása sem enyhít sokat a dolgon. A heurisztika 81%-ban működik az olyan tranzakciókra is, amelyekben legalább 4 mixin van.
Monte Carlo szimuláció segítségével meg lehet határozni a felhasznált mixin-ek száma és a tranzakciók visszafejthetősége közötti kapcsolatot. A konkrét szimulációs adatokból kiderül, hogy 0.9.0 monero verzió és az az előtti kliensekkel létrehozott tranzakciók 75%-a visszafejthető még úgy is, hogy 4 mixin-t alkalmaztak. Az újabb monero verziók valamilyen szinten képesek orvosolni ezt a problémát és egyre kevesebb a ténylegesen visszafejthető tranzakció a monero hálózatban, azonban jelenleg tökéletes megoldás nincs.
Az előbb említett háromszög eloszlást valóban a frissebb tranzakciók gyakoribb kiválasztásának céljából vezették be a 0.9-es monero kliensben és a 0.10.1 monero kliens pedig már olyan eloszlást használ, amely hatékonyabban mintavételezi a frissebb tranzakciókat. A probléma azonban továbbra is jelen van és ezzel a verzióval, valamint 4 mixin használatával a valós bemenet 45%-os valószínűséggel megadható. Ha eltávolítjuk az egyértelműen visszafejthető tranzakciókat, akkor az átlagos mixin szám 3.53-ra jön ki és így megközelítőleg 60%-os valószínűséggel meg lehet mondani a valós tranzakciós bemenetet.
Meg lehet továbbá vizsgálni a 2017 január 5-én bevezetett RingCT megoldás hatását is. A protokoll változtatás szerint a RingCT tranzakciók csak RingCT tranzakciókra hivatkozhatnak és így ha ábrázoljuk a RingCT tranzakciók időbeni eltolásának eloszlását, akkor egy erősen eltolt, háromszög jellegű eloszlást kapunk, ez pedig biztató, mert ez volt a monero fejlesztők célja.
Továbbá fennáll az a hipotézis is, miszerint a probléma az idő múlásával súlyosbodik, mert a hibás eloszlás mérete folyton nő (relatíve több régi tranzakció lesz mint új).
Az eddig alkalmazott háromszög eloszlás előzetes tudás nem igényel. Ezért angolul egyébként “lack of knowledge distribution”-nak hívják. A monero mixin mintavételezésének esetében viszont vannak ismereteink a blokkláncról és segítségül lehet hívni a bitcoin blokkláncának adatait is.
Ha megvizsgáljuk a koin-ok elköltési ofszetjének eloszlását, kiderül hogy az független az időtől, nem függ továbbá az alkalmazott mixin-ek számától sem és hasonló mintázatot követ a bitcoin és a monero esetében. Ábrázolhatjuk ezt az eloszlást és szembeötlik, hogy a legjobban a gamma függvényre hasonlít. A monero fejlesztők javaslata tehát ezen gamma eloszlás használata az új protokolban, amikor a mixin-eket mintavételezik. Szerintük ezzel jelentős mértékben orvosolni lehetne a monero tranzakciók visszafejthetőségének problémáját. A megoldás jónak tűnik, azonban a monero pénztárca alkalmazások módosítására is szükség lenne egy ilyen jellegű protokoll módosítást követően, mert a jelenlegi monero pénztárcák nem kezelnek elegendő információt a blokkláncról, ahhoz hogy az új mintavételezési algoritmust implementálni lehessen.
Szerző: LB
Figyelem: A bejegyzésben található információk tartalmazhatnak hibát. A szerző az abból eredő károkért nem vállal felelősséget!