Architektúra systému Viditeľných Peňazí(VP) – prvý transparentný bankový systém istený blockchainom časť 1

Posted by

English version

Sú to presne tri roky, čo som na svojom blogu publikoval článok o tom, ako by inovácie zo sveta kryptomien mohli priniesť zásadnú zmenu v tom, ako sa k sebe ľudia správajú. V skratke ide o to, že ak by v spoločnosti aj súkromné peniaze ľudí a ich majetky boli do určitej miery transparentné, postupne by to pravdepodobne viedlo k riešeniu veľkej väčšiny problémov, ktoré vyplývajú z odvekého medziľudského boja o zdroje.

V dnešnom článku by som sa chcel povenovať architektúre systému, ktorý by plnil požiadavky na celospoločenský zúčtovací transparentný systém, ktorý pomaly vyvíjam. Na úvod bude potrebné malé technické okienko do sveta kryptomien.

Hashovací algoritmus ako kľúč k dodaniu dôkazu, že určité veci sú práve tak ako máte niekde zaznamenané a s vysokou mierou istoty nijak inak

V IT svete a hlavne v oblasti kryptomien, je kľúčovým pojmom tzv. hashovací algoritmus. Jeho najčastejšie používaná verzia – tzv. SHA256 je algoritmus, ktorému dáte na vstup nejaký krátky text alebo hoci aj niekoľko terabajtový súbor a on Vám k tomuto vstupu vygeneruje 64 znakov dlhý reťazec znakov, ktorý vyzerá nasledovne:

Hash SHA256 k textu „Peter“ je napríklad takáto hodnota:

ea72c79594296e45b8c2a296644d988581f58cfac6601d122ed0a8bd7c02e8bf

Hash SHA256 k textu „Peter1“ je už ale hodnota takáto:

c2a455a6fba64a8aa2dabed5d193a6bd89813376c02ae40b86f56af6473d4323

Ako môžete vidieť tie dve hodnoty ktoré algoritmus vrátil sú úplne od seba rôzne a nijako závislé. Hashovacia funkcia funguje totiž tzv. spôsobom lavíny. Jediný zmenený bit vstupného reťazca spôsobí také dramatické zmeny vo výsledku, že napokon výsledky sú úplne nezávislé napriek tomu že možno vznikli z podobných dát (vstupov). SHA256 je naprieč IT svetom jednotná – teda ktokoľvek Vám povie že vypočítal SHA256 nejakého vstupu, výsledok by mal byť rovnaký i na úplne inom či už operačnom systéme alebo v programovacom jazyku. Pretože postup ktorým sa ide je všade rovnaký.

SHA256 hashovanie má navyše aj tú vlastnosť, že keď niekomu dáte výsledok napríklad onú hodnotu ea72c79594296e45b8c2a296644d988581f58cfac6601d122ed0a8bd7c02e8bf, tak ak tomu človeku nepoviete, že je to hash z hodnoty Peter, nemá to ako zistiť. Jediný spôsob ako to môže zistiť bude, že ak sa spoľahne, že ten Váš vstupný text do hashovacej funkcie nebol príliš dlhý a že ste v ňom použili iba napríklad alfanumerické znaky tak začne skúšať – napríklad začne jedným písmenom „a“, potom k nemu pridá b –„ab“ a na takto vyrobené vstupy zavolá tú SHA256 funkciu a porovná jej výsledok s tým čo ste mu dali. A bude to robiť až kým nenaďabí na postupnosť znakov, ktorá mu dá rovnaký výsledok ako ste mu zadali. Inými slovami ak by ste vypočítali hash k takémuto textu :

{

“account_from”:”SK11 1100 0000 0000 2644 5963”,

“account_to”: ”SK15 1100 0000 0000 2677 5968”,

“amount”: 5000,

“currency”:”EUR”

}

(Príklad je kompletne vymyslený vrátane neexistujúcich čísiel účtov)

Čo by bola hodnota : 7b4f22193ad7675da45be8d5e22f042b36cdc78c397f92dd572786dca61b326b a ten človek by chcel napríklad dosiahnuť úpravu toho textu tak, že by zmenil hodnotu čiastky z 5000 na 10000, tak to síce môže urobiť ale veľmi ťažko sa mu podarí upraviť zvyšok tela transakcie tak, aby v ňom bola ním požadovaná čiastka 10000 miesto 5000 a zároveň hash hodnota celkového textu by sa nezmenila. Jednoducho dáta ktorými nakŕmi ten algoritmus budú iné a jemu bude trvať miliardy rokov, kým príde na takú zmenu tela transakcie, aby výsledná hodnota hashovacej funkcie bola rovnaká ako pôvodne a pritom so zmenenou čiastkou ako si želá.

