Bitcoin. Co? Jak? Dlaczego? Po co? Za ile? Paweł Kraszewski

Podobne dokumenty
Blockchain i jego zastosowania w edukacji

Udany Electronic Cash BitCoin. Andrzej P.Urbański

BITC T O C IN - wi w r i tua t lna l wa w lut l a ut w w skr k ócie i Dawid Sobieraj

Kryptowaluty wybrane fakty i podstawy rozwiązań technicznych

Połączenie biznesu bitcoinowego z badawczymi pracami rozwojowymi w obszarze nowych technologii i metod fintech

GLOCIN to projekt w technologii BLOCKCHAIN, umożliwiający osobom inwestującym w waluty cyfrowe (tzw. kryptowaluty), korzystanie z naszego parku

Spis treści. Od Wydawcy

Wykład 4 Bezpieczeństwo przesyłu informacji; Szyfrowanie

Wprowadzenie do PKI. 1. Wstęp. 2. Kryptografia symetryczna. 3. Kryptografia asymetryczna

Bezpieczeństwo aplikacji typu software token. Mariusz Burdach, Prevenity. Agenda

Inteligentne kontrakty oparte o blockchain. Mateusz Zaborski

Od Wydawcy Krzywe eliptyczne w kryptografii Wykorzystanie pakietu SAGE... 9

Laboratorium nr 5 Podpis elektroniczny i certyfikaty

PuTTY. Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Inne interesujące programy pakietu PuTTY. Kryptografia symetryczna

Jak działa blockchain?

Implementacja mechanizmu SkyCashClick Wersja 0.1

Technologia blockchain

Trwały nośnik w Alior Bank

Wstęp Bitcoin Ethereum Nie proof-of-work Ataki Wykresy Podsumowanie. Sem:BK: Blockchain. Norbert J. Instytut Informatyki, Uniwersytet Wrocławski

Trwały nośnik w T-Mobile Usługi Bankowe. Opis rozwiązania dla zapewnienia elektronicznym dokumentom publicznym postaci trwałego nośnika

API transakcyjne BitMarket.pl

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 11

VPN Host-LAN IPSec X.509 z wykorzystaniem DrayTek Smart VPN Client

Klawiatura. Klawisz Blokady. Klawisz Enter. Wyświetlacz. Klucz cyfrowy FAQ

Serwer SSH. Wprowadzenie do serwera SSH Instalacja i konfiguracja Zarządzanie kluczami

Zamiana porcji informacji w taki sposób, iż jest ona niemożliwa do odczytania dla osoby postronnej. Tak zmienione dane nazywamy zaszyfrowanymi.

Wykład 3 Bezpieczeństwo przesyłu informacji; Szyfrowanie

Zastosowania PKI dla wirtualnych sieci prywatnych

Authenticated Encryption

Zadanie 1: Protokół ślepych podpisów cyfrowych w oparciu o algorytm RSA

Przewodnik użytkownika

ZAŁĄCZNIK Nr 3 do CZĘŚCI II SIWZ

Protokoły zdalnego logowania Telnet i SSH

KAMELEON.CRT OPIS. Funkcjonalność szyfrowanie bazy danych. Wtyczka kryptograficzna do KAMELEON.ERP. Wymagania : KAMELEON.ERP wersja

2.1. System kryptograficzny symetryczny (z kluczem tajnym) 2.2. System kryptograficzny asymetryczny (z kluczem publicznym)

VPN Virtual Private Network. Użycie certyfikatów niekwalifikowanych w sieciach VPN. wersja 1.1 UNIZETO TECHNOLOGIES SA

PRACA INŻYNIERSKA IMPLEMENTACJA MOBILNEGO KLIENTA BANKU ZABEZPIECZONEGO TOKENEM

Praktyczne aspekty wykorzystania nowoczesnej kryptografii. Wojciech A. Koszek

Bringing privacy back

Zarys algorytmów kryptograficznych

Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Marcin Pilarski

WSIZ Copernicus we Wrocławiu

Steganograficzny system plików

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Poufność (słaba) Integralność (niekryptograficzna) Uwierzytelnienie (słabe) Brak kontroli dostępu Brak zarządzania kluczami

Seminarium Katedry Radiokomunikacji, 8 lutego 2007r.

ZAŁĄCZNIK Nr 1 do CZĘŚCI II SIWZ

SSL (Secure Socket Layer)

REGULAMIN KORZYSTANIA Z KART PŁATNICZYCH BANKU POCZTOWEGO S.A. W RAMACH PORTFELI CYFROWYCH

