Ze zákulisí BTC Ex.cz
V úterý 22. 4. 2014 jsme spustili českou bitcoinovou burzu BTC Ex.cz. Ve vývoji byla poměrně dlouho, ale výsledek celkem stojí za to. Její směr se přitom stihl několikrát změnit.
Prvotním impulsem byl krach burzy Bitcrash. Taková amateřina mě bila do očí, že jsem to nevydržel a během pár dní dal s veeminerem dohromady vlastní koncept. Abychom ukázali, že v bitcoinovém světě jsou i lidé, co mají základní znalosti zabezpečení bitcoinů a bitcoinových služeb.
Druhým impulsem pak byly stížnosti lidí, kteří prodávali bitcoiny například na Localbitcoins.com, že kvůli nějakým podvodníkům jim banka (na pokyn policie) zmrazila účet. Později se v těchto řadách ocitl třeba i František Fuka, ale i některé firmy provozující prodejny-výkupny bitcoinů.
Vždy mě ovládala nechuť někomu sdělovat své osobní údaje, nedejbože posílat naskenovanou občanku. Začali jsme proto s tím, že každý měl na burze akorát unikátní přezdívku, která prostě stačila. Zmíněný sílící druhý impuls nás však donutil to trochu přehodnotit. Nechtěl jsem, aby prodejci byli vydáni napospas podvodníkům. Znám tu bezmoc.
Takže jméno. Hm. Oki. Jenže podvodníci jsou vždycky o krok napřed (s tím sotva něco udělám – kdo chce, pošle sken kradené nebo falšované občanky, tradá!). Systém, který vykrystalizoval, funguje tak, že člověk musí prokázat, že pro nákup použije svůj bankovní účet. Takže pošle aktivační libovolně malou platbu s předurčenou poznámkou. Donutit někoho podvodem poslat 0,01–1,00 Kč se zprávou „aktivace účtu“ nebude snadné. Na to celkem sázím. Pro jistotu se ještě musí zadat speciální poznámka při samotném nákupu.
Obchody se uskutečňují nad bitcoiny v escrow – bez toho by ani platforma neměla žádný smysl. K tomu má každý uživatel svou historii obchodů, za které je hodnocený protistranou.
Na obsluhování korun jsme si zatím ani jeden netroufli. Zůstává tedy u přímého posílání peněz mezi uživateli. Stejně by nám vklady a výběry trvaly zbytečně dlouho – takhle má člověk peníze na účtu hned, když má on i protistrana stejnou banku.
Bitcoiny pro začátek sice moc rychlé nejsou, ale to postupně vylepšíme. Všechny bitcoiny, co kdo vloží na burzu, totiž jsou a vždy budou uloženy bezpečně off-line (adresy se generují ze seedu, takže nemusíme řešit ani žádný pooling, ani přeposílání – uživatelé posílají vklady přímo do cold wallet). Nyní je to vyhrazený počítač, kam dopravím připravené transakce, podepíšu, přepravím zpátky a rozešlu. Už půl roku mám předobjednaných několik Trezorů – jak přijdou, tak se cold wallet přestěhuje tam.
Připravuji semi hot wallet – peněženku na notebooku či mobilu, kde budu mít pár svých mincí a budu z ní posílat výběry tehdy, kdy cold wallet nebude v dosahu. Pak se plánuje plnohodnotná hot wallet, kde budou opět naše vlastní mince, ale půjde již o automatizovaný systém. Na rozdíl od běžných řešení (normální wallet server) ale bude postavená na multisig adresách, kdy první půlku transakce podepíše server a druhou půlku za torem skrytý stroj, který současně provede audit databáze a zkontroluje, že je všechno v pořádku a že nejsou žádná podezřelá chování.
Toto řešení by mělo mnohé útoky bez obav ustát. Pořád tu ale bude webový server obsluhující burzu. Krok číslo nula už je provedený: žádné bitcoiny na serveru. Krokem číslo jedna pak je obezřetné naprogramování celé webové aplikace. Jako bonus nezapomeňme na to, že cracknout lze ledasco, takže by nebylo od věci aplikovat předběžná opatření. Zejména stojí za zmínku šifrování všech podstatných dat (všechny uživatelské řetězce, čísla účtů, výběrové adresy atd.; naopak nedává smysl šifrovat čísla). A to přímo v databázi (takže aplikace si to musí sama dešifrovat). Malou chvíli jsem měl implementovaný algoritmus založený na variaci one-time-pad, ale nakonec jsem ho zavrhl a použil standardní AES.
Musím zmínit jeden moc pěkný zážitek z vývoje. Sem tam se stávalo, že jsme věci přehodnotili a bylo potřeba menší či větší části kódu měnit či vyměňovat (to je celkem normální). Již delší dobu používám při vývoji metodologii TDD a velmi si ji pochvaluji. Díky ní není v kódu milión chyb, na které by se přišlo pečlivým procházením/proklikáváním webu, přepočítáváním čísel, které aplikace dává, kontrolováním všeho možného, a hlavně nezapomenutím na žádný use-case. Ručně prostě nemožná záležitost. Takhle jsme jednoduše vždycky spustili sadu několika set testů a provedla se více než tisícovka kontrol. Prostě paráda. Doporučuji! Rozbít něco je hrozně snadné, ale přijít na to již méně.
Navzdory snahám se celý vývoj poměrně protáhl. Své udělaly i uživatelské crashtesty před ostrým spuštěním. Výsledek je ale adekvátně lepší, než kdybychom spouštěli dříve. I tak musím přiznat, že jsme řadu věcí (prozatím) vypustili. ;c) Po čem bude poptávka, se postupně implementuje, ostatní asi zapadne.
Nyní je potřeba zapracovat na propagaci, aby se web rychle rozjel. :c) Zatím asi nejtěžší část celého projektu…
Doplnění: zdá se, že stávající ochranu lze obejít. Bude proto nutné podstoupit ještě jeden (mnou nenáviděný) krok: vyžadovat identifikaci kupujících. Rozhodli jsme se nechat tam ale prostor i pro malé rychlé nákupy bez ověřování – kupující se bude muset identifikovat při (kumulovaném) nákupu nad 5.000 Kč včetně. Pokud někdo jenom prodává, není samozřejmě nejmenší důvod ho lustrovat – není pro nikoho žádným nebezpečím. (Ano, padělky občanek zřejmě nepoznám, ale to dost často ani banky. A pokud by přeci jen zaklepala nějakému prodejci na dveře policie, budeme mít v ruce alespoň něco, aby ho nechali být.)
Zaškatulkováno v kategoriích: Internet a Projekty | 6. července 2014