Néhány hete már agyalok azon, hogy kéne egy post a Bitcoin és a blockchain technológia mögött álló kriptográfiai háttérről. Hisz bár napnál világosabb mindenki számára, hogy a ‘kriptovaluta’ kifejezésben a kripto tag a kriptográfiára utal és talán még az is tiszta sokaknak, hogy a mi is a kapcsolat az walleted mögött álló privát kulcsa és annak address-e között (előbbi ugye – nevéhez híven- a privát kulcsa, utóbbi pedig az ebből képzett publikus kulcs), de csak akad néhány olvasó, aki szeretné ennek a technológiáját is megérteni.
Neki is fogtam megírni az összefoglaló cikket, de már annak első mondatainál Déjà vu érzésem volt, mintha én ezt már egyszer megírtam volna. Már éppen a BSG méltán híressé vált mondata zakatolt az agyamban (“All of This Has Happened Before And will Happened Again“) és gondoltam rákeresek a blogon, de semmit nem találtam, majd rákerestem a privát levelezésemben de ott sem találtam semmit. És jött a ‘blast from the past‘ pillanat, amikor rájöttem, hogy ezt bizony és egyszer tényleg megírtam, csak éppen potom 15 évvel ezelőtt.
Akkoriban éppen őrült PKI (Publikus Kulcsú Infrastruktúra) lázban égtem. Egy akkor éppen virágzó hazai IT Biztonságtechnikai cég alapítójaként naponta idegeltem halálra az üzlettársaimat azzal, hogy miként is kéne több figyelmet fordítanunk a PKI-nak és a kriptográfiának. A két üzlettársam (Tita és Tomi) minden bizonnyal a mai napig emlékszik az éjszakákba menő beszélgetéseinkre, amikor folyamatosan körbe-körbe jártuk ugyanazt a témát: Hogy a francba is lehetne ebből a PKI témából üzletet csinálni. Sajnos nem ütött be, akkor egyikünknél sem a heuréka-effektus, nem tudtunk maradandót alkotni ebben a témában, helyette a rengeteg agyalásnak a vége egy opt-in DRM megoldás lett, amire rápazaroltunk az életünkből fejenként kb 3-4 évet.
Viszont lett azért egy pozitív hozadéka mindennek: egy cikk, ami akkor (2002. június 5.) a hwsw.hu-n jelent meg (-link-) és – kis túlzással – mindazt írtam le benne, amit ma meg akarhattam volna írni a Bitcoin mögött álló kriptográfiai technológia kapcsán is. Ha érdekel a téma és van kedved elolvasni egy 15 éve porosodó leírást, akkor olvasd tovább. Előtte még azért kiemelnék két mondatot az irományomból, amiből talán kitűnik, hogy személy szerint mekkora fantáziát láttam ebben a témában:
Az üzleti szférában az utóbbi időben rendre felbukkan egy első hallásra misztikusnak tűnő kifejezés, a PKI fogalma. […] A publikus kulcsú infrastruktúra esetében a szabályok és a keretek meglehetősen dinamikusak ahhoz, hogy bármikor utat engedjenek az újdonságoknak.
Az eredeti cikket tényleg csak mementó jelleggel rakom ki a blogra. Így átfutva egyébként nem írtam nagy hülyeségeket, de 15 év távlatából azért már kiszúrok benne néhány apróbb hibát, amit az akkori naivságom okán vétettem.
Az üzleti szférában az utóbbi időben rendre felbukkan egy első hallásra misztikusnak tűnő kifejezés, a PKI fogalma. Mit is jelent e rövidítés? A PKI egy mozaikszó, mely magyarra “nyilvános kulcsú infrastruktúra”-ként (Public Key Infrastructure) fordítható. A nyilvános kulcsú infrastruktúra az a rendszer, melynek feladata a digitális aláíráshoz szükséges nyilvános kulcsok létrehozása, kibocsátása, publikálása, menedzselése és visszavonása. A nyilvános kulcsú technológiák segítségével biztosítjuk a rendszerben a következő tulajdonságok meglétét: hozzáférés, hitelesítés, letagadhatatlanság, integritás és bizalmasság.
Ez az öt fogalom olyan folyamatokat ír le, melyeket többé-kevésbé bármilyen módon meg lehet oldani. Mégis mi az, ami miatt a PKI ezt az öt fogalmat képes egyesíteni? A PKI egy olyan matematikai és logikai technológiára épül, mely biztosítja azt, hogy egy nyílt hálózatban egyértelműen azonosítani lehessen bárkit. Elmondható, hogy a fenti öt fogalom egységesen garantálható bármilyen nyílt hálózatban, ha feltétel nélkül garantálható bármely fél “személyazonossága”.
Fontos tisztázni, hogy mit is jelent egy nyílt hálózaton a személyazonosság garantálása. Ez a folyamat sokkal bonyolultabb annál, mint amilyennek első látásra tűnhet. Az olyan nyílt hálózatok, mint amilyen az internet is, akár több évtized alatt kialakult, folyamatosan fejlődő rendszerek egymásra épülésének tekinthetők, és e rendszerek közel sem a fenti öt fogalom szempontjait figyelembe véve nyerték el végső formájukat. Részben ennek, részben az internetet alapvetően jellemző szabadságnak, szabadosságnak köszönhetően nem nehéz elérni a tökéletes anonimitást a világhálón. Az anonimitás meglétének vagy az identifikáció meghamisíthatóságának ténye azonban egyértelműen kizárja a hozzáférés-kontroll, a hitelesítés, a letagadhatatlanság, az integritás és a bizalmasság meglétét. E szempontok együttese készteti a megoldásszállítókat arra, hogy minél tökéletesebb azonosítási módszereket dolgozzanak ki.
Mindenki számára egyértelmű, hogy a tudásalapú azonosítás nem tökéletes védelem, hiszen azt, amit én tudok, más is tudhatja, és ha még eltekintünk is az emberi esendőségtől, akkor sem garantálható, hogy a kizárólag általam ismert információt más nem tudja lehallgatni. Éppen ezért ha nem tudom biztosítani, hogy csak az ismerjen egy azonosítót, akinek ismernie kell, akkor a letagadhatatlanságot sem tudom garantálni. Mindezek miatt a tudásalapú azonosítások még komoly szabályozás mellett sem elégségesek akkor, ha nyílt hálózatokon keresztül történik az azonosítás.
A következő azonosítási szint az, “amit birtoklok”. A birtokomban lévő eszközök, megoldások, melyek kizárólag az én tulajdonomban vannak, egy jóval magasabb biztonsági szintet nyújtó védelmet képeznek. E védelem azonban nyílt hálózatokon keresztül nem feltétlenül nyújt magasabb szintű védelmet, hiszen a “birtokomban” lévő eszköz csak az emberi hibáktól mentesít — vagy azoktól sem, hiszen láthattunk már bankkártyákat, melyekre rá volt írva alkoholos filccel a pin kód. Még mindig problémát jelenthet a közvetítő csatornák nyíltsága, hiszen hiába létezik egy olyan tökéletes tárolóeszköz, mely biztosítja, hogy én azonosítsam magam, ha az azonosítóm lehallgatható.
Erre a problémára nyújthatnak megoldást a challenge-response elven működő eszközök. Itt az a működési elv, hogy mind szerveroldalon, mind a kliens oldalán létezik egy olyan eszköz, melybe azonos paramétereket tápláltak és azonos matematikai műveleteket programoztak. Ezeknek a paramétereknek együttese lehetőséget ad arra, hogy a szerver által generált “kulcs”-ból a kliens generáljon egy választ. A szerver elvégezve ugyanazokat a számításokat megkapja ugyanazt a végeredményt, ami igazolja, hogy a kliensoldalon biztosan ugyanazt az azonosító eszközt alkalmazzák. Olyan egyéb védelmi megoldások bevonása a challenge-response folyamatba, mint amilyen az idő és a személyi azonosítók, tökéletesen lehetetlenné teszi a hálózati adatforgalmak reprodukálását.
Látható, hogy a challenge-response elven működő azonosítási modellek szinte tökéletes azonosítást tudnak nyújtani, melyet még hálózati lehallgatás esetén sem lehet jogosulatlanul reprodukálni. Ezzel megtettük az első lépést a nyílt hálózaton keresztüli bizalmas adatkommunikációban, hiszen garantálni tudjuk, hogy az a személy, aki a kommunikációs csatorna másik oldalán található, garantáltan az a személy, akinek állítja magát. A PKI által összefogott öt támponttal szembesítve a challenge-response a következőképpen írható le:
- Hozzáférés garantált — hiszen tudjuk, ki van a kapcsolat másik végén, így a személyhez jogosultságokat rendelhetünk, melyeket ilyen módon nem lehet megkerülni.
- Hitelesítés garantált — hiszen épp ez a lényege a módszernek.
- Letagadhatatlanság részben garantált — a challange-response nem feltétlenül ad erre lehetőséget.
- Integritás nem garantált — hiszen az autentikációs fázis után már nem kerül további kontroll alá a kapcsolat.
- Bizalmasság nem garantált — erre a fenti két pont egyértelmű választ ad.
Látható, hogy a challenge-response alapú azonosítások valóban segítenek a problémáinkon, de nem oldják meg tökéletesen azokat. Számos olyan gyakorlati megoldás létezik, mely a challenge-response módot kombinálja egyéb titkosítási módszerekkel. Itt a kombináció integritásától függően a megoldás lehet tökéletes és lehet kevésbé tökéletes. Ezek a megoldások azonban magukban hordozzák az öszvér tipikus hibáit. A végeredmény nehezen integrálható, nem flexibilis, és rendszerint a titkosítás és a hitelesítés között nincs kapcsolat. Így azok nem feltétlenül erősítik egymást.Léteznek tökéletes megoldások a titkosításra, kereskedelmi forgalomban is kaphatók olyan ún. HSM (Hardware Secure Modul — olyan hardveres eszközök, melyek önállóan képesek titkosításokkal kapcsolatos műveletek elvégzésére) eszközök, melyekhez a közismert algoritmusok mellett szabadon készíthetők további algoritmusok. Az ilyen titkosító modulokkal és megoldásokkal még mindig fennáll azonban az a tipikus probléma, mely minden privát kulcsú titkosításnak a közös problémája. Mielőtt ezt a problémát kifejtenénk, nézzük, mi is a privát kulcsú titkosítás.
A módszert más néven szimmetrikus kriptográfiának is nevezik. Ennek lényege az, hogy mind a titkosításhoz, mind a titkosított adat visszafejtéséhez ugyanazt a kulcsot kell használni. A legelterjedtebb szimmetrikus titkosítási módszerek a következők: DES, 3DES, BLOWFISH, IDEA. Mivel a titkosításhoz és a visszafejtéshez is ugyanazt a kulcsot kell használnunk, mindenféleképpen problémát jelent, hogy miként küldjük el ezt a kulcsot a másik félnek olyan módon, hogy azt a nyílt hálózaton ne lehessen lehallgatni. Erre a problémára a szimmetrikus kriptográfia nem ad megoldást. A szimmetrikus kriptográfia ezirányú hiányossága egyértelmű utat nyit egy teljesen más elven működő titkosítási és hitelesítési procedúrának, mely nemcsak biztonságosan oldja meg mindkettőt, de a kettő között is elválaszthatatlan kohéziót képez. Ezt a megoldást képviseli a publikus kulcsú infrastruktúra.
A publikus kulcsú infrastruktúra esetében a szabályok és a keretek meglehetősen dinamikusak ahhoz, hogy bármikor utat engedjenek az újdonságoknak. Mindenesetre az elmondható, hogy a PKI alapja egyértelműen a publikus kulcsú algoritmusok megalkotása és használata. Ezek megjelenése a 70-es évekre datálható, és a 80-as évek végétől rohamos fejlődésen mentek keresztül. Képbe került a publikus kulcsok személyekhez kapcsolása, aminek végeredménye a tanúsítvány lett. Ezt követték az egyre bonyolultabb tanúsítványmodellek, egyre bonyolultabb adminisztrációs megoldások, a biztonság legszélsőségesebb faktorainak kiaknázása. A PKI lassan belopakodott hétköznapi életünkbe. A legegyszerűbb PKI-implementációkkal szinte bizonyosan találkoztunk már mindannyian: ezek egyike az SSL. Az SSL egy teljes értékű publikus kulcsú hitelesítést és titkosítást megoldó adatcsatorna, mely a sebesség növelése érdekében a tényleges adatforgalmat privát kulcsú titkosítással oldja meg, melyhez a privát kulcsot publikus kulcsú titkosításon (többnyire RSA) keresztül cserélik ki a kliensek. A másik hasonló működési elvű populáris alkalmazás az SSH, melyen keresztül távoli rendszerek adminisztrálása oldható meg.
A működési elv megértéséhez először a szimmetrikus (privát) és aszimmetrikus (publikus) algoritmusok működését kell megérteni. Ha valamilyen adatot titkosítani szeretnénk, akkor szükségünk van egy algoritmusra és egy kulcsra, melyekkel letitkosítjuk azt. Ez a módszer a szimmetrikus kriptográfia, melyet más néven privát kulcsú kriptográfiának is nevezünk. Ebben az esetben a gond az, hogy a fogadó fél számára valamilyen módon el kell juttatni a titkosító kulcsot, ami nem minden esetben oldható meg biztonságosan. Ennél lényegesen biztonságosabb módszer az, amit a publikus kulcsú kriptográfia nyújt. Ennek az a lényege, hogy minden félnek van egy privát és egy publikus kulcsa. A privát kulcs soha nem kerül ki birtokosa tulajdonából, míg a publikus (nevéhez híven) nyilvános, azaz bárki elérheti. A két kulcs között matematikai összefüggés van, emiatt a privát kulcs segítségével elkészített adat/digitális aláírás a publikus kulccsal leellenőrizhető — azaz hitelessége garantálható –, de nem reprodukálható. A küldő privát kulcsa és a fogadó fél publikus kulcsa által titkosított adat csak a küldő fél privát kulcsának segítségével fejthető vissza.
Amikor valaki készít magának olyan privát és publikus kulcsot, melyet publikus kulcsú infrastruktúrában szeretne használni, akkor valójában generáltat a számítógépével 2 nagyon nagy prímszámot. Ez a két prímszám együttesen a privát kulcs, és a két prímszám szorzata a publikus kulcs. Ha a privát kulcsot képező számok nem prímszámok lennének, akkor a szorzatból keletkező szám (mely maga a publikus kulcs) más számok szorzatából is képezhető lenne, így a publikus kulcs nemcsak a privát kulcs tagjaira, hanem sokkal több szorzatra bontható lenne. Ez pedig azt jelentené, hogy könnyebb lenne a visszafejtése. Éppen ezért fontos, hogy a privát kulcsot képező két szám prímszám legyen. A titkosítás erősségét úgy lehet garantálni, hogy minél nagyobb prímszámokat generálunk.
Viszont a manapság használt személyi számítógépek ekkora számoknál már nem tudják feltétlenül garantálni, hogy a kapott számok valóban prímek, hiszen a szorzatokra bontás akkora időt venne igénybe, mely már használhatatlanságot eredményezne. Éppen ezért közelítő megoldásokat alkalmaznak, melyek nem igazi prímeket, hanem álprímeket eredményeznek.
Az RSA matematikai háttere
A tényleges matematikai háttér bemutatásához nézzük meg, miként dolgozik az RSA (Ron Rivest, Adi Shamir, Leonard Adleman) algoritmus. Vegyünk két nagy prímszámot, melyek legyenek p és q. Vegyük a két szám szorzatát: n = p * q. Keressünk egy számot (e), mely kisebb, mint n és relatív prím (p-1)(q-1)-hez. Keressünk még egy számot, (d), hogy az e*d-1 osztható legyen (p-1)(q-1)-gyel. Az e lesz a nyilvános, a d pedig a titkos kitevő. A publikus kulcsot az (n,e) páros, a titkosat pedig az (n,d) páros alkotja. A p-t és q-t innentől akár el is lehet felejteni, vagy a titkos kulccsal lehet tárolni. Az (n,e) párból jelenleg elég bonyolult visszafejteni a titkos kulcsot — ez adja annak biztonságát. Ha viszont valaki ki tudja számolni az n-ből p-t és q-t, akkor a fenti műveletek segítségével kiszámolhatja a titkos kulcsot. A prímtényezők felbontására pillanatnyilag nem áll rendelkezésre hatékony algoritmus, de még azt sem tudták bizonyítani, hogy ilyen algoritmus nem létezhet.
Feltörhető az RSA ?
Amint az látható, az RSA titkosítás feltörhetősége egyetlen matematikai műveleten múlik, mely a hatékony prímtényezőkre bontás. Erre jelen pillanatban nincs hatékony megoldás. Az RSA titkosítást kidolgozó csapat 1979-ben kiirt egy pénzdíjas versenyt, melynek célja az RSA kulccsal titkosított szöveg visszafejtése volt. A csapat azt várta, hogy beigazolódik állításuk, miszerint belátható időn belül nem lehet feltörni a szöveget. Ennek ellenére 1994-ben sikerült feltörni egy nyolchónapos projekt keretében felépített, közel 600 számítógépből álló rendszeren. A gépeken egy faktorizációt elvégző program futott. Ez volt az első eset, hogy egy RSA módszerrel titkosított szöveget feltörtek. Ahhoz, hogy az RSA algoritmust hatékonyan — és biztonságosan — lehessen használni, nagyon oda kell figyelni a paraméterek megválasztására. Fontos, hogy a p és q számok között nagy legyen a különbség, a p-1, p+1, q-1, q+1 számoknak csak nagy prímosztói legyenek.
Az RSA nem feltörhető, hanem az IFP probléma megoldható. Már most is, bármikor, bárkinek. Igaz, hogy exponenciális bonyolultságú az algoritmus, ahol a kitevő a biterősség (jelenleg 2048 bit a minimum).
Tehát nem csak elviekben, hanem gyakorlatban is akármikor kompromitálni lehet az RSA-ra épülő sémákat (titkosítás, aláírás, kulcscsere). Az RSA “látszólagos” biztonságát az adja, hogy teljes kimerítő próbálkozások (vagy subexponenciális algoritmusok) futási ideje/energiája óriási és nincs arányban a séma feltörésével nyerhető előnyökkel.
De bármikor rá lehet hibázni, akár elsőre meg lehet oldani az RSA IFP problémát, így tehát “törhető”.
Bármikor alkalmas lehet kvantum-számítógép, bio-számítógép (DNS), vagy a közösségi számítási kapacitás arra, hogy elérhető ideig tartson egy RSA számítás.
Hamis illúzió tehát IFP, DLP, ECDLP problémákra épülő rendszereket feltörhetetlennek nevezni. És ilyenekre épül minden…
Igazából nem is a cikk sugallta a feltörhetetlenséget, hanem az általános közbizalom az RSA-val kapcsolatban.
Nyilván kell használni a PKI infrastruktúrát, de számos ponton van benne sérülékeny rész (hash ütközés, matek probléma megoldása, tanúsítvány CRL és lánc kezelés).
Szóval senki ne csodálkozzon azon, hogy gyakorlatban lehet (nem lehetetlen) készíteni olyan preparált tranzakciót, amelyet simán elfogad egy pénzügyi rendszer. Mert jó a hash érték (pedig kompromitálva lett és más az üzenet), jó az aláírás (pedig kompromitálva lett, mert meglett a privát kulcs), jó a lánc (pedig kompromitálva lett a CA aláírás), stb.
Akinek esetleg sikerül ezt megoldania, az egy jól működő pénzügyi rendszerbe bele tud csempészni saját tranzakciókat. Mint egy IDDQD.
Valóban. Pont ezekre gondoltam akkor amikor az 15 évvel ezelőtti önmagam naivitására utaltam a cikk kapcsán. A Bitcoin kapcsán egyébként az egyszeri ráhibázás kevés. Valóban megvan annak a matematikai valószínűsége, hogy ráhibázz egy bitcoin address (publikus kulcs) kapcsán annak a privát kulcsára. Azonban a ma keletkező privát kulcsok nagy része már BIP38-cal készül, ami miatt nem elég eltalálni az addresshez tartozó privát kulcsot, ahhoz kell tudni még a passphase-t is. Egyszer még lehet szerencsés ennyire, de kétszer biztosan nem.
Lehet, hogy hülyeség, de szerintem a kétszeres szerencse itt nem állja meg a helyét, hiszen ha egyszer igen nagy szerencséje van, akkor a publikus kulcsból rájöhet a privát kulcsra, és ez elegendő is, hiszen a BIP38 csak a privátkulcs tárolásában segít a passphrase-es titkosítással, de a tranzakció kezdeményezésre a titkosítatlan privátkulccsal van lehetőség.
A BIP38 titkosítja a privát kulcsot (a passphrase-el) és úgy tárolja a Walletnél. Felhasználás előtt pedig visszafejti (a passphrase-el).
Ez inkább a privát kulcs tárolását (Walletet) védi. Ha jól értettem a BIP38 leírását.
Lehet én tudom rosszul, de szerintem a dupla szerencse megáll. Ugyanis az UTXO-k valójában NEM a privát kulcshoz vannak kötve, hanem a publikus kulcshoz, akarom mondani addressekhez.
Tehát hiába szerzed meg valakinek a privát kulcsát, abból ugyanis minden passphase másik addresst generál.