PROBLEMATYKA BEZPIECZEŃSTWA SIECI RADIOWYCH Algorytm szyfrowania AES. Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Usługi sieciowe systemu Linux

Wykorzystanie protokołu T=CL w systemach kontroli dostępu

Kompresja tablic obliczeń wstępnych alternatywa dla tęczowych tablic. Michał Trojnara.

Podstawy Secure Sockets Layer

Agenda. Firma TOSIBOX OY. Co to jest TOSIBOX? Jak działa TOSIBOX? Kiedy liczy się czas, bezpieczeństwo i koszty!

Podręcznik Integracji

III RACHUNKI BANKOWE DLA KLIENTÓW INSTYTUCJONALONYCH TAB. 1 Pakiety

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 7

Transakcje przy użyciu waluty Bitcoin na tle pozostałych form płatności mobilnych. Sylwester Suszek

Informatyczne aspekty systemu kryptowaluty Bitcoin. prof. dr inż. Wojciech Nowakowski Instytut Maszyn Matematycznych

System anonimowej i poufnej poczty elektronicznej. Jakub Piotrowski

Załącznik nr 1. Specyfikacja techniczna portalu internetowego Łódź, r.

Laboratorium nr 3 Podpis elektroniczny i certyfikaty

DOKUMENTACJA TECHNICZNA KurJerzyAPI wersja 1.0

Nowe technologie w obszarze kształtowania popytu i podaży energii elektrycznej

PROBLEMATYKA BEZPIECZEŃSTWA SIECI RADIOWYCH Algorytm szyfrowania AES. Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Zarządzanie systemami informatycznymi. Bezpieczeństwo przesyłu danych

Bezpieczeństwo w sieci I. a raczej: zabezpieczenia wiarygodnosć, uwierzytelnianie itp.

Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA

Zdalne logowanie do serwerów

Programowanie w języku C++ Grażyna Koba

Ćwiczenie 8 Implementacja podpisu cyfrowego opartego na standardzie X.509

DOKUMENT DOTYCZĄCY OPŁAT Z TYTUŁU USŁUG ZWIĄZANYCH Z RACHUNKIEM PŁATNICZYM

Sieci komputerowe Wykład 7. Bezpieczeństwo w sieci. Paweł Niewiadomski Katedra Informatyki Stosowanej Wydział Matematyki UŁ niewiap@math.uni.lodz.

Nowa aplikacja mobilna do płatności telefonem

Generowanie kluczy API

Praktyczne aspekty stosowania kryptografii w systemach komputerowych

Pierwsze kroki Statusy transakcji Zwrot płatności przelewem lub kartą Odbiór wpłat Czas realizacji płatności...

Charakterystyka allpay.net

no F E R T A P R E Z E N T A C J A M O Ż L I W O Ś C I B L O C K C H A I N

Zastosowania informatyki w gospodarce Wykład 5

Wasze dane takie jak: numery kart kredytowych, identyfikatory sieciowe. kradzieŝy! Jak się przed nią bronić?

Korzystanie z Certyfikatów CC Signet w programie MS Outlook 98

Jak kupić bilet na przystanku i w autobusie lub tramwaju?

Polityka Certyfikacji dla Certyfikatów PEMI

Instrukcja obsługi programu altbackup

Jak bezpieczne są Twoje dane w Internecie?

System Użytkowników Wirtualnych

Cennik usługi IAI-Shop.com

III RACHUNKI BANKOWE DLA KLIENTÓW INSTYTUCJONALNYCH TAB. 2 Pozostałe rachunki

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Bramka płatnicza. Dokumentacja techniczna. wersja 1.0

Zakład Usług Informatycznych OTAGO

Bezpieczna poczta i PGP

Generowanie ciągów bitów losowych z wykorzystaniem sygnałów pochodzących z komputera

OPCJE DOSTAWY W SERWISIE WIRTU.PL

Bezpieczna bankowość efirma24

Mariusz Bodeńko Olsztyn, Bezpieczeństwo w Internecie

DOKUMENT DOTYCZĄCY OPŁAT Z TYTUŁU USŁUG ZWIĄZANYCH Z RACHUNKIEM PŁATNICZYM

Podzielona płatność (split payment) Poradnik dla użytkowników InsERT nexo

Transkrypt:

Bitcoin Co? Jak? Dlaczego? Po co? Za ile? Paweł Kraszewski pawel@kraszewscy.net

Definicja Bitcoin to: kryptowaluta wprowadzona w 2009 roku przez podmiot o pseudonimie Satoshi Nakamoto. Do dziś nie wiadomo, czy jest to jedna osoba, grupa osób, czy też jakaś firma. używające jej otwarto-źródłowe oprogramowanie sieć peer-to-peer, która obsługuje transfery

