Uczciwa loteria oparta na systemie Bitcoin
|
|
- Mikołaj Jakubowski
- 10 lat temu
- Przeglądów:
Transkrypt
1 Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki Daniel Malinowski Nr albumu: Uczciwa loteria oparta na systemie Bitcoin Praca magisterska na kierunku INFORMATYKA Praca wykonana pod kierunkiem dra hab. Stefana Dziembowskiego Instytut Informatyki Wrzesień 2014
2 Oświadczenie kierującego pracą Potwierdzam, że niniejsza praca została przygotowana pod moim kierunkiem i kwalifikuje się do przedstawienia jej w postępowaniu o nadanie tytułu zawodowego. Data Podpis kierującego pracą Oświadczenie autora (autorów) pracy Świadom odpowiedzialności prawnej oświadczam, że niniejsza praca dyplomowa została napisana przeze mnie samodzielnie i nie zawiera treści uzyskanych w sposób niezgodny z obowiązującymi przepisami. Oświadczam również, że przedstawiona praca nie była wcześniej przedmiotem procedur związanych z uzyskaniem tytułu zawodowego w wyższej uczelni. Oświadczam ponadto, że niniejsza wersja pracy jest identyczna z załączoną wersją elektroniczną. Data Podpis autora (autorów) pracy
3 Streszczenie System Bitcoin jest kryptograficznym systemem płatności wprowadzonym w 2008 roku przez Satoshiego Nakamoto. System ten zyskał w ostatnim czasie znaczną popularność, głównie ze względu na swoją najistotniejszą cechę, jaką jest decentralizacja oraz brak kontroli nad walutą przez żaden kraj, bank czy instytucję. Ponadto w systemie tym możliwe jest wykonanie szybkich przelewów do dowolnych użytkowników na świecie, a opłaty transakcyjne są zerowe bądź też bardzo małe. System ten pozwala także na dokonywanie bardziej skomplikowanych transakcji niż zwykłe przelewy. W pracy tej opiszemy dwa protokoły bazujące na tej własności systemu Bitcoin. Pierwszy z nich Zobowiązania Bitowe oparte na systemie Bitcoin pozwala na karanie finansowe użytkownika, który nie chce otworzyć swojego zobowiązania. Drugi Uczciwa loteria oparta na systemie Bitcoin jest przykładem loterii, w której przegrani gracze zmuszeni są do zapłaty zwycięzcy ustalonej wcześniej stawki. Oba te protokoły nie wymagają żadnej zaufanej strony trzeciej, ich bezpieczeństwo opiera się na właściwościach systemu Bitcoin oraz kryptografii. Na końcu pracy przedstawimy również prostą implementację protokołu loterii. Słowa kluczowe Bitcoin, loteria, zobowiązania bitowe, bezpieczne obliczenia wielopodmiotowe 11.3 Informatyka Dziedzina pracy (kody wg programu Socrates-Erasmus) Klasyfikacja tematyczna Theory of computation - Computational complexity and cryptography - Cryptographic protocols Fair Bitcoin-based lottery Tytuł pracy w języku angielskim
4
5 Spis treści Wprowadzenie Motywacja Znaczenie wyników opisanych w pracy Zawartość pracy Powiązane prace oraz problemy otwarte Wiadomości wstępne Notacja Bezpiecznie obliczenia wielopodmiotowe Model z losową wyrocznią Opis systemu Bitcoin Główna idea oraz własności systemu Bitcoin Wysokopoziomowe wprowadzenie do systemu Bitcoin i dowodów pracy Standardowe działanie systemu Bitcoin Prawdziwe, najogólniejsze działanie systemu Bitcoin Notacja transakcji w systemie Bitcoin Własności sieci P2P w systemie Bitcoin Zobowiązania bitowe oparte na systemie Bitcoin Klasyczne zobowiązania bitowe Definicja Zobowiązania bitowego opartego na systemie Bitcoin Protokół Dowód bezpieczeństwa Uczciwa loteria oparta na systemie Bitcoin Algorytm Bluma Definicja Uczciwej loterii opartej na systemie Bitcoin Protokół Dowód bezpieczeństwa Opis implementacji Uczciwej loterii opartej na systemie Bitcoin Opis projektu Opis funkcjonalności Przykładowa użycie programu do rozegrania loterii Podsumowanie Podziękowanie
6 Bibliografia
7 Wprowadzenie Motywacja Bezpieczne obliczenia wielopodmiotowe są kryptograficzną metodą na wspólne wykonanie akcji w sposób bezpieczny przez nieufających sobie wzajemnie użytkowników. Mówiąc w skrócie, pozwalają one użytkownikom na obliczenie funkcji na parametrach będących ich sekretami, bez ujawniania samych sekretów. Jedyny sposób, w jaki nieuczciwi gracze mogą wpłynąć na wykonywany protokół, to wybranie własnego sekretu, przy użyciu którego będzie obliczana funkcja. Klasycznym problemem w teorii bezpiecznych obliczeń wielopodmiotowych jest problem milionerów. W problemie tym dwóch użytkowników chce się dowiedzieć, który z nich jest bogatszy 1. Nie chcą oni jednak podawać swojego majątku drugiej stronie. Przy zastosowaniu technik bezpiecznych obliczeń wielopodmiotowych mogą oni to zrobić. Oczywiście każdy z nich może podać większą bądź mniejszą wartość niż jego rzeczywisty majątek oraz dowie się, czy majątek drugiego gracza (wartość jaką on podał) jest większy czy mniejszy od jego. Jednak bezpieczeństwo oznacza tyle, że nie może zrobić nic więcej nie sprawi, że funkcja wskaże, że ich majątki są równe (chyba, że przez przypadek o pomijalnie małym prawdopodobieństwie zajścia) ani nie pozna dokładnego majątku drugiego gracza. Innym rozważanym problemem jest problem loterii. W problemie tym gracze nie posiadają żadnych własnych sekretów. Chcą oni jednak rzucić monetą wygenerować wspólnie jednostajnie losowy bit każdy z nich musi mieć pewność, że bit ten jest rzeczywiście jednostajnie losowy. Bit ten może oznaczać, który z nich jest zwycięzcą loterii. Bezpieczeństwo protokołu rozwiązującego ten problem oznacza m.in., że żaden z graczy nie może wpłynąć na rozkład prawdopodobieństwa generowanych bitów, np. nie może sprawić, że zawsze będzie wygrywał loterię. Możliwości bezpiecznych obliczeń wielopodmiotowych są znacznie większe, niż te powyżej wymienione. Udowodniono [16], że każdą wielomianową funkcję można zaimplementować jako protokół bezpiecznych obliczeń wielopodmiotowych. Dzięki tej teorii można również w sposób bezpieczny grać w gry, w których gracze posiadają tajne informacje oraz wykonują swoje akcje w zależności od poprzednich ruchów w grze. Prostym przykładem takiej gry jest poker. Dzięki bezpiecznemu protokołowi do gry w pokera tzw. pokerowi mentalnemu można rozegrać całą partię, od rozdania kart aż do zwycięstwa jednego z graczy, przez internet bez potrzeby ufania żadnej trzeciej stronie. Mimo swojego wielkiego potencjału, wielu badań oraz naturalnego zastosowania w grach hazardowych, bezpieczne obliczenia wielopodmiotowe nie są używane w internetowych kasynach. Istnieją co najmniej dwa istotne powody za to odpowiedzialne. Pierwszym z nich jest to, że w ogólności bezpieczne obliczenia wielopodmiotowe nie zapewniają uczciwości, gdy liczba 1 Mówiąc bardziej formalnie, chcą obliczyć funkcję f(x, y) = 1 gdy x > y, f(x, y) = 1 gdy x < y oraz f(x, y) = 0 gdy x = y. 5
8 złych (nieuczciwych) graczy wynosi co najmniej połowę. Uczciwość jest własnością protokołu mówiącą, że jeżeli jeden z graczy pozna wynik, to wszyscy gracze go poznają. Jeżeli np. protokół loterii nie posiada tej własności, to nieuczciwy graczy, gdy dowie się, że przegrał, mógłby przerwać wykonanie protokołu, sprawiając, że loteria byłaby nieważna. Z taką sytuacją mamy do czynienia m.in. w przypadku gier dwuosobowych. Ponadto w grach wieloosobowych jest to również duży problem, gdyż w internecie łatwo jest tworzyć wiele tożsamości, zatem jeden przeciwnik może kontrolować wielu pojedynczych użytkowników (jest to atak typu sybil opisany w [9]). Drugim problemem związanym z użyciem bezpiecznych obliczeń wielopodmiotowych do gier hazardowych są ich naturalne ograniczenia. Obliczenia te nie zapewniają nic więcej niż tzw. emulację świata idealnego, w którym gracze po prostu poznają wynik funkcji. Jednak w żaden sposób wynik ten nie jest związany ze światem rzeczywistym. Nie ma kryptograficznej metody zmuszenia kogoś do uszanowania wyniku gry i zapłacenia zwycięzcy odpowiedniej kwoty. Zarządzanie pieniędzmi znajduje się po prostu poza klasyczną kryptografią. W celu ominięcia powyższego problemu, w pracy tej skupiliśmy się na kryptograficznej walucie bitcoin. System Bitcoin został wprowadzony w 2008 roku przez Satoshiego Nakamoto w [14] (jest to prawdopodobnie pseudonim). W ostatnim czasie system ten zyskał ogromną popularność poprzez możliwość wykonywania szybkich przelewów do dowolnego użytkownika na świecie obarczonych zerową, lub bardzo niską opłatą. Ponadto system ten jest zdecentralizowany. Oznacza to, że żaden kraj, bank czy instytucja nie może zabrać ani zamrozić pieniędzy użytkowników bądź też dodrukować pieniędzy w celu zwiększenia inflacji. System Bitcoin pozwala również na projektowanie bardziej skomplikowanych operacji pieniężnych niż same przelewy posiada on możliwość tworzenia kontraktów. Z naszego punktu widzenia jest to bardzo ważna cecha, gdyż naszym celem było stworzenie kryptograficznej loterii, w której przegrany użytkownik musi respektować wynik i zapłacić zwycięzcy, a kontrakty to umożliwiły. Znaczenie wyników opisanych w pracy W internecie działa bardzo wiele stron internetowych do uprawiania hazardu opierających się o system Bitcoin. Działają one na zasadzie internetowego kasyna. Oznacza to, że gracz musi najpierw wpłacić bitcoiny na konto kasyna. Podczas gry zmieniają się środki na jego koncie w kasynie i w każdej chwili może je wypłacić. Ciekawą własnością większości internetowych kasyn opartych o walutę bitcoin, jest dowodzenie uczciwości po grze. Polega ono na tym, że przed przeprowadzeniem losowania (o to, czy gracz wygra czy przegra) serwer generuje losowy ciąg znaków i wyświetla użytkownikowi jego hasz (zobowiązuje się do niego). Następnie gracz wpisuje swój własny (losowy) ciąg znaków. Oba ciągi znaków są łączone, haszowane i na podstawie uzyskanego hasza obliczany jest wynik losowania. Po losowaniu serwer ujawnia swój ciąg znaków. Dzięki temu wynik losowania jest rzeczywiście losowy, gdyż zależy od wyniku funkcji haszującej na nieprzewidywalnym parametrze. Ponadto użytkownik może sprawdzić, czy losowanie zostało poprawnie przeprowadzone poprzez sprawdzenie poprawności ujawnionego przez serwer ciągu znaków. Własność ta spowodowała, że użytkownicy zaufali internetowym kasynom i wierzą, że nie zostaną oszukani. Z punktu widzenia kryptografii własność dowodzenia uczciwości po grze jest niewystarczająca. Główny problem polega tu na tym, że pierwsze co musimy zrobić przed rozpoczęciem gry, to wpłacić swoje bitcoiny na konto kasyna. W związku z tym, nic nie gwarantuje, że po wygraniu gry rzeczywiście będziemy mogli odzyskać te pieniądze. Jeżeli właściciel kasyna jest nieuczciwy, to może on zamknąć kasyno i ukraść powierzone mu środki. Takie sytuacje 6
9 w kasynach grających o bitcoiny miały już miejsce. Kasyna internetowe pobierają pewną małą kwotę od wygranych. Opłata ta zwykle waha się w przedziale 0.5% 2%. Jej wielkość często uzależniona jest od tego, jaką reputację posiada dane kasyno. Bardziej znane kasyna, którym ludzie ufają, że nie znikną z rynku kradnąc środki, mogą pozwolić sobie na większe opłaty. Przykładem na to jest serwis SatoshiDice, największe z tego typu kasyn, który pobiera opłatę około 2%. Opłaty te sprawiają, że granie w kasynach jest całkowicie nieopłacalne. Aby rozwiązać powyższe problemy, opracowaliśmy protokół loterii opartej o system Bitcoin. Loteria ta jest bardzo prostego typu użytkownicy wpłacają równe stawki do puli, a następnie jednostajnie losowo wybrany jeden z nich zgarnia całą pulę. Nasz protokół może być wykorzystany do gry między nieznającymi się osobami, a jego bezpieczeństwo stwierdza, że osoby te nie mogą się nawzajem oszukać. Przegrany zawsze musi zapłacić zwycięzcy ustaloną wcześniej stawkę. Jedyny sposób, w jaki może on wpłynąć na protokół, to trochę go opóźnić. Protokół ten jest wykonywany bez pomocy żadnej zaufanej strony trzeciej, jego bezpieczeństwo opiera się jedynie na własnościach systemu Bitcoin oraz kryptografii. Ponadto w protokole tym nie ma żadnych opłat, jedynie przy wysyłaniu transakcji systemu Bitcoin trzeba do nich dołączyć (bardzo) małe opłaty, niezależne od wielkości stawki. Dzięki temu, używanie naszego protokołu jest bardziej bezpieczne i opłacalne niż używanie internetowych kasyn. Protokół nasz można również prosto zmienić, jeżeli chcielibyśmy wprowadzić nierówne stawki, zmienić prawdopodobieństwo wygrania poszczególnych graczy, czy wprowadzić opłatę dla kasyna. W pracy tej opiszemy również drugi protokół oparty o system Bitcoin, który stworzyliśmy pracując nad protokołem bezpiecznej loterii. Protokół ten rozszerza możliwości zobowiązań bitowych. W klasycznych zobowiązaniach bitowych Zobowiązujący w pierwszej fazie zobowiązuje się do swojego sekretu nie ujawniając o nim żadnej informacji. Natomiast w drugiej fazie otwiera on swoje zobowiązanie, czyli pokazuje swój sekret. Robi to w taki sposób, że Odbiorca ma pewność, że o ten sekret chodziło Zobowiązującemu od początku. Pewnym problemem może być czasem sytuacja, w której Zobowiązujący nie chce otworzyć swojego zobowiązania. W naszym protokole rozwiązaliśmy to w taki sposób, że Zobowiązujący płaci odpowiednią karę w bitcoinach, jeżeli do ustalonego momentu nie otworzy swojego zobowiązania. Tak jak przy naszym protokole do uczciwej loterii, tutaj także własność ta jest zapewniona przez system Bitcoin oraz kryptografię i nie wymaga żadnej zaufanej strony trzeciej. Z samej definicji protokołu loterii wynika, że ma on pewne problemy, które powodują, że prawdopodobnie nie będzie on używany w rzeczywistej grze. Po pierwsze, przy okazji wykonania protokołu gracze muszą założyć depozyt (który dostaną na zakończenie z powrotem), którego wielkość rośnie z liczbą graczy. Jego wielkość jest akceptowalna dla 2-3 graczy, ale dla większej liczby graczy jest on zbyt duży. Po drugie, czas wykonania protokołu jest dosyć wysoki. Pojedyncze wykonanie protokołu może trwać nawet kilka godzin. Jeżeli jednak niestandardowe własności systemu Bitcoin, które są w tym protokole wykorzystywane, stałyby się bardziej popularne i łatwiejsze w użyciu, to czas ten może się znacząco skrócić. W ostatnim rozdziale pracy przedstawimy prosty program służący do testowego rozegrania loterii przy użyciu naszego protokołu. Jest to nieduży projekt, którego celem jest pokazanie możliwości wykonania naszego protokołu, a nie jego używanie w praktyce i nie jest on głównym wynikiem tej pracy. Zawartość pracy Podamy teraz opis zawartości kolejnych rozdziałów pracy. 7
10 Rozdział pierwszy zawiera wiadomości wstępne potrzebne do pełnego zrozumienia pracy oraz omawianego tematu. W pracy tej zakładamy, że czytelnik zna najbardziej podstawowe pojęcia kryptograficzne, zatem nie będą one omówione w ramach wiadomości wstępnych. Rozdział ten zaczyna się od notacji używanej przy stosowaniu pojęć kryptograficznych. Następnie omówione zostaną wspomniane wcześniej bezpieczne obliczenia wielopodmiotowe. Nie są one bardzo istotne do zrozumienia wyników opisanych w pracy, jednak są one z nimi mocno powiązane. Dodatkowo opisane są tam założenia przyjmowane w teorii bezpiecznych obliczeń wielopodmiotowych, które my również będziemy przyjmowali w tej pracy. Rozdział pierwszy kończy się opisem modelu z losową wyrocznią. Praca w tym modelu jest założeniem często spotykanym w protokołach używających funkcji haszujących. W naszym przypadku użycie tego założenia związane jest ze stosowaniem systemu Bitcoin, który niejako wymaga użycia modelu z losową wyrocznią. Kolejny rozdział zawiera opis systemu Bitcoin. System ten jest dosyć nowy oraz mimo swojej ogromnej popularności jego własności nie są szeroko znane. W związku z tym postanowiliśmy opisać całościowe działanie tego systemu (w sposób ogólny). W naszych protokołach będziemy mocno korzystać z zaawansowanych własności transakcji w systemie Bitcoin, zatem opiszemy ich działanie ze szczegółami. Rozdział ten zaczniemy od opisu idei systemu Bitcoin oraz powodów, dla których zyskał on popularność. Opiszemy na czym on polega oraz postaramy się rozwiać część mitów go dotyczących. Następnie przejdziemy do technicznego opisu działania systemu Bitcoin. Działanie to pokażemy w trzech krokach począwszy od działania uproszczonego wraz z opisem dowodów pracy, poprzez standardowe działanie, które wystarcza w prawie wszystkich przypadkach, a skończywszy na opisaniu niestandardowych transakcji, które będą nam dalej potrzebne. Opiszemy co zawierają takie transakcje, jak się je waliduje oraz wysyła, na czym polega tzw. kopanie bitcoinów a także nieformalnie zaagitujemy dlaczego system ten jest bezpieczny. W dalszej części drugiego rozdziału opiszemy język skryptowy używany w transakcjach oraz naszą notację do zapisywania jego oraz samych transakcji. Rozdział ten kończy się opisem pewnych cech systemu Bitcoin związanych z tym, że działa on w sieci rozproszonej. Cechy te to opóźnienia w dokonywaniu transakcji, jawność transakcji po ich wysłaniu oraz ich kowalność. Kowalność jest istotnym problemem w projektowaniu protokołów w systemie Bitcoin pokażemy w jaki sposób własność ta wpływa na bezpieczeństwo na przykładzie protokołu na depozyt, wziętego z literatury związanej z systemem Bitcoin. Trzeci rozdział zawiera pierwszy z dwóch wyników opisanych w pracy Zobowiązania bitowe oparte na systemie Bitcoin. Rozdział ten zaczniemy jednak od przypomnienia klasycznych zobowiązań bitowych. Opiszemy definicje zobowiązań bitowych oraz ich bezpieczeństwa. Następnie przypomnimy prosty protokół na zobowiązania bitowe używający funkcji haszujących. Udowodnimy także jego bezpieczeństwo w modelu z losową wyrocznią. W dalszej części tego rozdziału skupimy się na Zobowiązaniach bitowych opartych na systemie Bitcoin. Podamy ich ideę, definicje bezpieczeństwa a także protokół w wersji formalnej oraz bardziej opisowej. Protokół ten będzie rozwinięciem podanego wcześniej rozwiązania klasycznego problemu. Rozdział zakończymy dowodem poprawności i bezpieczeństwa naszego protokołu. Następny rozdział zawiera nasz kolejny protokół Uczciwą loterię opartą na systemie Bitcoin. Rozdział ten ma podobną strukturę co poprzedni. Zaczniemy od przypomnienia klasycznego problemu bezpiecznego rzutu monetą na odległość wraz z jego rozwiązaniem algorytmem Bluma. Algorytm ten w prosty sposób wykorzystuje klasyczne zobowiązania bitowe. Przedstawimy definicję tego problemu oraz jego bezpieczeństwa a także dowód poprawności algorytmu Bluma. Następnie przejdziemy do Uczciwej loterii opartej na systemie Bitcoin. Zdefiniujemy problem oraz jego warunki bezpieczeństwa. Później zaprezentujemy nasze rozwiązanie tego problemu podamy protokół w sposób opisowy a także w sposób for- 8
11 malny. Nasz protokół będzie rozwinięciem algorytmu Bluma będzie jednak wykorzystywał Zobowiązania bitowe oparte na systemie Bitcoin zamiast klasycznych zobowiązań bitowych. Rozdział zakończymy dowodem poprawności i bezpieczeństwa naszego protokołu. Ostatni z rozdziałów jest opisem implementacji protokołu na Uczciwą loterię opartą na systemie Bitcoin. Jest to nieduży projekt, którego celem jest pokazanie możliwości użycia naszego protokołu. Jego celem nie jest używanie naszego protokołu w praktyce tylko testowe uruchomienie naszego protokołu. Program ten również jest tylko dodatkiem do naszych protokołów, to one stanowią główną część pracy. W rozdziale tym projekt ten zostanie zaprezentowany opiszemy jego architekturę, biblioteki z których korzysta a także opis jego funkcjonalności. Rozdział zakończymy przykładami użycia tego programu. Powiązane prace oraz problemy otwarte Praca ta powstała bazując na naszej poprzedniej pracy Secure Multiparty Computations on Bitcoin napisanej wraz z Marcinem Andrychowiczem, Stefanem Dziembowskim oraz Łukaszem Mazurkiem [3] (praca ta została odznaczona nagrodą za najlepszą pracę na konferencji 35th IEEE Symposium on Security & Privacy 2014). W [3] zostały wprowadzone bezpieczne obliczenia wielopodmiotowe oraz przedstawione tu protokoły, jednak bez dowodów bezpieczeństwa ani implementacji. Bezpieczny protokół loterii opartej na systemie Bitcoin był również niezależnie opisany przez Adama Back a oraz Iddo Bentov w [4]. Jednak protokół loterii z [4] jest protokołem tylko dla dwóch graczy oraz w przeciwieństwie do naszego protokołu, nie jest on odporny na kowalność transakcji. Temat bezpiecznych obliczeń wielopodmiotowych opartych na systemie Bitcoin był dalej rozwijany niezależnie w [2, 1] oraz w [7]. Prace te wykorzystują system Bitcoin aby zapewnić własność uczciwości w dowolnych obliczeniach wielopodmiotowych gracz, który przerywa protokół zmuszony jest do zapłacenia odpowiedniej kary w bitcoinach. Zobowiązania bitowe w kontekście systemu Bitcoin były rozważane także wcześniej, ale w innym celu. W [6] autorzy stworzyli prostszą wersję zobowiązań, którą wykorzystali do zwiększenia anonimowości transakcji. Natomiast [8] proponuje użyć system Bitcoin jako zamianę zaufanej strony w procesie stemplowania dokumentów znakiem czasowym. Pozostałe prace związane z systemem Bitcoin dzielą się zasadniczo na dwie grupy. Pierwsza z nich stara się analizować graf transakcji tego systemu i na jego podstawie wyciągnąć wnioski na temat użytkowników systemu. Do przykładów prac z tej grupy można zaliczyć m.in. [15]. Kolejną grupę tworzą prace proponujące ulepszenia do systemu Bitcoin. Jedna z ciekawszych z nich to [11] proponująca zmianę (wraz z dowodem poprawności), dzięki której użytkownicy i transakcje będą idealnie anonimowi. Do problemów otwartych w systemie Bitcoin zaliczyć można m.in. stworzenie wydajniejszych kontraktów rozwiązujących istotniejsze problemy niż zwykłą loterię. Ponadto wiele pracy wymaga samo sformalizowanie modelu systemu Bitcoin i dowiedzenie jego własności i bezpieczeństwa w tym modelu. Z powodu braku takiego modelu pojawiają się prace [12, 5] podważające bezpieczeństwo systemu, zatem istotne jest aby dowieść co dokładnie można a czego nie można w tym systemie zrobić. 9
12
13 Rozdział 1 Wiadomości wstępne W rozdziale tym ustalimy notację stosowaną w pracy oraz przypomnimy pewne wiadomości z kryptografii, takie jak bezpieczne obliczenia wielopodmiotowe oraz model z losową wyrocznią. W pracy tej zakładamy znajomość podstawowych pojęć kryptograficznych, takich jak schemat podpisu oraz (kryptograficzne) funkcje haszujące, w związku z tym nie będziemy ich przybliżać. W celu przypomnienia sobie tych pojęć czytelnik może zajrzeć np. do [13] Notacja Dla użytkownika P jego para kluczy: klucz publiczny, klucz sekretny, używane w schemacie podpisu, będą oznaczane odpowiednio przez P.pk oraz P.sk. Funkcję obliczającą podpis kryptograficzny na wiadomości m używając klucza P.sk użytkownika P będziemy oznaczać przez podpis P.sk (m). Natomiast funkcję weryfikującą podpis σ użytkownika P (czyli korzystającą z klucza publicznego P.pk) na wiadomości m będziemy oznaczać przez wer P.pk (m, σ). Funkcja ta zwraca wartość prawda bądź też wartość fałsz, w zależności od tego, czy podpis jest poprawny. Rozkład jednostajny na zbiorze A będziemy oznaczać przez U(A). Wylosowanie wartości x zgodnie z rozkładem R będziemy oznaczać przez x R. Wylosowanie wartości x jednostajnie ze zbioru A będziemy oznaczać przez x $ A. Zatem x $ A oznacza dokładnie to samo, co x U(A). Parametr bezpieczeństwa będziemy oznaczać symbolem λ bądź też 1 λ. Funkcje haszujące będziemy oznaczać literą h. Zatem h jest funkcją {0, 1} {0, 1} λ. W rozdziale 3 będziemy chcieli użyć funkcji haszujących jako zobowiązań bitowych (będą one omówione również w rozdziale 3). W związku z tym będziemy do parametru funkcji haszującej doklejać losowy ciąg bitów długości λ. Tak zmodyfikowaną randomizowaną funkcję będziemy oznaczać literą H. Zatem H jest funkcją {0, 1} λ+ {0, 1} λ. Funkcja ta na parametrze x losuje r $ {0, 1} λ oraz zwraca wartość h(x r), gdzie oznacza konkatenację napisów Bezpiecznie obliczenia wielopodmiotowe Zobowiązania bitowe oraz bezpieczne loterie, które będą omówione w dalszej części pracy, są przykładami ogólniejszego pojęcia w kryptografii, jakim są bezpieczne obliczenia wielopodmiotowe. Mówiąc w skrócie, bezpieczne obliczenia wielopodmiotowe pozwalają użytkownikom nie ufającym sobie wzajemnie wykonać (obliczyć) pewną akcję w taki sposób, że mają oni pewność, że została ona wykonana prawidłowo oraz bezpiecznie. Nie będziemy przedstawiać 11
14 tu bardzo formalnych definicji bezpiecznych obliczeń wielopodmiotowych, gdyż praca ta dotyczy ich tylko częściowo. Postaramy się jednak przybliżyć to pojęcie trochę dokładniej. W bezpiecznych obliczeniach wielopodmiotowych dana jest pewna grupa użytkowników. Nie znają się oni wzajemnie, jednak dla uproszczenia przyjmujemy, że każda para użytkowników połączona jest bezpiecznym kanałem. Oznacza to, że każdy użytkownik może wysłać każdemu innemu wiadomość. Wiadomość ta dojdzie do adresata w niezmienionej formie przed upływem limitu czasu oraz nikt jej nie podsłucha. Użytkownicy nie ufają sobie wzajemnie. Nie zakładamy tutaj, że przeciwnik jest jednostką z zewnątrz, która próbuje się czegoś dowiedzieć o wykonaniu protokołu, tylko że niektórzy z graczy mogą być źli. Oznacza to, że przeciwnik kontroluje (nieznaną) podgrupę użytkowników zna całą ich losowość, komunikacje oraz wykonuje za nich akcje. Inaczej mówiąc źli gracze współpracują ze sobą. Pozostali (uczciwi) gracze wykonują protokół zgodnie z opisem (zawsze zakładamy, że co najmniej jeden uczciwy gracz istnieje). Bezpieczne obliczenia wielopodmiotowe polegają na tym, że przy powyższych założeniach, chcemy obliczyć wartość danej funkcji w sposób bezpieczny. Funkcja ta (zależna od protokołu) przyjmuje jako parametry sekrety użytkowników i jej wynik powinni poznać wszyscy gracze. Bezpieczeństwo obliczenia polega na tym, że przeciwnik nie powinien dowiedzieć się niczego niepowołanego na temat sekretów uczciwych użytkowników. Formalizuje się to poprzez stwierdzenie, że przeciwnik nie jest w stanie dowiedzieć się ani zrobić nic więcej niż w świecie idealnym. Świat idealny polega na tym, że użytkownicy mają do dyspozycji zaufaną stronę oraz połączeni są z nią bezpiecznym kanałem komunikacyjnym. W celu obliczenia wartości funkcji na sekretach, każdy z graczy przesyła swój sekret do zaufanej strony. Jako, że kanał jest bezpieczny, a zaufana strona nie jest pod kontrolą przeciwnika, to w tej fazie przeciwnik nie dowie się niczego o sekretach uczciwych użytkowników. Następnie zaufana strona znając wszystkie parametry funkcji oblicza jej wartość i odsyła ją do wszystkich użytkowników. W świecie idealnym przeciwnik zasadniczo może zrobić trzy rzeczy. Może poznać sekrety użytkowników, których kontroluje. Może również kazać im wysłać wybrane przez siebie wartości do zaufanej strony, czyli może poznać wartość funkcji, gdzie parametry kontrolowanych przez siebie graczy są przez niego wybrane. Ponadto może on próbować wywnioskować coś na temat sekretów uczciwych graczy na podstawie poznanej wartości funkcji. Załóżmy przykładowo, że mamy dwóch użytkowników, z czego jeden jest uczciwy, a drugi zły. Funkcją, którą chcą oni policzyć, jest koniunkcja sekretnych bitów. Jeżeli zły gracz poda zaufanej stronie bit 1, to wartość funkcji będzie równa sekretnemu bitowi drugiego gracza, zatem przeciwnik go pozna. Jeżeli natomiast zły gracz poda bit 0, to wartość funkcji będzie wynosiła 0 a przeciwnik nie dowie się niczego o sekretnym bicie uczciwego użytkownika. Protokół obliczania danej funkcji jest bezpieczny, gdy nie pozwala na na zrobienie niczego więcej, niż w świecie idealnym. Oznacza to np., że przeciwnik nie powinien móc poznać wartości funkcji na dwóch różnych wejściach bądź też poznać sekretu uczciwych graczy, o ile nie jest to możliwe w świecie idealnym. Ponadto każdy z uczciwych graczy musi poznać taką samą wartość funkcji, która jest obliczona na sekretach uczciwych graczy oraz wartościach wybranych przez przeciwnika. Oczywiście jak zwykle w kryptografii zakładamy zaniedbywane (względem 1 λ ) prawdopodobieństwo tego, że któraś z tych własności nie zostanie spełniana. Funkcję f nazywamy zaniedbywalną, jeżeli po pomnożeniu jej przez dowolny wielomian dąży ona ciągle do zera przy rosnących parametrach, tzn. n>0 M x>m f(x) x n < 1. Teorio-informacyjnie nawet proste funkcje, takie jak głosowanie większościowe, nie mogą być obliczone w sposób bezpieczny, jeżeli liczba nieuczciwych graczy wynosi co najmniej jed- 12
15 ną trzecią wszystkich. Jednak już przy podstawowych założeniach kryptograficznych możliwe jest bezpieczne obliczenie dowolnej wielomianowej funkcji dla dowolnie wielu złych użytkowników pierwszą ogólną konstrukcję dla dowolnej wielomianowej funkcji pokazał Yao w [16]. Jednak tutaj również pojawia się pewien problem, gdy złych graczy jest co najmniej połowa wówczas w protokołach brakuje uczciwości, czyli własności mówiącej, że jeżeli przeciwnik pozna wartość funkcji, to również wszyscy uczciwi gracze poznają wartość funkcji. Ciekawe rozwiązanie tego problemu polegające na finansowym karaniu przeciwnika w przypadku, gdy nie przekaże on poprawnej wartości funkcji uczciwemu graczowi, można znaleźć w [2] oraz [1]. Przykłady klasycznych protokołów na bezpieczne obliczenia wielopodmiotowe, tzn. zobowiązania bitowe oraz bezpieczne loterie są opisane wraz z dowodami bezpieczeństwa w kolejnych rozdziałach. Przy rozważaniu naszych rozszerzeń do tych protokołów poprzez użycie systemu Bitcoin będziemy zakładali takie same założenia odnoście przeciwnika oraz bezpieczeństwa kanału jak w tej sekcji Model z losową wyrocznią W całej pracy będziemy pracowali w modelu z losową wyrocznią. Praca w tym modelu jest częstym założenie w protokołach kryptograficznych używających funkcji haszujących. Nieformalnie, mówi ono tyle, że używana funkcja haszująca h jest pewną funkcją jednostajnie losowo wybraną ze zbioru wszystkich funkcji. Funkcji {0, 1} {0, 1} λ jest jednak nieskończenie wiele, zatem musimy to doprecyzować. W modelu z losową wyrocznią funkcja haszująca jest osobnym komponentem protokołu tzw. losową wyrocznią. Komponent ten działa jak normalna funkcja. Można do niego dostarczyć parametr, a dostaniemy z powrotem odpowiadającą mu wartość. Losowa wyrocznia dla nowo dostarczonego parametru losuje niezależnie od poprzednich wyborów wartość y $ {0, 1} λ odpowiadającą temu parametrowi. Jeżeli natomiast spytano się powtórnie o wartość dla danego parametru, to zwracana jest ta sama wartość co wcześniej. W związku z tym strony w protokole nie mają żadnej informacji na temat wartości losowej wyroczni na danym parametrze dopóki nie spytają się o wartość dla dokładniej tego parametru. Model z losową wyrocznią jest oczywiście silniejszy od standardowych założeń o funkcjach haszujących. Z niezależności oraz jednostajnej losowości wartości wynikają w prosty sposób odporność na kolizje czy jednokierunkowość. Więcej na ten temat w rozdziale 3. Model z losową wyrocznią często ułatwia dowody. Czasami dowód jej używający jest jedynym, który jest znany. Dla teoretyków takie dowody są niewystarczające, gdyż w rzeczywistości przy użyciu danego protokołu użyjemy konkretnej funkcji haszującej, a nie jednostajnie wylosowanej funkcji. W związku z tym, zawsze szukają oni dowodów w standardowym modelu, czyli gdy o funkcji haszującej zakładamy jedynie jej podstawowe własności. Dla praktyków jednak dowody w modelu z losową wyrocznią są zwykle wystarczające. Często wynika to z faktu, że protokoły z dowodem w standardowym modelu są mniej wydajne niż protokoły z dowodem jedynie w modelu z losową wyrocznią, a w praktyce wydajność jest bardzo istotna. W systemie Bitcoin model z losową wyrocznią wydaje się jedynym możliwym wyborem, gdyż w procesie kopania bitcoinów (opisanym w następnym rozdziale) zakłada się, że wartości funkcji haszującej są nie tylko różne od siebie, ale także jednostajnie rozłożone w obrazie. Dlatego też nasze protokoły również rozważamy w tym modelu. 13
16
17 Rozdział 2 Opis systemu Bitcoin W rozdziale tym zostanie zaprezentowany system Bitcoin. Zaczniemy od jego własności, idei, powodów dla których ludzie mu zaufali oraz kontrowersji z nim związanych. Następnie przejdziemy do technicznego opisu systemu. Przedstawimy trzy wersje działania systemu począwszy od uproszczonej, a skończywszy na najbardziej skomplikowanej, która jest prawdziwą wersją używaną w praktyce. Na końcu omówimy również praktyczne zasady działania systemu Bitcoin, na które trzeba zwrócić uwagę, dowodząc bezpieczeństwo protokołów opartych na tym systemie Główna idea oraz własności systemu Bitcoin Bitcoin jest to waluta kryptograficzna opisana przez anonimowego autora o pseudonimie Satoshi Nakamoto w [14]. W ostatnim czasie zyskała ona znaczną popularność jej całkowita wartość rynkowa wynosi obecnie ponad 7 mld dolarów. Do powodów, dla których waluta ta zyskała wielu zwolenników, można zaliczyć między innymi możliwość wysyłania łatwo i szybko przelewów dowolnemu innemu użytkownikowi systemu Bitcoin na świecie, opłaty transakcyjne są bardzo niskie a nawet zerowe, użytkownicy są częściowo anonimowi, a waluta jest zdecentralizowana. Anonimowość, czy raczej pseudonimowość w systemie Bitcoin polega na tym, że przy przesyłaniu pieniędzy między użytkownikowi używa się adresów, które są losowymi kluczami publicznymi. W celu zwiększenia anonimowości, dla każdej transakcji używa się nowo wygenerowanego klucza publicznego. Dzięki tym zabiegom trudno jest połączyć konkretną osobę z jego adresami bądź też transakcjami. Jednak powstało już wiele prac np. [15], które starają się powiązać adresy, próbując znaleźć wszystkie kontrolowane przez pojedynczą osobę. Ponadto kupując bitcoiny często trzeba podać swoje dane osobowe. Osoby posiadające dostęp do tych danych mogą być w stanie powiązać ludzi z ich transakcjami. W praktyce problem ten nie wydaje się być bardzo duży i jest akceptowany, gdyż dzięki temu cały system jest wydajniejszy. Decentralizacja systemu Bitcoin polega na tym, że żadne państwo, żadna organizacja czy bank nie sprawują nad nim kontroli. Nikt nie może zabrać lub zamrozić użytkownikom ich pieniędzy, dodrukować bitcoinów w celu wzbogacenia się lub wygenerowania inflacji ani też zamknąć całej waluty. Własność ta jest główną ideą systemu Bitcoin, to dzięki niej ludzie zaczęli jej używać. Widać to było zwłaszcza po sytuacji na Cyprze w 2013 roku, kiedy to państwo zablokowało wszystkie konta bankowe w kraju, a następnie przejęło część środków na nich zgromadzonych niedługo po tych wydarzeniach zainteresowanie systemem Bitcoin oraz cena waluty znacząco podskoczyły. Decentralizacja systemu możliwa jest dzięki temu, że 15
18 system ten działa w rozproszonej sieci P2P, w której użytkownicy łącznie emulują bank łącznie walidują transakcje oraz stan kont użytkowników. Poprawność transakcji oraz zgodność z protokołem tworzenia nowych monet jest łatwe do sprawdzenia lokalnie, zatem użytkownicy trzymają lokalny stan całego systemu i to, na co oni się zgadzają, jest rzeczywistym stanem systemu. Więcej na temat napiszemy w następnej sekcji. Z fizycznego punktu widzenia monety w systemie Bitcoin to zwykłe ciągi zer i jedynek. W celu zapobiegnięcia sytuacji, w której ktoś chciałby wydać tą samą monetę wiele razy, system Bitcoin używa kryptografii głównie podpisów kryptograficznych oraz funkcji haszujących. Bitcoin swoje bezpieczeństwo oraz własności opiera właśnie na sile kryptografii oraz na założeniu, że większość siły obliczeniowej systemu jest w rękach uczciwych użytkowników, działających zgodnie z protokołem. Założenie to wydaje się być rozsądne, gdyż posiadając znaczną część całkowitej siły obliczeniowej systemu prawdopodobnie warto postępować uczciwie 2. Ponadto całkowita moc obliczeniowa systemu Bitcoin jest większa niż całkowita moc wszystkich 500 najmocniejszych superkomputerów na świecie, zatem próba uzyskania większości mocy obliczeniowe byłaby ogromnie kosztowna. Waluta bitcoin cieszy się coraz większym zainteresowaniem nie tylko ze strony zwykłych użytkowników, ale również sklepów i firm. W ostatnim czasie wiele wielkich amerykańskich firm, m.in. DELL, Wikipedia, Amazon, Dish Network, ebay czy PayPall zaczęło akceptować bitcoiny. Mimo ciągłych problemów z trudnością nabycia bitcoinów, to również jest coraz prostsze w wielu miejscach na świecie pojawiają się bankomaty, w których można zamieniać bitcoiny i standardową walutę. Ponadto niektórzy znani ekonomiści jak np. Ben Bernanke oraz angielskie FCA uznały system Bitcoin za godny uwagi i obiecujący. Również coraz częściej ludzie używają bitcoinów samych w sobie płacą nimi nie zamieniając ich na tradycyjne waluty. W związku z tym można uznać, że system Bitcoin coraz bardziej się rozwija oraz coraz częściej jest akceptowany i może zmienić nasze wyobrażenie o pieniądzach. Wiele osób ma różnego rodzaju uwagi w stosunku do systemu Bitcoin. Zarzucają mu m.in., że nie ma wartości, kopanie bitcoinów (opisane w następnej sekcji) marnuje niepotrzebnie dużo energii lub też twierdzi, że waluta ta jest używana głównie przez kryminalistów. Mimo częściowych racji, ciężko się zgodzić z tymi zarzutami. Wartością bitcoina są możliwości, które daje i których nie można uzyskać w standardowych walutach. Są to wspomniane wcześniej łatwość wykonywania tanich i szybkich przelewów oraz decentralizacja. Ponadto wartością danej rzeczy jest cena, jaką ludzie są w stanie za nią zapłacić złoto również nie ma wartości samej w sobie, po prostu jest uważane za drogie, więc jest drogie. Przy wytwarzaniu nowych monet oraz samym istnieniu systemu Bitcoin zużywane są ogromne ilości pracy komputerów więc i energii. Ale przy wydobyciu, transporcie i składowaniu złota również zużywane są znaczne zasoby. Prawdą jest, że niektórzy kryminaliści używają systemu bitcoin, ale wynika to z faktu, że po prostu upraszcza on transakcje, a jeżeli ktoś chce prać brudne pieniądze lub unikać płacenia podatków, to równie dobrze mógłby użyć tradycyjnych walut. I jak już wcześniej wspomniano, coraz więcej zwykłych użytkowników, sklepów i organizacji korzysta z dobrodziejstw systemu Bitcoin. My zajęliśmy się systemem Bitcoin, gdyż umożliwia on połączenie wartości pieniężnych z kryptografią. Ponadto nie jest on konstrukcją teoretyczną, ale jest używany w praktyce. Dodatkowo umożliwia on bardziej skomplikowane operacje finansowe niż tylko przesłanie komuś pieniędzy. Te możliwości oraz pewne szczegóły techniczne systemu Bitcoin omówimy w kolejnych sekcjach tego rozdziału. 2 Nie jest to jednak do końca pewne, patrz np. [12, 5]. 16
19 2.2. Wysokopoziomowe wprowadzenie do systemu Bitcoin i dowodów pracy Przedstawimy teraz uproszczoną wersję systemu Bitcoin. Na system składają się użytkownicy, każdy z nich (oznaczmy go przez P) posiada parę: klucz publiczny, klucz sekretny (P.pk, P.sk). Ponadto w systemie znajduje się jawna KsięgaGłówna zawierająca wszystkie transakcje wykonane w systemie. Transakcje przesyłają pojedyncze monety między użytkownikami. Każda z transakcji składa się z numeru poprzedniej transakcji, którą wydaje, a także klucza publicznego odbiorcy oraz podpisu kryptograficznego nadawcy na tej wiadomości. Transakcja ta jest poprawna, jeżeli wydawana transakcja nie była wcześniej wydana oraz podpis jest poprawnym podpisem odbiorcy wydawanej transakcji. Oczywiście, skoro KsięgaGłówna zawiera wszystkie dotychczas wykonane transakcje, to łatwo jest sprawdzić czy dana transakcja nie została dotychczas wydana. Ponadto klucz publiczny wydawanej transakcji jest w niej zawarty, zatem poprawność podpisu również można łatwo zweryfikować. Dzięki temu każdy użytkownik mając dostęp do KsięgiGłównej może sprawdzić, czy nowa transakcja jest poprawna. Głównym wyzwaniem w tym rozwiązaniu jest implementacja KsięgiGłównej. Ideą systemu Bitcoin jest decentralizacja, zatem nie możemy powierzyć nikomu zadania zarządzania nią. Musimy zaimplementować KsięgęGłówną w sposób rozproszony w systemie, który jest siecią P2P. Każdy z użytkowników powinien mieć własną kopię KsięgiGłównej, będziemy musieli zatem zadbać o to, żeby każdy z nich miał tą samą kopię. Implementacja KsięgiGłównej oparta jest na sprytnej idei dowodów pracy. Dowody pracy, wprowadzone w [10], polegają na pomyśle każącym każdą akcję poprzeć swoją pracą. Pracą tą może być odgadnięcie pewnej zagadki, której rozwiązanie wymaga nakładów pracy, lecz sprawdzenie poprawności wyniku jest bardzo szybkie. Aby akcja została uznana, trzeba do niej dołączyć rozwiązanie odpowiedniej (zależnej od tej akcji) zagadki. Przykład takiej zagadki podamy za chwilę, przy opisie implementacji KsięgiGłównej. Prostym (teoretycznym) przykładem wykorzystania dowodów pracy jest walka z niechcianymi wiadomościami w poczcie . Jeżeli do każdego wysyłanego maila należałoby dołączyć dowód pracy (zależny od maila oraz adresata), której wykonanie trwałoby około sekundę, to ilość niechcianych wiadomości zmalałaby drastycznie, gdyż ideą spamu jest wysyłanie dużej ilości wiadomości do wielu adresatów. Implementacja KsięgiGłównej wykorzystuje dowody pracy następująco: KsięgaGłówna jest tak na prawdę łańcuchem bloków (tak właśnie nazywa się ją w terminologii systemu Bitcoin, my jednak zostaniemy przy nazwie KsięgaGłówna), przy czym każdy blok zawiera transakcje wykonane od momentu stworzenia poprzedniego bloku. Aby zapewnić, że wszyscy użytkownicy zgadzają się na wspólną zawartość KsięgiGłównej, stosuje się regułę mówiącą, że najdłuższy łańcuch bloków jest poprawny. Jednak stworzenie nowego bloku nie jest łatwe. Właśnie tutaj wykorzystuje się dowód pracy aby stworzyć nowy blok (wykopać go) trzeba rozwiązać następującą zagadkę: znaleźć taką liczbę r, że hasz bloku, na który składają się nowe transakcje, liczba r oraz hasz poprzedniego bloku, zaczyna się od ustalonej liczby m zer. Wartość m jest tak dobrana (i dostosowywana co dwa tygodnie), że znalezienie poprawnej wartości r jest w miarę trudne całościowo wszystkim użytkownikom systemu Bitcoin zdarza się to raz na 10 minut. Oczywiście sprawdzenie poprawności rozwiązania jest bardzo szybkie wystarczy policzyć hasz bloku. System Bitcoin swoje bezpieczeństwo opiera na założeniu, że większość mocy obliczeniowej systemu kontrolowane jest przez uczciwych użytkowników, którzy zachowują się zgodnie z protokołem (jednak zgodnie z najnowszymi wynikami badań to założenie powinno być wzmocnione, a temat dalej drążony, gdyż nie stworzono dotychczas żadnego formalnego do- 17
20 wodu bezpieczeństwa systemu Bitcoin a nawet formalnego matematycznego modelu). Istotne jest tu założenie mówiące o połowie mocy obliczeniowej a nie połowie użytkowników, gdyż w rozproszonym systemie P2P bez systemu reputacji łatwo jest tworzyć nowych użytkowników w celu uzyskania większości. Natomiast znaczące zwiększenie swojej mocy obliczeniowej jest kosztowne. Dzięki temu założeniu, uczciwi użytkownicy będą tworzyli (wykopywali) większość bloków, co uniemożliwi tzw. atak podwójnego wydawania monet. Atak ten polega na tym, że mając monetę (która w rzeczywistości jest ciągiem zer i jedynek), możemy spróbować przesłać ją kilku osobom. Nie jest to jednak bezpośrednio możliwe, gdyż tylko jedna z transakcji wydających tą monetę może trafić do KsięgiGłównej. To co można próbować zrobić, to cofnąć historię. Skoro uznajemy, że najdłuższy łańcuch bloków jest poprawny, to można spróbować uruchomić następujący atak: jeżeli transakcja, którą chcemy cofnąć, znajduje się w bloku B k, to spróbujmy stworzyć alternatywny blok B k, który tej transakcji nie zawiera. Jednak aby nasz alternatywny łańcuch został uznany za poprawny, musimy stworzyć wiele nowych bloków B k+1, B k+2,... aż łańcuch ten będzie dłuższy od oryginalnego. Mając znacząco poniżej połowy mocy obliczeniowej całego systemu prawdopodobieństwo sukcesu spada wykładniczo do zera wraz z ilością bloków ponad blokiem B k 1 w oryginalnym łańcuchu. W praktyce uznaje się, że cofnięcie sześciu bloków jest niemożliwe. Przy większych transakcjach warto poczekać, aż po włączeniu naszej transakcji do KsięgiGłównej pojawi się później sześć nowych bloków. Dopiero wówczas możemy uznać, że transakcja jest wykonana poprawnie. System Bitcoin posiada sporą zachętę do kopania nowych bloków. Proces ten jest potrzebny do działania sieci tylko dzięki niemu nowe transakcje dodawane są do KsięgiGłównej, czyli wykonywane. Dla użytkowników natomiast powoduje on koszt w postaci opłat za sprzęt oraz prąd. W związku z tym stosuje się zasadę mówiącą, że każdy kto stworzy (wykopie) nowy blok dostaje w nagrodę 25 nowych bitcoinów (w przyszłości kwota ta będzie spadać, a kopacze będą zarabiać głównie na opłatach, o których napiszemy w następnych sekcjach), co na chwilę obecną warte jest około dolarów. Jest to jedyny sposób tworzenia nowych monet w systemie Standardowe działanie systemu Bitcoin Omówione powyżej działanie KsięgiGłównej jest prawdziwym działaniem w systemie Bitcoin. Jednak wygląd transakcji jest dużo bardziej skomplikowany. Omówimy teraz jak działają tzw. standardowe transakcje, które są używane w prawie wszystkich przypadkach. Transakcje korzystające z bardziej skomplikowanych możliwości są rzadkie nie znaleziono dla nich jeszcze poważnego praktycznego zastosowania. My jednak potrzebujemy ich do konstrukcji naszych protokołów, zatem omówimy je w następnej sekcji. Standardowe transakcje są podobne do transakcji opisanych w poprzedniej sekcji przesyłają one bitcoiny między adresami. Jednak dają one użytkownikom więcej możliwości. Główną różnicą jest to, że transakcje mogą dowolnie zbierać i dzielić monety. Standardową jednostką w systemie Bitcoin jest 1 bitcoin oznaczany 1 B, który jest równy 10 8 satoshi. Transakcje mogą mieć wiele wejść wydawać wiele (wyjść) poprzednich transakcji i mogą dowolnie podzielić swoją wartość między adresy w swoich wyjściach. Zatem (ciągle uproszczona) standardowa transakcja ma następującą postać: T = ([(x 1, wy 1 ),..., (x k, wy k ), (v 1, pk 1 ),..., (v m, pk m )], σ 1,..., σ k ) co oznacza, że transakcja T wydaje wyjście wy 1 transakcji x 1,..., wyjście wy k transakcji x k oraz dzieli całą kwotę następująco: v 1 B dla użytkownika o adresie publicznym pk 1, 18
21 ..., v m B dla użytkownika o adresie publicznym pk m. Zazwyczaj w transakcji używa się dwóch wyjść jedno z nich przesyła ustaloną kwotę do zamierzonego adresata, a drugie wydaje resztę przesyła pozostałą kwotę z powrotem do nadawcy. Pierwsza część transakcji: [(x 1, wy 1 ),..., (x k, wy k ), (v 1, pk 1 ),..., (v m, pk m )] nazywana jest jej treścią, a σ 1,..., σ k to podpisy kryptograficzne tej treści. Transakcja T jest poprawna, jeśli żadne z jej wejść (x 1, wy 1 ),..., (x k, wy k ) nie zostało wcześniej wydane, każde σ i jest poprawnym podpisem na treści przy użyciu klucza, do którego zostały wysłane bitcoiny w wyjściu (x i, wy i ) oraz sumaryczna wydawana kwota v v m jest niewiększa niż sumaryczna kwota na wejściu, czyli niewiększa niż suma wartości wyjść (x 1, wy 1 ),..., (x k, wy k ). Różnica między tymi wartościami jest nazywana opłatą transakcyjną i będzie dokładniej omówiona w następnej sekcji. Kolejną różnicą, wyglądającą na małą, lecz mającą czasami spore znaczenie, jest indeksowanie transakcji. Mianowicie transakcji nie indeksuje się kolejnymi numerami, ale ich haszami. Oznacza to, że x 1,..., x k to w rzeczywistości hasze transakcji, a nie numery. W standardowych transakcjach zmiana ta nie ma znaczenia, zatem omówimy ją dokładniej dopiero w sekcji 2.6. Podobna zmiana dotyczy adresowania transakcji. W rzeczywistości adresem użytkownika w systemie Bitcoin jest odpowiednio zakodowany hasz jego klucza publicznego. W związku z tym, aby wydać transakcje zaadresowaną do siebie, użytkownik musi podać zarówno klucz publiczny, którego hasz jest równy adresowi, jak i podpis treści transakcji odpowiadający podanemu kluczowi publicznemu. Ta zmiana nie ma jednak żadnego wpływu na nasze protokoły i nie będzie stosowana, gdyż zmniejsza czytelność skryptów w transakcjach. Podsumujemy teraz standardowe działanie systemu Bitcoin. Każdy z użytkowników P posiada parę kluczy: publiczny P.pk i sekretny P.sk, oraz ma dostęp do KsięgiGłównej. KsięgaGłówna jest w rzeczywistości łańcuchem bloków, które zawierają dokonane wcześniej transakcje. Gdy jeden z użytkowników A chce przesłać drugiemu B v bitcoinów, to tworzy odpowiednią transakcje T i wysyła ją do sieci Bitcoin (patrz sekcja 2.6). Transakcja ta wygląda następująco: T = ([(x 1, wy 1 ), (v, B.pk), (w v, A.pk)], σ), co oznacza, że A wydaje wyjście numer wy 1 swojej transakcji o haszu x 1. Oznaczmy wartość tego wyjścia przez w. Część tej kwoty o wartości v przesyła do B używając jego adresu będącego jego kluczem publicznym, a pozostałą kwotę przesyła do siebie. Całość podpisuje używając swojego klucza sekretnego uzyskując podpis σ (σ = podpis A.sk ((x 1, wy 1 ), (v, B.pk), (w v, A.pk))). W międzyczasie użytkownicy systemu Bitcoin starają się wykopać nowy blok. Gdy któremuś się to uda, to wysyła go do innych użytkowników, a oni akceptują go poprzez kopanie kolejnego bloku. Dodatkowo szczęśliwy kopacz dostaje 25 B. Blok ten będzie zawierał transakcję T, co oznacza, że transakcja została dokonana. Jednak warto poczekać na kilka (6) nowych bloków, żeby mieć pewność, że nie będzie ona wycofana. Wykopanie pojedynczego bloku trwa około 10 minut, zatem aby mieć pewność, że transakcja nie będzie wycofana, trzeba poczekać około godziny Prawdziwe, najogólniejsze działanie systemu Bitcoin System Bitcoin został tak zaprojektowany, aby za jego pomocą można było operować pieniędzmi w sposób bardziej skomplikowany niż zwykłe przesyłanie pieniędzy. Służą do tego kontrakty, które są możliwe dzięki istnieniu niestandardowych transakcji. Transakcje tego typu różnią się od standardowych tym, że mogą zawierać blokadę czasową transakcji nie 19
Podstawy systemów kryptograficznych z kluczem jawnym RSA
Podstawy systemów kryptograficznych z kluczem jawnym RSA RSA nazwa pochodząca od nazwisk twórców systemu (Rivest, Shamir, Adleman) Systemów z kluczem jawnym można używać do szyfrowania operacji przesyłanych
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
BITCOIN - wirtualna waluta w skrócie Dawid Sobieraj Kilka słów o pieniądzu Każdy pieniądz ma przynajmniej trzy takie cechy: Istnieje możliwość wykazania, że dana kwota pieniądza jest własnością danego
Przewodnik użytkownika
STOWARZYSZENIE PEMI Przewodnik użytkownika wstęp do podpisu elektronicznego kryptografia asymetryczna Stowarzyszenie PEMI Podpis elektroniczny Mobile Internet 2005 1. Dlaczego podpis elektroniczny? Podpis
Dzielenie sieci na podsieci
e-damiangarbus.pl Dzielenie sieci na podsieci dla każdego Uzupełnienie do wpisu http://e-damiangarbus.pl/podzial-sieci-na-podsieci/ Dwa słowa wstępu Witaj, właśnie czytasz uzupełnienie do wpisu na temat
Programowanie w Baltie klasa VII
Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.
Wprowadzenie do PKI. 1. Wstęp. 2. Kryptografia symetryczna. 3. Kryptografia asymetryczna
1. Wstęp Wprowadzenie do PKI Infrastruktura klucza publicznego (ang. PKI - Public Key Infrastructure) to termin dzisiaj powszechnie spotykany. Pod tym pojęciem kryje się standard X.509 opracowany przez
Udany Electronic Cash BitCoin. Andrzej P.Urbański
Udany Electronic Cash BitCoin Andrzej P.Urbański Wczesne pomysły e-cash Transakcje anonimowe jak przy gotówce Kryptograficznie generowane liczby jako monety Monety mogą brać udział w transakcjach bez pośrednictwa
Wyszukiwanie binarne
Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie
3a. Wstęp: Elementarne równania i nierówności
3a. Wstęp: Elementarne równania i nierówności Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie zima 2017/2018 Grzegorz Kosiorowski (Uniwersytet Ekonomiczny 3a. Wstęp: w Krakowie) Elementarne równania
166 Wstęp do statystyki matematycznej
166 Wstęp do statystyki matematycznej Etap trzeci realizacji procesu analizy danych statystycznych w zasadzie powinien rozwiązać nasz zasadniczy problem związany z identyfikacją cechy populacji generalnej
Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki. Paweł Parys. Nr albumu: 209216. Aukcjomat
Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki Paweł Parys Nr albumu: 209216 Aukcjomat Praca licencjacka na kierunku INFORMATYKA w zakresie INFORMATYKA Praca wykonana pod kierunkiem
1. Liczby naturalne, podzielność, silnie, reszty z dzielenia
1. Liczby naturalne, podzielność, silnie, reszty z dzielenia kwadratów i sześcianów przez małe liczby, cechy podzielności przez 2, 4, 8, 5, 25, 125, 3, 9. 26 września 2009 r. Uwaga: Przyjmujemy, że 0 nie
Blockchain i jego zastosowania w edukacji
Blockchain i jego zastosowania w edukacji Adam Sołtysik Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki Seminarium: Systemy Rozproszone 12 października 2017 Co to jest blockchain? Co
Zajęcia nr. 3 notatki
Zajęcia nr. 3 notatki 22 kwietnia 2005 1 Funkcje liczbowe wprowadzenie Istnieje nieskończenie wiele funkcji w matematyce. W dodaktu nie wszystkie są liczbowe. Rozpatruje się funkcje które pobierają argumenty
Indukcja matematyczna
Indukcja matematyczna 1 Zasada indukcji Rozpatrzmy najpierw następujący przykład. Przykład 1 Oblicz sumę 1 + + 5 +... + (n 1). Dyskusja. Widzimy że dla n = 1 ostatnim składnikiem powyższej sumy jest n
Teoretyczne podstawy informatyki
Teoretyczne podstawy informatyki Wykład 12a: Prawdopodobieństwo i algorytmy probabilistyczne http://hibiscus.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Teoria prawdopodobieństwa
Dlaczego nie wystarczają liczby wymierne
Dlaczego nie wystarczają liczby wymierne Analiza zajmuje się problemami, w których pojawia się przejście graniczne. Przykładami takich problemów w matematyce bądź fizyce mogą być: 1. Pojęcie prędkości
Przepustowość kanału, odczytywanie wiadomości z kanału, poprawa wydajności kanału.
Przepustowość kanału, odczytywanie wiadomości z kanału, poprawa wydajności kanału Wiktor Miszuris 2 czerwca 2004 Przepustowość kanału Zacznijmy od wprowadzenia równości IA, B HB HB A HA HA B Można ją intuicyjnie
Kwantowe przelewy bankowe foton na usługach biznesu
Kwantowe przelewy bankowe foton na usługach biznesu Rafał Demkowicz-Dobrzański Centrum Fizyki Teoretycznej PAN Zakupy w Internecie Secure Socket Layer Bazuje na w wymianie klucza metodą RSA Jak mogę przesłać
Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane
Algorytmy i struktury danych Wykład 4 Tablice nieporządkowane i uporządkowane Tablice uporządkowane Szukanie binarne Szukanie interpolacyjne Tablice uporządkowane Szukanie binarne O(log N) Szukanie interpolacyjne
Metody numeryczne w przykładach
Metody numeryczne w przykładach Bartosz Ziemkiewicz Wydział Matematyki i Informatyki UMK, Toruń Regionalne Koło Matematyczne 8 kwietnia 2010 r. Bartosz Ziemkiewicz (WMiI UMK) Metody numeryczne w przykładach
Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA
Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA Grzegorz Bobiński Uniwersytet Mikołaja Kopernika Toruń, 22.05.2010 Kodowanie a szyfrowanie kodowanie sposoby przesyłania danych tak, aby
Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl
System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy
World Wide Web? rkijanka
World Wide Web? rkijanka World Wide Web? globalny, interaktywny, dynamiczny, wieloplatformowy, rozproszony, graficzny, hipertekstowy - system informacyjny, działający na bazie Internetu. 1.Sieć WWW jest
2.1. System kryptograficzny symetryczny (z kluczem tajnym) 2.2. System kryptograficzny asymetryczny (z kluczem publicznym)
Dr inż. Robert Wójcik, p. 313, C-3, tel. 320-27-40 Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska E-mail: Strona internetowa: robert.wojcik@pwr.edu.pl google: Wójcik
0 + 0 = 0, = 1, = 1, = 0.
5 Kody liniowe Jak już wiemy, w celu przesłania zakodowanego tekstu dzielimy go na bloki i do każdego z bloków dodajemy tak zwane bity sprawdzające. Bity te są w ścisłej zależności z bitami informacyjnymi,
SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO
SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO. Rzeczywistość (istniejąca lub projektowana).. Model fizyczny. 3. Model matematyczny (optymalizacyjny): a. Zmienne projektowania
SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa
Autorzy scenariusza: SCENARIUSZ LEKCJI OPRACOWANY W RAMACH PROJEKTU: INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA. PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH
Matematyka dyskretna. Wykład 11: Kryptografia z kluczem publicznym. Gniewomir Sarbicki
Matematyka dyskretna Wykład 11: Kryptografia z kluczem publicznym Gniewomir Sarbicki Idea kryptografii z kluczem publicznym: wiadomość f szyfrogram f 1 wiadomość Funkcja f (klucz publiczny) jest znana
Uproszczony opis obsługi ruchu w węźle IP. Trasa routingu. Warunek:
Uproszczony opis obsługi ruchu w węźle IP Poniższa procedura jest dokonywana dla każdego pakietu IP pojawiającego się w węźle z osobna. W routingu IP nie wyróżniamy połączeń. Te pojawiają się warstwę wyżej
10. Wstęp do Teorii Gier
10. Wstęp do Teorii Gier Definicja Gry Matematycznej Gra matematyczna spełnia następujące warunki: a) Jest co najmniej dwóch racjonalnych graczy. b) Zbiór możliwych dezycji każdego gracza zawiera co najmniej
Ćwiczenia: Ukryte procesy Markowa lista 1 kierunek: matematyka, specjalność: analiza danych i modelowanie, studia II
Ćwiczenia: Ukryte procesy Markowa lista kierunek: matematyka, specjalność: analiza danych i modelowanie, studia II dr Jarosław Kotowicz Zadanie. Dany jest łańcuch Markowa, który może przyjmować wartości,,...,
Wykład VII. Kryptografia Kierunek Informatyka - semestr V. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład VII Kierunek Informatyka - semestr V Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Problem pakowania plecaka System kryptograficzny Merklego-Hellmana
Witamy w firmie Pyszoty.pl. Niniejsza instrukcja ma na celu zapoznanie Państwa z naszym systemem do opłacania i zamawiania obiadów przez internet.
Witamy w firmie Pyszoty.pl. Niniejsza instrukcja ma na celu zapoznanie Państwa z naszym systemem do opłacania i zamawiania obiadów przez internet. Na kolejnych stronach prezentujemy krok po kroku kolejne
Sprawić aby każdy mógł generować korzyści finansowe na rzeczach, za które normalnie trzeba płacić...
Witaj, Istnieje pewnie kilka(naście) albo i więcej powodów, dla których teraz czytasz te słowa. Niezależnie więc od tego, dlaczego teraz je czytasz, chcę Ci podziękować za to, że inwestujesz swój czas
Instrukcja zamawiania obiadów w przedszkolu. Pyszoty.pl
Instrukcja zamawiania obiadów w przedszkolu Pyszoty.pl Witamy w firmie Pyszoty.pl. Niniejsza instrukcja ma na celu zapoznanie Państwa z naszym systemem do opłacania i zamawiania obiadów przez internet
BSK. Copyright by Katarzyna Trybicka-Fancik 1. Bezpieczeństwo systemów komputerowych. Podpis cyfrowy. Podpisy cyfrowe i inne protokoły pośrednie
Bezpieczeństwo systemów komputerowych Podpis cyfrowy Podpisy cyfrowe i inne protokoły pośrednie Polski Komitet Normalizacyjny w grudniu 1997 ustanowił pierwszą polską normę określającą schemat podpisu
Przykładowe zadania z teorii liczb
Przykładowe zadania z teorii liczb I. Podzielność liczb całkowitych. Liczba a = 346 przy dzieleniu przez pewną liczbę dodatnią całkowitą b daje iloraz k = 85 i resztę r. Znaleźć dzielnik b oraz resztę
Ruletka czy można oszukać kasyno?
23 stycznia 2017 Ruletka czy można oszukać kasyno? M. Dworak, K. Maraj, S. Michałowski Plan prezentacji Podstawy ruletki System dwójkowy (Martingale) Czy system rzeczywiście działa? 1/22 Podstawy ruletki
Złożoność informacyjna Kołmogorowa. Paweł Parys
Złożoność informacyjna Kołmogorowa Paweł Parys Serock 2012 niektóre liczby łatwiej zapamiętać niż inne... (to zależy nie tylko od wielkości liczby) 100...0 100 100... 100 100 100 25839496603316858921 31415926535897932384
TEORETYCZNE PODSTAWY INFORMATYKI
1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie
E-konto bankowe bankowość elektroniczna
E-konto bankowe bankowość elektroniczna Nota Materiał powstał w ramach realizacji projektu e-kompetencje bez barier dofinansowanego z Programu Operacyjnego Polska Cyfrowa działanie 3.1 Działania szkoleniowe
Moneta 1 Moneta 2 Kostka O, R O,R 1,2,3,4,5, Moneta 1 Moneta 2 Kostka O O ( )
Nowa matura kombinatoryka i rachunek prawdopodobieństwa Zadania zamknięte (0 1 pkt) 1. Doświadczenie losowe polega na rzucie dwiema symetrycznymi monetami i sześcienną kostką do gry. Prawdopodobieństwo
Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)
Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Funkcja uwikłana (równanie nieliniowe) jest to funkcja, która nie jest przedstawiona jawnym przepisem, wzorem wyrażającym zależność wartości
Jak odróżnić wariację z powtórzeniami od wariacji bez powtórzeń, kombinacji?
Jak odróżnić wariację z powtórzeniami od wariacji bez powtórzeń, kombinacji? Porada niniejsza traktuje o tzw. elementach kombinatoryki. Często zdarza się, że rozwiązujący zadania z tej dziedziny mają problemy
Wykład 4. Określimy teraz pewną ważną klasę pierścieni.
Wykład 4 Określimy teraz pewną ważną klasę pierścieni. Twierdzenie 1 Niech m, n Z. Jeśli n > 0 to istnieje dokładnie jedna para licz q, r, że: m = qn + r, 0 r < n. Liczbę r nazywamy resztą z dzielenia
13. Równania różniczkowe - portrety fazowe
13. Równania różniczkowe - portrety fazowe Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie rzegorz Kosiorowski (Uniwersytet Ekonomiczny 13. wrównania Krakowie) różniczkowe - portrety fazowe 1 /
Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)
Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, 19.06.2005 1 Kryptografia: algorytmy asymetryczne (RSA) Niech E K (x) oznacza szyfrowanie wiadomości x kluczem K (E od encrypt, D K (x)
III. Wstęp: Elementarne równania i nierówności
III. Wstęp: Elementarne równania i nierówności Fryderyk Falniowski, Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie ryderyk Falniowski, Grzegorz Kosiorowski (Uniwersytet III. Wstęp: Ekonomiczny
Trening INTEGRA Dodatkowe dialogi
Trening INTEGRA Dodatkowe dialogi Pobieranie pieniędzy z banku Wersja 1 - Chciałbym/abym wypłacić pieniądze. - Ile dokładnie? - 100 Euro - Proszę o okazanie dokumentu tożsamości. - Mam ze sobą mój paszport
Zastosowanie TI do wymiany informacji USENET. Technologia Informacyjna Lekcja 9
Zastosowanie TI do wymiany informacji USENET Technologia Informacyjna Lekcja 9 USENET Usenet czyli system grup dyskusyjnych, powstał jeszcze przed powstaniem www, jest bardzo popularną usługą. Grupy dyskusyjne
Instrukcja logowania i realizacji podstawowych transakcji w systemie bankowości internetowej dla klientów biznesowych BusinessPro.
Instrukcja logowania i realizacji podstawowych transakcji w systemie bankowości internetowej dla klientów biznesowych BusinessPro aktualizacja: 8 listopada 2017 r. Spis treści: 1. Logowanie do bankowości
lekcja 8a Gry komputerowe MasterMind
lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych
Przykładowe rozwiązania
Przykładowe rozwiązania Poniższy dokument zawiera przykładowe rozwiązania zadań z I etapu I edycji konkursu (2014 r.). Rozwiązania w formie takiej jak przedstawiona niżej uzyskałyby pełną liczbę punktów
Zadanie 1: Protokół ślepych podpisów cyfrowych w oparciu o algorytm RSA
Informatyka, studia dzienne, inż. I st. semestr VI Podstawy Kryptografii - laboratorium 2010/2011 Prowadzący: prof. dr hab. Włodzimierz Jemec poniedziałek, 08:30 Data oddania: Ocena: Marcin Piekarski 150972
2 Kryptografia: algorytmy symetryczne
1 Kryptografia: wstęp Wyróżniamy algorytmy: Kodowanie i kompresja Streszczenie Wieczorowe Studia Licencjackie Wykład 14, 12.06.2007 symetryczne: ten sam klucz jest stosowany do szyfrowania i deszyfrowania;
Instrukcja zamawiania obiadów w szkole. Pyszoty.pl
Instrukcja zamawiania obiadów w szkole Pyszoty.pl Witamy w firmie Pyszoty.pl. Niniejsza instrukcja ma na celu zapoznanie Państwa z naszym systemem do opłacania i zamawiania obiadów w szkole przez internet
[WYSYŁANIE MAILI Z PROGRAMU EXCEL]
c 20140612- rev. 2 [WYSYŁANIE MAILI Z PROGRAMU EXCEL] ZAWARTOŚĆ Wstęp... 3 Funkcje w excelu... 4 Funkcja Hiperłącza... 7 Dodawanie odbiorców... 8 Uzupełnianie tytułu... 8 Wpisywanie treści... 8 Znane problemy...
Protokoły do obliczeń wielopodmiotowych bazujące na kryptowalutach
Protokoły do obliczeń wielopodmiotowych bazujące na kryptowalutach streszczenie rozprawy doktorskiej Marcin Andrychowicz 27 maja 2015 1 Wstęp Niniejsza rozprawa doktorska składa się z 6 artykułów napisanych
Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a);
Ciała i wielomiany 1 Ciała i wielomiany 1 Definicja ciała Niech F będzie zbiorem, i niech + ( dodawanie ) oraz ( mnożenie ) będą działaniami na zbiorze F. Definicja. Zbiór F wraz z działaniami + i nazywamy
Klawiatura. Klawisz Blokady. Klawisz Enter. Wyświetlacz. Klucz cyfrowy FAQ
Klucz cyfrowy FAQ Wyświetlacz Klawiatura Klawisz Blokady Klawisz Enter 1. Co to jest klucz cyfrowy? Klucz cyfrowy daje dostęp do platformy inwestycyjnej KBCmakler lub KBCtrader - posiada dwie podstawowe
Prawdopodobieństwo warunkowe Twierdzenie o prawdopodobieństwie całkowitym
Edward Stachowski Prawdopodobieństwo warunkowe Twierdzenie o prawdopodobieństwie całkowitym W podstawie programowej obowiązującej na egzaminie maturalnym od 05r pojawiły się nowe treści programowe Wśród
Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby
Scenariusz zajęć Moduł VI Projekt Gra logiczna zgadywanie liczby Moduł VI Projekt Gra logiczna zgadywanie liczby Cele ogólne: przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka
Lekcja : Tablice + pętle
Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie
Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:
Ciągi rekurencyjne Zadanie 1 Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie: w dwóch przypadkach: dla i, oraz dla i. Wskazówka Należy poszukiwać rozwiązania w postaci, gdzie
n = p q, (2.2) przy czym p i q losowe duże liczby pierwsze.
Wykład 2 Temat: Algorytm kryptograficzny RSA: schemat i opis algorytmu, procedura szyfrowania i odszyfrowania, aspekty bezpieczeństwa, stosowanie RSA jest algorytmem z kluczem publicznym i został opracowany
Wzór na rozwój. Karty pracy. Kurs internetowy. Nauki ścisłe odpowiadają na wyzwania współczesności. Moduł 3. Data rozpoczęcia kursu
2 slajd Cele modułu 3 Kurs internetowy Wzór na rozwój Nauki ścisłe odpowiadają na wyzwania współczesności Poznasz przykładowy przebieg działań w projekcie edukacyjnym zrealizowanym w ramach projektu Wzór
1 Układy równań liniowych
II Metoda Gaussa-Jordana Na wykładzie zajmujemy się układami równań liniowych, pojawi się też po raz pierwszy macierz Formalną (i porządną) teorią macierzy zajmiemy się na kolejnych wykładach Na razie
Lista 5. Zadanie 3. Zmienne losowe X i (i = 1, 2, 3, 4) są niezależne o tym samym
Lista 5 Zadania na zastosowanie nierównosci Markowa i Czebyszewa. Zadanie 1. Niech zmienna losowa X ma rozkład jednostajny na odcinku [0, 1]. Korzystając z nierówności Markowa oszacować od góry prawdopodobieństwo,
Instrukcja obsługi certyfikatów w programie pocztowym MS Outlook Express 5.x/6.x
Spis treści Wstęp... 1 Instalacja certyfikatów w programie pocztowym... 1 Instalacja certyfikatów własnych... 1 Instalacja certyfikatów innych osób... 3 Import certyfikatów innych osób przez odebranie
Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, Kryptografia: algorytmy asymetryczne (RSA)
Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, 7.06.2005 1 Kryptografia: algorytmy asymetryczne (RSA) Niech E K (x) oznacza szyfrowanie wiadomości x kluczem K (E od encrypt, D K (x)
Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1
Ataki na RSA Andrzej Chmielowiec andrzej.chmielowiec@cmmsigma.eu Centrum Modelowania Matematycznego Sigma Ataki na RSA p. 1 Plan prezentacji Wprowadzenie Ataki algebraiczne Ataki z kanałem pobocznym Podsumowanie
LEKCJA 1. Diagram 1. Diagram 3
Diagram 1 LEKCJA 1 - zaawansowanie czarnych zdecydowanie lepsze, - szansa dojścia czarnych do damki, - przynajmniej jeden kamień białych ginie, ale od czego jest ostatnia deska ratunku - KOMBINACJA! Ale
Bezpieczeństwo usług oraz informacje o certyfikatach
Bezpieczeństwo usług oraz informacje o certyfikatach Klienci banku powinni stosować się do poniższych zaleceń: nie przechowywać danych dotyczących swojego konta w jawnej postaci w miejscu, z którego mogą
Wykład 4. komputerowych Protokoły SSL i TLS główne slajdy. 26 października 2011. Igor T. Podolak Instytut Informatyki Uniwersytet Jagielloński
Wykład 4 Protokoły SSL i TLS główne slajdy 26 października 2011 Instytut Informatyki Uniwersytet Jagielloński 4.1 Secure Sockets Layer i Transport Layer Security SSL zaproponowany przez Netscape w 1994
Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).
Algorytmy definicja, cechy, złożoność. Algorytmy napotykamy wszędzie, gdziekolwiek się zwrócimy. Rządzą one wieloma codziennymi czynnościami, jak np. wymiana przedziurawionej dętki, montowanie szafy z
Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,
1 Kody Tunstalla Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9, 14.04.2005 Inne podejście: słowa kodowe mają ustaloną długość, lecz mogą kodować ciągi liter z alfabetu wejściowego o różnej
Temat: Algorytmy zachłanne
Temat: Algorytmy zachłanne Algorytm zachłanny ( ang. greedy algorithm) wykonuje zawsze działanie, które wydaje się w danej chwili najkorzystniejsze. Wybiera zatem lokalnie optymalną możliwość w nadziei,
ODKŁADAMY NA KONCIE OSZCZĘDNOŚCIOWYM
Zadanie: ODKŁADAMY NA KONCIE OSZCZĘDNOŚCIOWYM Cel zadania: przybliżenie uczniom zagadnień związanych z zakładaniem i korzystaniem z konta bankowego oraz oszczędnościowego. Poszukiwanie najkorzystniejszej
1. MOZILLA THUNDERBIRD (31.3.0) 2 2. WINDOWS LIVE MAIL 2011 13 3. THE BAT HOME EDITION (6.7.7.0 32 BIT) 30
Zakładamy, że użytkownik posiada paczkę pfx z certyfikatem I kluczem prywatnym. Poniższe informacje dotyczą wyłącznie instalacji certyfikatu własnego (z pliku pfx) oraz osoby trzeciej. 1. MOZILLA THUNDERBIRD
Uniwersyteckie Koło Matematyczne - Tajemnicza liczba e.
Uniwersyteckie Koło Matematyczne - Tajemnicza liczba e. Filip Piękniewski Wydział Matematyki i Informatyki Uniwersytetu Mikołaja Kopernika http://www.mat.umk.pl/ philip 17 grudnia 2009 Filip Piękniewski,
Algorytmy i struktury danych. Wykład 4
Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych
Webowy generator wykresów wykorzystujący program gnuplot
Uniwersytet Mikołaja Kopernika Wydział Fizyki, Astronomii i Informatyki Stosowanej Marcin Nowak nr albumu: 254118 Praca inżynierska na kierunku informatyka stosowana Webowy generator wykresów wykorzystujący
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność
Jak napisać program obliczający pola powierzchni różnych figur płaskich?
Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy
III. ZMIENNE LOSOWE JEDNOWYMIAROWE
III. ZMIENNE LOSOWE JEDNOWYMIAROWE.. Zmienna losowa i pojęcie rozkładu prawdopodobieństwa W dotychczas rozpatrywanych przykładach każdemu zdarzeniu była przyporządkowana odpowiednia wartość liczbowa. Ta
Haszowanie. dr inż. Urszula Gałązka
Haszowanie dr inż. Urszula Gałązka Problem Potrzebujemy struktury do Wstawiania usuwania wyszukiwania Liczb, napisów, rekordów w Bazach danych, sieciach komputerowych, innych Rozwiązanie Tablice z haszowaniem
Statystyki: miary opisujące rozkład! np. : średnia, frakcja (procent), odchylenie standardowe, wariancja, mediana itd.
Wnioskowanie statystyczne obejmujące metody pozwalające na uogólnianie wyników z próby na nieznane wartości parametrów oraz szacowanie błędów tego uogólnienia. Przewidujemy nieznaną wartości parametru
Technologia Flash cieszy się coraz większą popularnością. Liczba dostępnych
Flash i PHP 01 Technologia Flash cieszy się coraz większą popularnością. Liczba dostępnych narzędzi do tworzenia prostych oraz złożonych interaktywnych animacji wzrasta z dnia na dzień. Trzeba przyznać,
Statystyka matematyczna i ekonometria
Statystyka matematyczna i ekonometria Wykład 5 dr inż. Anna Skowrońska-Szmer zima 2017/2018 Hipotezy 2 Hipoteza zerowa (H 0 )- hipoteza o wartości jednego (lub wielu) parametru populacji. Traktujemy ją
Organizacja czasu 1
Organizacja czasu 1 Organizacja czasu Czyli jak optymalnie wykorzystać czas. Michał Mielniczuk 2 Do dzieła!!! W tym poradniku, podam Ci kilka sposobów na to jak optymalnie organizować zadania, by zyskać
Statystyka matematyczna i ekonometria
Statystyka matematyczna i ekonometria Wykład 5 Anna Skowrońska-Szmer lato 2016/2017 Hipotezy 2 Hipoteza zerowa (H 0 )- hipoteza o wartości jednego (lub wielu) parametru populacji. Traktujemy ją jako prawdziwą
2. DZIAŁANIA NA WIELOMIANACH
WIELOMIANY 1. Stopieo wielomianu. Działania na wielomianach 2. Równość wielomianów. 3. Pierwiastek wielomianu. Rozkład wielomianu na czynniki 4. Równania wielomianowe. 1.STOPIEŃ WIELOMIANU Wielomian to
Weryfikacja hipotez statystycznych. KG (CC) Statystyka 26 V / 1
Weryfikacja hipotez statystycznych KG (CC) Statystyka 26 V 2009 1 / 1 Sformułowanie problemu Weryfikacja hipotez statystycznych jest drugą (po estymacji) metodą uogólniania wyników uzyskanych w próbie
Informatyka na WPPT. prof. dr hab. Jacek Cichoń dr inż. Marek Klonowski
prof. dr hab. Jacek Cichoń jacek.cichon@pwr.wroc.pl dr inż. Marek Klonowski marek.klonowski@pwr.wroc.pl Instytut Matematyki i Informatyki Wydział Podstawowych Problemów Techniki Politechnika Wrocławska
Instrukcja użytkowania KB tokena
Instrukcja użytkowania KB tokena Wstęp Co to jest KB token? KB token (inaczej token mobilny) jest aplikacją instalowaną w telefonie komórkowym, umożliwiającą generowanie haseł jednorazowych. Token mobilny
teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015
teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015 1 wczoraj Wprowadzenie matematyczne. Entropia i informacja. Kodowanie. Kod ASCII. Stopa kodu. Kody bezprefiksowe.
zdarzenie losowe - zdarzenie którego przebiegu czy wyniku nie da się przewidzieć na pewno.
Rachunek prawdopodobieństwa Podstawowym celem rachunku prawdopodobieństwa jest określanie szans zajścia pewnych zdarzeń. Pojęcie podstawowe rachunku prawdopodobieństwa to: zdarzenie losowe - zdarzenie
Programowanie celowe #1
Programowanie celowe #1 Problem programowania celowego (PC) jest przykładem problemu programowania matematycznego nieliniowego, który można skutecznie zlinearyzować, tzn. zapisać (i rozwiązać) jako problem