Przedmowa
Wszystkie takie systemy korzystają z uruchomionego w tle daemona bitcoind. Aby dostać się do portfela, czyli sprawdzić bilans dla danego konta lub dokonania wypłaty łączymy się do niego za pomocą JSON RPC, które jest na sztywno skonfigurowane w pliku. Już w tym momencie w źródłach bitcoind istnieje możliwość zaszyfrowania bazy danych dowolnym hasłem.
Propozycja
Mój pomysł jest prosty. Zmodyfikować sposób dostępu do usługi za pomocą JSON RPC w następujący sposób:
- nazwa użytkownika definiuje, który plik portfela należy wybrać, a więc tak dla użytkownika „zwierzak” wybierzemy plik: „wallet_zwierzak.dat”
- hasło dla każdego użytkownika nie może istnieć fizycznie na tej samej maszynie pod żadną postacią, czy to hasha, czy tym bardziej jawnej (i raczej, aby nie istniało w postaci jawnej na żadnej innej maszynie)
- zakładamy, że każda osoba, która poprawnie potrafi odszyfrować portfel jest jego właścicielem, bo portfel da się odszyfrować tylko wybierając właściwy (dobra nazwa użytkownika) i znając poprawne hasło
Korzyści
- każdy użytkownik odpowiada za bezpieczeństwo swojego portfela,
- bez problemu można umożliwić użytkownikowi zrobienie swoich własnych backupów portfela (dla banku świetnie, bo znika problem mybitcoin, dla giełdy niewykonalne, gdyż jest to zapewnienie transakcji),
- złodzieje są w stanie ukraść tylko te bitcoiny, które są w stanie odszyfrować,
- sprawdzenie aktualnego bilansu portfela nie wymaga jego odszyfrowywania, gdyż każdy znający publiczny adres może poznać jego bilans (to siedzi w chainie, a nie portfelu),
- możliwość udostępnienia użytkownikowi tworzenia tylu adresów w portfelu ile chce (wcześniej było to ograniczone poprzez model bazy danych).
- nazwa użytkownika nie może być dowolna nie tylko z takich powodów jakie miał bitchange (polskie litery mieszały transakcjami), ale także dlatego, że będą użytkownicy podający jako nazwę napisy w stylu: „../../../../etc/passwd”. Pewnie będzie musiała się zgodzić z takim regexp: „[A-Za-z0-9\-_]{5,}”
- należy upewnić się, że hasło użytkownika jest bardzo silne! Na pewno użyteczny będzie w tym celu libcrack. W końcu to hasło jest podstawą bezpieczeństwa całości.
W całości projektu na razie znalazłem tylko 2 problemy, z czego jeden jest tak na prawdę problemem związany z funkcjonowaniem protokołu, a drugi związany z łatwością używania:
- na tym etapie użytkownik nigdy nie może zapomnieć hasła, bo jego strata jest równoznaczna ze stratą dostępu do środków, gdyż nie można odszyfrować portfela. Strata środków użytkownika będzie naszą winą patrząc się na to wszystko ze strony użytkownika, bo to my mamy zapewnić ich bezpieczeństwo,
- brak działań natychmiastowych (realtime). W wypadku giełdy powstaje dodatkowy problem jak transportować finanse między poszczególnymi użytkownikami? Jako, że są to osobne portfele to nie można robić to jak w wypadku wspólnego portfela, czyli bilans rozliczać tylko na portalu i nie przejmować się faktycznym stanem bitcoinów w poszczególnych portfelach. Należało by w jakiś sposób środki te przetransportować między 2 portfelami w sposób natychmiastowy.
Pod tym postem zarezerwuje jeszcze sobie 2 na wszelki wypadek na przyszłość jak by ten projekt się bardziej rozwinął niż moje dywagacji teraz, więc prosił bym moderatorów o nie kasowanie ich.