Bitcoin od strony algorytmów i struktur danych

Hierarchia systemu Bitcoin Blockchain to publicznie dostępny łańcuch wzajemnie powiązanych bloków Blok zawiera cyfrowo podpisaną listę transakcji Transakcja zawiera listę przepływów wartości z wejść na wyjścia Wyjście jest definicją, jaki warunek trzeba spełnić, aby skorzystać z bitcoina przypisanego temu wyjściu Wejście jest cyfrowym dowodem na prawo dysponowaniem bitcoinem pochodzącym z wyjścia którejś z wcześniejszych transakcji

Blockchain Blockchain jest publiczną bazą, zawierającą listę wszystkich transakcji, jakie kiedykolwiek zostały zaakceptowane w sieci BitCoin. Od strony księgowej jest to tzw. ledger, czyli globalny rejestr winien-ma. Dystrybucja blockchaina odbywa się za pomocą dedykowanego protokołu P2P. Na dziś blockchain ma rozmiar trochę ponad 80 GB Integralność blockchaina zapewnia wiązanie skrótów

Kryptografia i kodowanie Jako sygnatury z kluczem publicznym używany jest algorytm ECDSA na krzywej secp256k1 Jako klucz prywatny może być użyta dowolna liczba 256-bitowa mniejsza od mniej więcej 2256-2128. * Jako funkcji skrótu używa się kaskadowego hashowania: HASH160 = RIPEMD160 z SHA256 HASH256 = SHA256 z SHA256 Dane binarne widoczne dla użytkownika kodowane są algorytmem BASE58 * konkretnie - mniejsza od FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

Typy danych 1 byte[32] BLOCK_ID_t; byte[32] TRANS_ID_t; byte[32] MERKLE_t; struct { varuint size; T data[]; }VARR<T>;

Typy danych 2 VARR<byte> SCRIPT_t; struct { TRANS_ID_t transaction; uint32 index; } UTXO_t;

Blok struct BLOCK_t uint32 BLOCK_HDR_t VARR<TRANS_t> }; { size; header; transactions;

Blok - nagłówek struct BLOCK_HDR_t { uint32 version; BLOCK_ID_t prev_block; MERKLE_t merkle_root; uint32 time_stamp; uint32 difficulty_target; uint32 nonce; };

Kopanie bitcoinów Kopanie bitcoinów jest bardzo niefortunnym skrótem myślowym. Zadanie w rzeczywistości polega na tym, aby tak manipulować wartościami nonce, time_stamp i merkle_root, aby HASH256 nagłówka miał wartość mniejszą od aktualnie obowiązującej wartości zwanej trudnością. (w przybliżeniu - aby hash miał nie mniej niż ileśtam zer na początku) Trudność dobierana jest raz na 2016 bloków (średnio co 2 tygodnie) tak, aby znalezienie rozwiązania przez całą sieć trwało 10 minut.

Kopanie bitcoinów Za znalezienie rozwiązania wyznaczona jest nagroda od 16 lipca 2016 (blok #420 000) jest to 12,5 BTC. Nagroda jest połowiona co 210 000 bloków (~ co 4 lata), czyli następne połowienie będzie na początku lipca 2020. Po dojściu do nagrody 1 satoshi, następne połowienie wyzeruje nagrodę. Będzie wtedy wykopane dokładnie 21,000,000 BTC. Szacuje się, że nastąpi to na początku października 2140. Do dziś wykopano 75% bitcoinów

Transakcja struct TRANSACTION_t { uint32 version; VARR<INPUT_t> inputs; VARR<OUTPUT_t> outputs; uint32 lock_time; }; // obecnie 1

Wyjście struct OUTPUT_t { uint64 amount; SCRIPT_t locking_script; }; Kwota wyjścia podana jest w satoshi, najmniejszej jednostce. Jeden Bitcoin to 100 milionów satoshi. Skrypt blokujący to zagadka, którą trzeba rozwiązać, aby odblokować bitcoiny.

Wejście struct INPUT_t { UTXO_t UTXO; SCRIPT_t unlocking_script; uint32 seq; // Nie używ., 0xFFFFFFFF }; Wejście nie ma kwoty. Zużywa zawsze całe wyjście. Jeżeli nie wykorzystujemy całej kwoty, nadmiar odsyłamy na własne konto ( reszta ) Skrypt odblokowujący to rozwiązanie zagadki z wejścia.

Opłaty Dla każdej transakcji suma wejść musi być równa lub większa od sumy wyjść (transakcja nie może być debetowa) z wyjątkiem transakcji tworzącej nowy bitcoin, nie mającej żadnych wejść. Różnica sum wejścia i wyjścia to tzw opłata transakcyjna i przypada ona osobie, która wykopała blok zawierający daną transakcję. Po wykopaniu ostatniego bitcoina, jedynym zyskiem kopalni będą opłaty transakcyjne. Kopalnie realizują transakcje zaczynając od najbardziej opłacalnych

Opłaty (na dzień 17 września 2016) Serwis https://bitcoinfees.21.co szacuje czas potwierdzeń przy różnych opłatach: >61 satoshi/bajt to realizacja w najbliższym bloku 41...60 satoshi/bajt to realizacja się w ciągu maksymalnie 4 bloków 11-40 satoshi/bajt to czekanie 1-15 bloków 1-10 satoshi/bajt to czekanie 2-21 bloków brak opłat co najmniej 40 bloków czekania, choć sieć może też całkiem odrzucić transakcję. Najczęściej płaci się ~60 satoshi/bajt (~130 μbtc = ~30gr za przeciętną transakcję)

Skrypty Skrypty Bitcoina wykonywane są przez prostą, stosową maszynę wirtualną. Maszyna nie jest zupełna w sensie Turinga. Nie ma żadnego mechanizmu umożliwiającego nawet pośrednio realizację pętli. Program ma postać ciągu instrukcji. Instrukcja składa się 1-bajtowego opkodu, po którym występuje 0 lub więcej bajtów argumentu.

Skrypt blokujący i odblokowujący Rozwiązanie zagadki odblokowującej wyjście polega na dopisaniu/wykonaniu takiego skryptu przed skryptem wyjścia, żeby po poprawnym zakończeniu działania całego programu, na stosie pozostała pojedyncza wartość 1 (TRUE). VM.stack.erase() VM.run(unlocking_script)!= E_INVALID VM.run(locking_script)!= E_INVALID VM.stack.size==1 && VM.stack[0]==1

Skrypt pay-to-pubkey-hash (P2PKH) 1)[sig] 2)[pubKey] 3)OP_DUP 4)OP_HASH160 5)[pubKeyHash] 6)OP_EQUALVERIFY 7)OP_CHECKSIG 1-2 skrypt odblokowania (część INPUT_t) 3-7 skrypt blokowania (część OUTPUT_t)

