Plokiahel, Bitcoin, makselahendused
Plokiahel ja selle rakendused
Plokiahel (blockchain) on andmestruktuur, mis koosneb omavahel seotud järjestikustest andmeplokkidest. Andmeplokkide sisu koosneb kirjetest ja sõltub konkreetse plokiahela rakendusest. Kõige populaarsem plokiahela rakendus on krüptoraha (cryptocurrency), kus andmeplokid sisaldavad kõikide süsteemi kuuluvate osapoolte kontoseise ja/või allkirjastatud tehinguid. Selliselt esitatud plokiahel kujutab endast (tavaliselt hajusat) kirjete arvestusraamatut (ledger).
Plokiahela tervikluse tagamiseks sisaldab iga plokk ka eelmise ploki räsi, mis teeb plokiahela seisu tagantjärele muutmise (plokkide lisamise või eemaldamise) keeruliseks. Nende räside enda kaitseks kasutatakse üht järgnevatest võimalustest:
- räsitud ajatembeldus: räside perioodiline publitseerimine (näiteks ajalehes)
- andmeplokkide digitaalallkirjastamine usaldatud osapoolte poolt
- andmeplokkide struktuurile rakendatud reeglid, mille täitmist on lihtne kontrollida, aga mis teevad andmeplokkide koostamise arvutuslikult keeruliseks ja seega ja raskelt muudetavaks.
Plokiahela süsteemis on põhilisteks osapoolteks kasutajad, kes lisavad arvestusraamatusse kirjeid ja halduritest, kes nende kirjete põhjal uusi plokke moodustavad (üks andmeplokk võib sisaldada mitut kirjet) ja plokkide vastavust reeglitele kontrollivad. Vastavalt haldurite struktuurile on plokiahelasüsteemid kas:
- tsentraalsed teenused, kus arvestausraamatut haldab üks konkreetne osapool,
- loalised hajusraamatud (permissioned ledgers), kus halduriteks on kindlaks määratud hulk osapooli või
- loatud hajusraamatud (permissionless ledgers), kus halduriks võib hakata igaüks.
Bitcoin
Bitcoin on 2009. aastal Satoshi Nakamoto poolt algatatud detsentraliseeritud krüptoraha ja maksesüsteem, kus kõik tehingud on avalikud. Tehingud pannakse kirja avalikku hajusalt loodud arvestusraamatusse (ledger). See sisaldab kõiki tehinguid ning seega määrab kindlaks kui palju bitcoine kuulub erinevatele osapooltele. See info on avalik, mistõttu võib igaüks tehingute ajalugu uurida ning otsida üles nn. kontoseisud.
Samas pole ainult arvestusraamatus oleva info põhjal võimalik bitcoinide omanikke tuvastada, sest kasutusel on krüptograafiliselt määratud pseudonüümid (kasutajate avalikud võtmed). Samuti on oluline mõista, et bitcoinide omanikud ei oma füüsilisi münte ega ka digitaalseid münte, vaid omavad krüptograafilist tõestusmaterjali selle kohta, et arvestusraamatusse kirjutatud bitcoinid kuuluvad tõesti neile. Tõendusmaterjali loomiseks kasutatakse räsimist ja digiallkirjastamist.
Nüüd üritame üldistatud kujul kirjeldada kuidas toimuvad Bitcoin ülekanded. Igal Bitcoini süsteemis osaleval kasutajal on olemas vähemalt üks võtmepaar, mis koosneb avalikust võtmest ja salajasest võtmest. Avalikust võtmest tuletatakse osapoole pseudonüüm ehk aadress ja salajase võtme abil saab sooritada tehinguid ehk bitcoine teistele aadressitele saata. Tehingut sooritades kasutab saatja enda salajast võtit, et digiallkirjastada sõnum, mis ütleb, et vastava aadressiga osapool saab õiguse tehingu käigus saadetud bitcoine kasutada. Kui tehing läheb läbi, siis saab nn. ülekande vastuvõtja omakorda kasutada enda salajast võtit, et neid bitcoine kulutada ehk edasi saata.
Kasutajad saadavad oma allkirjastatud tehingud kinnitamiseks plokiahela halduritele. Bitcoini tehingute kinnitamine ehk uue ploki lisamine on arvutuslikult keerukaks operatsioon, mille käigus otsitakse nõutud omadustega räsifunktsiooni väljundi leidmist -- haldur peab andmeploki osaks olevat juhuslikku arvu muutma nii, et ploki SHA-256 räsi esimesed n bitti oleks nullid. Kuna sobiva väärtuse leidmiseks pole efektiivset algoritmi, siis üritatakse sobivaid väärtuseid suure arvutusjõudluse kulu hinnaga üles leida, proovides erinevaid juhuslikke arve. Seda protsessi nimetatakse kaevandamiseks, sest sobiva väärtuse leidja saab tasuks kindla hulga bitcoine. Lisaks saab sobiva väärtuse leidja endale ka ülekandetasu(d). Kusjuures, Bitcoini plokiahel on üles ehitatud nii, et kaevandamisest saadav auhind muutub iga 4 aasta järel poole väiksemaks (hetkel on see 12,5 bitcoini). Kui Bitcoini algusaegadel oli kaevandamine võimalik ka tavaarvuti ja graafikakaardi abil, siis tänapäeval on see muutunud nii keerukaks, et selleks tuleks osta spetsiifilist kaevandamise riistvara. Seetõttu tehakse kaevandamisel koostööd (mining pools) ning auhind jagatakse osalenud osapoolte vahel.
Bitcoini süsteemi on sisse ehitatud deflatsioon, kuna disaini kohaselt on saab eksisteerida maksimaalseks 21 miljonit bitcoini. Samuti muutub kaevandamine järjest keerukamaks, sest mida rohkem on kaevandajaid, seda keerukamaks muudetakse sobiva väärtuse leidmine. Seetõttu ei ole Bitcoini abil enam võimalik kiiresti ja odavalt tehinguid sooritada. Tehingu kinnitamisele kulub keskmiselt üks tund ja tehingukulu oli näiteks 2017 aasta detsembris üle kümne dollari. Lisaks on probleemiks kaevandusvõimsuse koondumine Hiinasse, sest Bitcoini protokoll on turvaline senikaua kuniks ükski osapool ei kontrolli üle 50% arvutusvõimsusest. Kui seda tingimust rikutakse, siis on ründajal võimalik Bitcoini arvestusraamatusse tagantjärele muudatusi teha (küll väga suure arvutusvõimsuse hinnaga).
Antud ülevaade on esitatud lihtsustatud kujul. Süsteemi täpsemaks mõistmiseks tuleks lugeda Bitcoini protokolli kirjeldust.
Bitcoin ja rahapesu
Kuna Bitcoin ei ole disainitud anonüümsete tehingute sooritamiseks, siis peavad kurjategijad Bitcoine kasutades nendelt kuritegelikud jäljed eemaldama ehk siis raha puhtaks pesema. Selleks kasutatakse bitcoinide miksimise teenuseid. Vastavad teenusepakkujad võtavad vastu bitcoine, segavad need ära ning saadavad samas vääringus juhuslikke bitcoine soovitud kontodele. Teenusepakkujad võtavad vahendamise eest enamasti paar protsenti teenustasu. Tegelikult võivad tehingute jälgi peita ka enda privaatsust kaitsvad inimesed ning seega ei saa automaatselt eeldada, et vastavat teenust kasutavad ainult kurjategijad.
Kurjategijatele on varasemalt Bitcoin meeldinud, sest süsteem võimaldas automatiseerida uute kontode loomist ning rahapesu. Seega said küberkurjategijad luua dünaamiliselt uusi Bitcoini kontosid, kuhu lunavara ohvrid pidid lunavara kandma. Ajutised kontod sai automaatselt tühjendada ning bitcoinid miksimisteenuste abil puhtaks pesta.
Praeguseks on Bitcoini süsteemis tõusnud nii ülekandetasud kui ka julgeolekuorganite poolne tähelepanu (rünnates miksimisteenust saab kurjategijad deanonümiseerida). Seetõttu on osad küberkujategijad hakanud kasutama alternatiivseid krüptorahasid, kuhu on anonüümsus algusest peale sisse ehitatud.
Ethereum
Ethereum on 2015. aastal alustanud plokiahel, mille autoriks on Vitalik Buterin. Ethereum plokiahelas kasutatavaks valuutaks on ether. Oma olemuselt on Ethereum plokiahel väga sarnane Bitcoinile, kuid sisaldab ka märkimisväärseid erinevusi. Näiteks põhineb uute plokkide kaevandamine ethash räsifunktsiooni murdmisel, mis omakorda sisemiselt kasutab Keccak (SHA-3) räsifunktsiooni. Ethash on üles ehitatud nii, et seda oleks spetsiaalse riistvaraga raske kiirendada (nõuab palju kiiret mälu) -- probleem, mida Bitcoinile on ette heidetud.
Kui uute plokkide lisamisel on kasutusel arvutusmahukas süsteem, näiteks mingi räsifunktsiooni murdmine, siis nimetatakse seda töötõenduseks (proof of work). Töötõenduse suureks puuduseks on asjaolu, et see raiskab väga palju energiat. Seetõttu on osad plokiahelad kasutusele võtnud alternatiivse plokkide lisamise süsteemi: panusetõendus (proof of stake). Näiteks Ethereum plaanib töötõenduselt üle liikuda panusetõendusprotokollile Casper.
Panusetõenduse puhul teevad arvestusraamatu haldurid uue ploki lisamise õiguse saamiseks panuse oma olemasoleva krüptorahaga. Et vältida kõige rikkama halduri monopoli, antakse uue ploki lisamise õigus näiteks loterii käigus, kus iga halduri võiduvõimalus on proportsionaalne tema panusega. Haldur, kes saab õiguse plokk lisada, allkirjastab selle lihtsalt oma salajase võtmega ning saab endale uue ploki lisamise auhinna ning ülekandetasud, nagu ka kaevandamise puhul.
Lepingumonitorid
Mõned plokiahelad võimaldavad koostada lepingumonitore (nutileping, smart contract), st plokiahelasse automatiseeritud tegevusi programmeerida. Kõige lihtsamal kujul on lepingumonitorid tingimus -> tegevus tüüpi eeskirjad, kus tingimus on midagi, mida arvestusraamatu haldurid saavad plokki lisaded kontrollida (näiteks makse laekumine mingile kontole) ning tegevus on midagi, mida haldurid saavad plokiahelas teha (näiteks ülekanne mingile kontole). Sellisel kujul lepingumonitorid on üheselt mõistetavad eeskirjad (lepingud), mille täitmine on hajusalt tagatud. Ethereumi plokiahelas on lepingumonitoride programmeerimiseks keel Solidity.
Lepingumonitoride programmeerimisel tuleb olla eriti hoolikas, sest kord kehtestatud lepingumonitori hiljem enam muuta ei saa (kui selle muutmise võimekus pole just lepingumonitori sisse programmeeritud). Vigase lepingumonitori muutmine või kustutamine tähendaks plokiahela "tagasi kerimist", mis nõuab aga haldurite konsensust. Tuntumad vigased lepingumonitorid on The DAO ja Parity tarkvaras tuvastatud viga.
Pankade poolt kasutatud maksesüsteemid
Deebetkaart
Wikipediast pärinev deebetkaardi näide:
- Kaardi väljastanud panga logo
- Kiip (vaid osadel kaartidel)
- hologramm (võib olla tagumisel küljel)
- kaardinumber
- kaardi tüüp / bränd
- aegumise tähtaeg
- kaardiomaniku nimi
Deebetkaart (ehk tavaline pangakaart) võimaldab kaardiomanikul kasutada enda pangakontol olevat raha. Paljudes riikides on deebetkaartidele lisatud kiibid, mis tõstavad oluliselt kaartide turvataset. Kiibi sees on krüptovõti, mida saab kasutada vaid koos õige PIN koodiga. Ainult magnetribaga kaardid on siiani levinud USA-s ning mõnedes Lõuna-Ameerikas ja Aasias asuvates riikides.
Varasemalt tuli deebetkaartidega maksmiseks kasutada kaardi tagaküljel olevat magnetriba ning isiku tuvastamiseks andis maksja tšekile allkirja. Nüüd tuvastatakse Euroopas kaardiomanikku PIN koodi abil. Pangad eeldavad, et ainult kaardiomanik teab PIN koodi ning seega teised kaarti kasutada ei saa (vähemalt nendes makseterminalides, mis on ehitatud kiibiga kaartide jaoks).
Lisaks oli magnetribaga kaartide puhul suureks probleemiks kaartide kopeerimine. Kuna magnetribal oleva info kopeerimine on lihtne, siis ei tohiks magnetribaga kaarte maksmisel silmist lasta. Isegi kui kaardil on olemas kiip, siis on endiselt võimalik kopeerida magnetribal olevat infot. Nüüd võib tekkida küsimus, et miks on kiipi omavatel kaartidel vaja ka magnetriba. Üheks põhjuseks on ühilduvuse tagamine makseterminalidega ja pangaautomaatidega, mis ei ole loodud kiipi kasutama. Lisaks sellele nõuavad ka osad uuemad pangaautomaadid, et kaardil oleks loetav magnetiriba. Teine argument võib olla seotud käideldavusega - juhul kui kiip enam ei toimi, siis on võimalik, et makseterminalides saab magnetriba kasutada.
Selleks, et kopeeritud kaardi abil saaks raha välja võtta tuleb kopeerida ka PIN kood. Kaartide kopeerimiseks mõeldud seadmeid nimetatakse skimmeriteks ning need lisatakse enamasti pangaautomaatide külge. Hea ründe korral on skimmerit raske märgata, sest see on ilusti sulandatud pangaautomaadi külge. Tihti on lisaks kaardi kopeerijale lisatud pangaautomaadi külge ka väike kaamera, mis salvestab sisestatud PIN koodi. Kui teid antud teema huvitab, siis soovitame jälgida Brian Krebs'i blogi, kus ta antud teemat üpris sageli käsitleb.
Piltidel kuvatakse skimmeriga varustatud pangaautomaati. Allikas: Brian Krebs'i blogipostitus
Deebet pluss
Deebet pluss kaart on deebetkaart, millel on piiratud krediitkaardi võimekus. Niisuguse kaardiga saab teha internetis makseid. Protsess on analoogne krediitkaardi kastuamisele: sisestada tuleb enda nimi (mõnikord ka aadress), kaardinumber, aegumise tähtaeg ning kaardi tagumisel küljel olev turvakood.
Erinevalt krediitkaardist tehakse deebet pluss kaardi abil sooritatud tehingud kaardiomaniku rahaga (krediitkaardi korral tehakse tehingud krediiti kasutades ehk siis panga rahaga). See on kliendi turvalisuse jaoks pigem negatiivne, sest kui kaardinumber koos turvakoodiga lekib, siis saab ründaja kasutada kaardiomaniku raha. Niisugused lekked on pigem tavalised, sest paljud veebipoed ei oska krediitkaardiandmeid hallata või siis turvalisusesse piisavalt investeerida. Juhul kui satute vastava ründe ohvriks, siis tuleb tehingud pangas vaidlustada ning kui tagasinõue kiidetakse heaks, siis saab raha paari kuu jooksul tagasi. Krediitkaarti kasutades peaks tehingu vaidlustamise protsess olema oluliselt lihtsam.
Krediitkaart
Krediitkaart võimaldab kliendil kasutada talle panga poolt antud krediiti. Tänapäeval on krediitkaart või sarnase funktsionaalsusega kaart vajalik näiteks selleks, et teha internetis tehinguid, broneerida hotelle ning rentida reisil olles autot.
Krediitkaarti kasutades tuleb varjata kaardinumbrit ning tagumisel poolel olevat turvakoodi. Juhul kui vastav info lekib, siis on võimalik vastavat krediitkaarti kasutada internetis maksete sooritamiseks. Eriti oluline on kaardinumbri varjamine internetti kasutades, sest piisab ühest halva turvatasemega veebilehest, et teie krediitkaardi info lekiks. Küberkurjategijad, kes kaardinumbreid kopeerivad enamasti neid ise ei kasuta, sest see nõuaks vastava rahapesu. Seetõttu müüvad küberkurjategijad pigem kogutud info edasi nendele osapooltele, kes on vastavast infost huvitatud.
Turvalisus
- Ärge sisestage krediitkaardi numbrit HTTP-d kasutavale lehele.
- Ärge sisestage krediitkaardi andmeid lehele, mida te ei usalda.
- Võimaluse korral vältige krediitkaardi kasutamist väikestes veebipoodides. Küsige endalt kas vastav teenusepakkuja suudab turvalisusest aru saada ning krediitkaartide kohta käivaid andmeid turvaliselt töödelda.
- Kui te ei usalda teenusepakkujat, siis kasutage võimaluse korral alternatiivset makseteenust. Kui alternatiivi ei leidu, siis kasutage võimaluse korral virtuaalset krediitkaarti.
- Ärge tehke enda krediitkaardist pilti ning ärge postitage seda sotsiaalmeediasse :)
(proovige googeldada, seda reaalselt tehakse)
Viipekaart ehk NFC kaart
Lähiväljasidet ehk NFC (near field communication) toetavad kaardid ning makseterminalid võimaldavad sooritada tehinguid ilma, et kaart füüsiliselt makseterminali puutuks. NFC terminalid on aktiivsed osapooled, kes võimaldavad NFC kaardis oleva antenniga juhtmevabalt sõnumeid vahetada.
Kuna NFC kaarte saab kasutada ilma PIN koodi sisestamata, siis on pangad seadnud limiidid vastava tehnoloogia abil maksete sooritamiseks. Suuremate tehingute korral on endiselt vaja sisestada PIN kood. Samas kui keegi varastab teie (aktiveeritud) NFC kaardi, siis saab ta seda kasutada väikeste maksete sooritamiseks ilma teie PIN koodi teadmata. Teoorias on võimalik ka see, et keegi võtab tipptunnil bussi kaasa kaasaskantava makseterminali ning üritab teie taskus olevalt kaardilt raha kätte saada.