Aktualny czas:0:00Całkowity czas trwania:10:32
0 punktów energii
Uczysz się do testu? Skorzystaj z tych 8 lekcji na temat Pieniądze, bankowość i banki centralne.
Zobacz 8 lekcji
Transkrypcja filmu video (w języku angielskim)
"Proof of work" (dowód pracy) to protokół umożliwiający udowodnienie, że ktoś wykonał znaczącą pracę obliczeniową. Protokoły te można porównać do układanek. Elementy układanki da się złożyć w całość, ale wymaga to sporo wysiłku i niczego nie zrobi się na skróty. A to, czy włożono wysiłek, można łatwo sprawdzić. Zajmuje to znacznie mniej czasu niż wykonanie pierwotnego zadania. Takie protokoły mają wiele zastosowań. Np. w Bitcoinie. Ten elektroniczny system płatności wykorzystuje protokół "proof of work" do tworzenia tzw. łańcuchów bloków. W Bitcoinie dowód pracy jest stosowany od bardzo niedawna, ale protokoły te wykorzystywano już wcześniej. Protokoły dowodu pracy służyły np. do odpierania ataków DoS (blokady usług). Aby spełniona została prośba o dostęp do danej usługi, trzeba rozwiązać określone zadanie obliczeniowe, dowód pracy. Dopiero wtedy można uzyskać dostęp do usługi. Wykonanie tej pracy obliczeniowej osłabia jednostkę proszącą o ten dostęp. Natomiast podmiot proszony o dostęp łatwo sprawdzi, czy wykonano obliczenia. Dopiero gdy stwierdzi, że tak, udzieli dostępu. Pierwszym zastosowaniem protokołów "proof of work", o jakim mi wiadomo, było blokowanie spamu. Wszyscy wiemy, czym jest spam: to niechciane e-maile, które przychodzą, choć o to nie prosiliście. Protokół "proof of work" może zostać powiązany z konkretną wiadomością. Zupełnie jakbyście naklejali znaczek na list, tylko że zamiast pieniędzmi płacicie za znaczek mocą obliczeniową komputera. Dla uprawnionego nadawcy wysyłającego małą liczbę wiadomości ten protokół to nic takiego. Zaledwie drobna trudność, bo obliczenia wykonuje się bardzo niewiele razy. Przeszkoda niepozbawiona sensu. Dla spamera wysyłającego wiele wiadomości, setki tysięcy lub miliony, koszty mogą być zaporowe, skoro trzeba zaangażować taką moc obliczeniową po wysłaniu każdego e-maila do każdego odbiorcy. Ponieważ macie ogólne pojęcie o zastosowaniu tych protokołów, przedstawię ich działanie w praktyce. Charakterystyczne dla tych protokołów jest to, że zazwyczaj współdziałają z danym ciągiem zapytań. Ten ciąg zapytań będę oznaczał literą <i>c</i>. Niech <i>c</i> będzie ciągiem zapytań. Osoba, która próbuje wykonać protokół i dowieść wykonanej pracy postara się przedstawić odpowiedni dowód odnoszący się do tego ciągu zapytań. Będzie to odpowiedź na ten ciąg, o specyficznych, określonych właściwościach matematycznych. Taki ciąg zapytań, np. w przypadku spamu, może być wiadomością e-mail. Jest więc ścisły związek z wykonywanym zadaniem. Druga strona musi podać ciąg odpowiedzi. Nazwijmy go... Ciąg odpowiedzi nazwijmy <i>r</i>. Albo lepiej użyjemy litery <i>p</i>. Jak "proof", czyli dowód. Dowód albo odpowiedź. Osoba dowodząca pracy musi podać ciąg odpowiedzi taki, by można było skoordynować pytanie z odpowiedzią i do obu zastosować kryptograficzną funkcję skrótu, np. SHA-256 lub inną tego typu... Jeśli połączę ciąg zapytań z ciągiem odpowiedzi i zastosuję przekształcenia matematyczne kryptograficznej funkcji skrótu, to chcę uzyskać ciąg odpowiedzi taki, że wynik działania funkcji będzie mieć specyficzną własność. Prefiks wyniku, pierwsze bity, mają być zerami. Powiedzmy, że pierwsze 40, 30 czy inną liczbę bitów będą stanowić zera. Resztę - niekoniecznie. Staramy się utworzyć ciąg odpowiedzi powiązany z ciągiem zapytań, a ich wzajemna relacja ma odniesienie do konkretnej kryptograficznej funkcji skrótu. Uwzględnia to, jaki będzie wynik funkcji skrótu, gdy ciąg odpowiedzi zostanie powiązany z ciągiem zapytań. Jeśli macie dobrą kryptograficzną funkcję skrótu, to sposób na znalezienie takiego ciągu odpowiedzi jest jeden: wypróbowanie wielu różnych możliwości. Trzeba próbować, póki nie znajdzie się to, co zadziała. Gdybyście musieli znaleźć wynik zawierający 40 kolejnych zer, wymagałoby to 2 do potęgi 40 prób. Dwa do czterdziestej wywołań funkcji skrótu! Aby wypróbować 2 do potęgi 40 ciągów, żeby znaleźć jeden spełniający warunek, trzeba by, w przybliżeniu, biliona prób. Wypróbowując bilion ciągów i z każdego robiąc skrót, prawdopodobnie znaleźlibyście jeden z czterdziestoma zerami na początku. Czasami trzeba znacznie mniej niż biliona prób, czasami więcej. Możecie mieć szczęście lub pecha. Przeciętnie trzeba około biliona prób, by znaleźć ciąg, w którym 40 pierwszych bitów stanowią zera. Nie jest to łatwe, ale niemożliwe - też nie. A dlaczego tak trudno jest znaleźć metodę wydajniejszą niż kolejne próby? Pamiętajcie, że wynik kryptograficznej funkcji skrótu wygląda na losowy. Przypomina wyniki serii rzutów monetą. Jakbyśmy rzucali monetą i orzeł oznacza zero, a reszka - jedynkę. Sprowadza się to do pytania: "Przy 40 rzutach monetą jaka jest szansa, że 40 razy z rzędu wypadnie orzeł?". Oczywiście prawdopodobieństwo jest bardzo małe, ale jednak istnieje. Gdybyście wzięli 40 monet i rzucili nimi bilion razy, to moglibyście się spodziewać, że w jednej próbie na wszystkich 40 monetach będzie widać orła. Raz na bilion prób. Wymagania można zaostrzyć lub osłabić. Możecie zażądać jeszcze więcej obliczeniowego wysiłku przy znajdowaniu ciągu odpowiedzi. Wykonania jeszcze więcej pracy. W takim przypadku wystarczy zwiększyć liczbę zer na początku. Każde dodatkowe zero podwoi przeciętną potrzebną moc obliczeniową. Bo jeszcze jedna moneta musiałaby pokazać się jako orzeł. Trzeba by zatem podwoić liczbę rzutów. Gdybym miał wykonać 41 rzutów i miałoby wypaść 41 orłów, wymagałoby to dwukrotnie więcej wysiłku niż przy 40 orłach. Analogicznie, zawsze gdy zmniejszycie wymogi o jedno zero, potrzebna siła obliczeniowa zmaleje o połowę. Gdybym np. wymagał, aby zerami było pierwszych 39 bitów, to w porównaniu z 40 zerami wystarczy połowa rzutów. Dobre jest to, że gdy ustalicie rozwiązanie... ktoś wykona bilion prób i znajdzie ciąg spełniający warunek, to już łatwo jest potwierdzić, że podano prawidłowy dowód pracy. Wystarczy poddać ciąg zapytań i ciąg odpowiedzi działaniu funkcji skrótu. Jeśli np. ktoś proponuje ciąg... nazwijmy go p'... ...to wystarczy wziąć ciąg zapytań c oraz p' i wprowadzić je do funkcji skrótu. Zobaczycie, czy pierwsze 40 bitów to zera. Wystarczy więc raz zastosować funkcję skrótu do połączonych c i p'. Można wtedy sprawdzić, czy wynik ma z przodu tyle zer, ile trzeba. Jeśli tak, to dowód pracy jest prawdziwy. Przekonaliście się, że ktoś poświęcił dużo czasu, wykonał wiele prób, by przedstawić ciąg p'</i>, że połączenie c i p' po zastosowaniu funkcji skrótu daje odpowiednią liczbę zer. Jak widzicie, te schematy są proste i sprytne jednocześnie. Prowadzą do uzyskania ciągu odpowiedzi będącego w konkretnej relacji matematycznej z ciągiem zapytań. Mam nadzieję, że ten film dał wam ogólne pojęcie o mechanizmie działania protokołów "proof of work".