Skrypt P2PKH Do stworzenia transakcji wystarczy hash klucza publicznego odbiorcy. Hash ten przekazywany jest jako numer konta bitcoinowego. Standardowy adres P2PKH jest konstruowany tak: BASE58( 01 khash20 CHECK4 ) gdzie CHECK to pierwsze 4 bajty HASH256(kHASH) Adresy P2PKH zaczynają się od cyfry 1 Do odblokowania BTC trzeba pokazać poprawny podpis hasha wejścia, wyjścia i skryptu kluczem prywatnym, którego klucz publiczny jest zgodny z hashem zaszytym w danym wyjściu.

Skrypt pay-to-script-hash (P2SH) 1)[dane] 2)[skrypt] 3)OP_HASH160 4)[scriptHash] 5)OP_EQUAL 6)OP_EVAL* * wirtualny opcode 1-2 skrypt odblokowania (część INPUT_t) 3-5 skrypt blokowania (część OUTPUT_t) Jako niejawny 6-y krok, [skrypt] jest uruchamiany tak, jakby został wstawiony od punktu 2

Skrypt P2SH Do stworzenia transakcji wystarczy hash skryptu odblokowania. Hash ten przekazywany jest jako numer konta bitcoinowego. Standardowy adres P2SH jest konstruowany tak: BASE58( 51 shash20 CHECK4 ) gdzie CHECK to pierwsze 4 bajty HASH256(sHASH) Adresy P2SH zaczynają się od cyfry 3 Do odblokowania BTC trzeba pokazać skrypt pasujący do hasha i dane wejściowe do tego skryptu, gwarantujące zakończenie go w stanie akceptującym (pojedyncza 1 na stosie)

Skrypt P2SH Skrypty P2SH używane są głównie do realizacji transakcji multi-signature do odblokowania wyjścia trzeba N z M podpisów (N M). Przykład skryptu dla multisiga 2-z-3 podpisów: 1)<sig1> 2)<sig2> 3)<OP_2 <pk1> <pk2> <pk3> OP_3 OP_CHECKMULTISIG> Adresem tej transakcji jest hash skryptu z p. 3