Táto vlastnosť hashovacej funkcie sa používa na to, že ak niekomu dáte nejaký text, ktorý si niekde môže získať(napríklad z nejakej databázy transakcií) a zároveň mu poviete akú hodnotu hashu mal daný text, v dobe keď vznikol, tak on si vie veľmi rýchlo overiť či sa ten text od doby keď ste Vy vypočítali pôvodnú hodnotu hashu zmenil alebo nie. A práve tento akt je braný ako dôkaz, že dáta sa od momentu kedy ste nad nimi vypočítali hash nezmenili.

Blockchain – použitie hashovacej funkcie na stereoidoch

To, čo z blockchainu pokryjem týmto článkom je asi tak 10% z toho čo tento pojem v skutočnosti zahŕňa. Pre potreby vysvetlenia architektúry VP to bude totiž bohate stačiť.

V dobe relatívne krátko po uvedení Bitcoinu, nastal ošial ohľadom Blockchainu. Vznikali firmy, ktoré sa mali špecializovať na využitie blockchainu v rôznych oblastiach IT sveta, konzultanti si do popisu svojich pozícií začali písať prívlastky typu Blockchain specialist atď. Nakoniec sa Blockchain mimo Bitcoinu a krytomien presadil prakticky minimálne. Počul som o nejakých aplikáciách kde je dôležité mať navždy nejakú informáciu uchovanú – napríklad že nejaký pacient bral nejaký liek atď.

O čo teda v blockchaine vlastne ide? Kryptomeny riešia problém peňazí unikátnym spôsobom – mena nežije v nejakom jednom centralizovanom systéme, ktorý by bol niekde lokalizovaný ale žije prakticky kdekoľvek, kde beží hoci i malý server ktorý podporuje jej funkčnosť a je pripojený na internet. Avšak na to, aby ste dosiahli funkčnosť meny bez toho aby ste mali jeden centralizovaný server, musíte mať niečo, čo má každý ten malý počítač kde mena beží rovnaké a aktualizuje sa to s každou transakciou ktorá sa udeje hocikde na inom serveri. Zároveň musíte vedieť riešiť také veci ako keď naraz niekto na dvoch serveroch zadá poslanie nejakej čiastky z toho istého účtu/peňaženky. Do toho ešte vstupuje potreba nejako odmeňovať prevádzkovateľov tých nespočetných malých serverov kde Vaša kryptomena žije a ďalšie veci. Blockchain je práve tá vec, ktorú majú tie malé servery viac alebo menej rovnakú a obsahuje jednotlivé transakcie v kryptomene. Blockchain pozostáva z blokov. Od toho ten názov blockchain – reťaz blokov. Bloky pozostávajú z transakcií ktoré sa v kryptomene udiali. Bloky sa v pravidelných intervaloch uzatvárajú a vznikajú nové, tak ako pribúdajú transakcie. Uzatvorenie bloku okrem iného znamená že vypočítate hash z takéhoto alebo obdobného textu:

{

“previous_block_hash”:”42ca08014a7e842f8205d3979eb14a95c52bf9ffb41c6752efe7bb08114ba47e”,

“transaction1_hash“:“ fe6bc43fff796742bbee6adebec349a38323aed2de40d848aa9ed1428a451942“,

“transaction2_hash“:“ 0965577d9c0f4316cf83d1be017627e0d180cc616ec9107ac497df84a4158f93“,

“transaction3_hash“:“ b5069c628dd914cc5f04035ced89781c0eb8efb27aed068b0921201598244565“,

“transaction900_hash“:“ ffd7236ababd2e21858c548f5a3c5bae1794fde4c358ebfef6dcf4bcf0bb5a05“

}

Hash z plného obsahu tohto bloku obsahujúceho 900 transakcií by bol napríklad hodnota “341cbef34adc7235eee22efde368502f670254b97123fecfcb78ba892e7250b0” Následne by sa táto hodnota použila pri tvorbe ďalšieho bloku do políčka previous_block_hash. Tým sa bloky stanú previazané a tvoria pomyselnú reťaz. Každý blok okrem úplne prvého má políčko previous_block_hash s hodnotou hashu predchodzieho bloku. V prípade úplne prvého bloku v blockchaine sa tam dáva nejaká hodnota typu textu „GenesisBlock“ čo je výraz ktorý charakterizuje povahu nultého bloku – je jedno aká hodnota sa tam dá, bude to mať síce vplyv na všetky nasledujúce hodnoty, algoritmom to bude ale jedno a pre človeka je hash hodnota ako hash hodnota.

Ako hovorím, nebudem v tomto článku rozoberať blockchain do hĺbky, jednak ani mne nie sú nejaké detaily ohľadom fungovania napríklad Bitcoinu úplne jasné a jednak to je pre potreby pochopenia toho čo chcem opísať nepotrebné.

Peniaze v centralizovaných systémoch – typu bankových systémov žijú  v nejakej obrovskej databáze, kde má banka evidovaný napríklad zoznam klientov, potom má tabuľku, ktorá obsahuje účty klientov, pričom každý účet má povedané ktorému klientovi patrí a koľko je na ňom peňazí. Potom je typicky tabuľka transakcií, ktorá obsahuje evidenciu z akého účtu na aký putovali peniaze, suma, mena a ďaľšie.   