Standardowe typy skryptów P2PKH P2SH P2PK (pay-to-public-key) - jak P2PKH, tylko zamiast hasha klucza publicznego jest cały klucz publiczny). Przestarzały! Multisignature (tzw. surowy multisig). OP_RETURN metadata (niszczenie bitcoinów, podpisy dokumentów) Tylko dwa pierwsze typy mają odpowiadające im adresy bitcoinowe.

Bitcoin od strony użytkownika

Zwykły użytkownik Zwykły użytkownik, chcący wymieniać się bitcoinami z innymi użytkownikami, na ogół posługuje się skryptami/adresami P2PKH. Do poprawnego funkcjonowania w sieci Bitcoin, użytkownik potrzebuje osobistego klucza prywatnego który w kontekście P2PKH jest myślowym odpowiednikiem konta w normalnym banku. To wystarczy, żeby przyjąć, a następnie dalej przesłać bitcoiny.

Pojedyncze konto banknot albo czek Papierowy banknot wygenerowany przez stronę https://www.bitaddress.org bez żadnych zabezpieczeń

Pojedyncze konto banknot albo czek Papierowy banknot wygenerowany przez stronę https://www.bitaddress.org zabezpieczony hasłem Linu.X-Lab

Pojedyncze konto moneta Monety Denarium i Titan

Pojedyncze konto portfel pamięciowy Nazywany memory wallet bądź brainwallet Klucz prywatny jest generowany z długiego hasła, np. za pomocą funkcji SHA256* Dla hasła Linu.X-Lab-2016 uzyskuje się takie klucze prywatny i publiczny (format WIF): 5J39NvNmdvPWzWxghR7RLahfcHqKMLYPtxwjna5JM18RePXnCMr 1GyUQ3tRUCWxUeoxwdyFjrJ1Y5uD5Do2aF * Z prawdopodobieństwem 2-128 wygeneruje się klucz z zakazanego zakresu

Wiele kont ( portfel ) Aby zapewnić bezpieczeństwo i anonimowość, wskazane jest używanie każdego konta bitcoinowego tylko raz, tworząc nowe konto dla każdej wpłaty. Pojawia się problem - jak efektywnie i bezpiecznie zarządzać wieloma kluczami prywatnymi Powstały dwa rozwiązania: portfele losowe portfele deterministyczne

Typy portfeli Klasyczny (losowy) Deterministyczno-hierarchiczny (HD) Kolejne adresy prywatne są Kolejne adresy są generowane na całkowicie losowe podstawie tzw. ziarna ( seeda ) w sposób deterministyczny. Dla adresów można generować pod-adresy, pod-pod-adresy pewnego rodzaju drzewo adresów Backup ważny do pojawienia się Backup obejmuje jedynie ziarno, więc nowych adresów prywatnych wystarczy zrobić go raz, przy tworzeniu (trzeba robić cyklicznie) portfela Adres publiczny jest Można maszynowo generować dowolną generowany dla konkretnego ilość adresów publicznych na podstawie adresu prywatnego. master-klucza publicznego (xpub) bez ujawniania żadnego klucza prywatnego.

Typy klientów BitCoin Pełny węzeł z kompletną kopią blockchaina portfele Bitcoin Core i Armory (w sumie nakładka na BTCore) Portfel z częściową kopią blockchaina kontaktujący się z pełnym węzłem normalnym protokołem P2P bitcoina ( Simple Payment Verification SPV) portfele MultiBit, Electrum, Mycelium Portfel bez kopii blockchaina, bazujący na usłudze zewnętrznej do weryfikacji sald portfele webowe na bazie JS

Przechowywanie kluczy prywatnych lub seedów Klucz prywatny/seed trzymany jest w osobnym urządzeniu (portfele sprzętowe). Zaszyfrowany klucz prywatny/seed trzymany jest w programie portfela (portfele desktopowe i mobilne). Zaszyfrowany klucz prywatny/seed trzymany jest na zewnętrznym serwerze, ale jest przysyłany do odszyfrowania i podpisu transakcji lokalnie (współczesne portfele webowe i giełdy) Klucz prywatny/seed trzymany jest na serwerze zewnętrznym i tam jest użyty do podpisu transakcji (stare portfele webowe i giełdy)

Część praktyczna https://blockchain.info https://blockexplorer.com

Literatura Strona domowa z linkiem do darmowej wersji w formacie markdown: www.bitcoinbook.info W drodze jest wydanie II, planowane na grudzień 2016 $28 za ebook Early Access na stronach O Reilly: (http://goo.gl/dygx92)

Dziękuję za uwagę 17cK9cS2weR2v8waqSUUaxno64SATD9Gt2