Svojho času sa myslím v Prahe uskutočnila konferencia, kde si sadli špičky bankového sveta a dumali nad tým, či blockchain má nejaké využitie v bankovom svete. Výsledok bol, že nie, blockchain je tak špecifická technológia riešiaca síce možno na prvý pohľad podobné problémy ako bankové systémy, no úplne odlišným spôsobom.

Nepodarilo sa im prísť na use-case, ktorý by bol príkladom kde by banka blockchain mohla využiť.

Blockchain v bankovom systéme ? Iba ak potrebujete dosiahnuť dôveru celého sveta

Banky sú však ku svojim klientom vo špecifickom vzťahu. Existuje medzi nimi elementárna dôvera, že keď klient v jeden deň vloží 100eur, ďaľší 200 tak na tretí deň si môže vybrať svojich 300 eur bez problémov späť. Ak by banka zlyhala v takejto jednoduchej operácii s peniazmi svojich klientov, rýchlo by prišla o reputáciu a i o klientov. Klienti bánk sú si teda istí, že banka ich údaje nebude v záujme nestratenia svojej reputácie svojvoľne meniť.

Povaha potrebného riešenia sa ale zmení, keď si predstavíte, že chcete vybudovať globálny bankový systém, ktorý má mať bezpečnosť na takej úrovni, že môže byť bez problémov použitý ako globálny zúčtovací systém celej spoločnosti. Taký systém bude mať zo svojej povahy veľa nepriateľov, zvlášť ak bude do určitej miery transparentný. Transparentnosť súkromných peňazí je totiž koncept, ktorý ako som zistil má veľa nepriateľov a i keby sa vstup do takého systému dial na dobrovoľnej báze, ak by bol úspešný tak jedného dňa by nastala chvíľa, kedy by bol tŕňom v oku ľudí ktorým by rastúca transparentnosť vadila. Takýto systém, ak má byť úspešný potrebuje mať mechanizmy ako dokázať, že dáta v ňom sú naozaj také ako majú byť a nik ich nepomenil v prospech či neprospech kohokoľvek.

A tu je práve moment, kde do problému vstupuje blockchain a poskytuje nástroje ako dosiahnuť, že sa bude dať vysvetliť každá jedna hodnota ktorá je v systéme. Inými slovami, čokoľvek sa v systéme dôležité udeje, musí nejakou formou vojsť do blockchainu.

Každý novo vzniknutý blok v blockchaine musí byť okamžite zo systému vykopírovaný do systému nejakej tretej strany. Zatiaľ som si detailný prieskum nerobil, ale v princípe by to mala byť služba tohoto typu. Teda niečo, kde ja môžem zapísať transakciu, ktorá vojde do blockchainu prevádzkovateľa takéhoto systému a ja nemám možnosť do minulosti dát ktoré som už raz zapísal nijako vstupovať. Dokonca je to technicky vylúčené z povahy systému.

Tým, že všetky transakcie, ktoré v systéme vzniknú budú uložené do blokov, ktoré budú hneď po uzatvorení zapečatené a poslané do systému tretej strany, ktorý má v technickej povahe, že čo raz bolo doňho poslané nemožno meniť, bude možné dosiahnuť takú funkčnosť, že na ktorýkoľvek dôležitý údaj niekto v mojom systéme ukáže prstom – a povie dokáž mi, že táto hodnota nebola zmanipulovaná ale vznikla postupnosťou korektných transakcií, ktoré sa udiali štandardnými cestami spracovania a nie napríklad tak, že niekto sa prihlásil priamo na databázu a ručne zmenil zostatok z hodnoty 5000 na 10000. Ja mu budem vedieť dokázať, že sa manipulácia naozaj nestala, alebo v horšom prípade mi to sedieť nebude a to bude znamenať, že niekto dáta pomenil. V systéme Viditeľných peňazí totiž každý riadok v nejakej dôležitej tabuľke, bude previazaný s transakciou a tým pádom aj blokom, ktorý daný riadok menili. Prípadná kontrola sa bude odohrávať tak, že niekto povie, ktorý kus dát mám dokázať. Jednoduchým príkazom si vylistujem zoznam transakcií ktoré daný údaj nejakým spôsobom menili. Ak aplikujem obsah všetkých transakcií na daný dátový objekt, tak by som mal dostať daný objekt rovnako pomenený ako vyzerá aktuálne.

V ďalšej časti seriálu o architektúre VP vysvetlím ako je potrebné deliť dáta v systéme podľa ich charakteru, ako sa budú rôzne spracovávať, vstupovať do blockchainu a realizovať operácie na zodpovedajúcich biznis objektoch.

Visits: 1360

One comment

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *