Tajemnica bloku Genesis

Kiedy oprogramowanie Bitcoin zostało publicznie ogłoszone w 2009 roku, ważne było, aby węzły dołączające do sieci mogły zbudować wspólną historię blockchain. Satoshi Nakamoto osiągnął to poprzez zakodowanie na sztywno w „bloku Genesis” w oprogramowaniu Bitcoin. Podczas gdy bloki w sieci Bitcoin są zwykle wydobywane przez węzły w sieci, ważne było, aby węzły, z których można było zbudować łańcuch bloków podczas dołączania do sieci, było ważne, aby istniało jedno źródło prawdy, nawet jeśli były pierwszym węzłem, który kiedykolwiek dołączył do sieci. sieć. Dzięki zakodowaniu bloku Genesis w kodzie Bitcoin, istniała gwarancja, że ​​wszystkie węzły dołączające do sieci zaczynają się na tym samym początku.

Blok Genesis owiany jest tajemnicą. W pierwszej transakcji coinbase zaszyfrowany jest ciąg: „The Times 03/Jan/2009 Kanclerz na krawędzi drugiego ratowania banków”. Powszechnie przyjmuje się, że Satoshi dołączył ten ciąg jako znacznik czasu dla bloku Genesis, łącząc go z 3 stycznia 2009 r.

W ciągu ostatnich kilku tygodni w sądzie Craig Wright wygłosił interesujące oświadczenie dotyczące bloku Genesis, które wywołało kpiny. Powiedział (korzystając z skróconego zapisu postępowania sądowego):

„Blok Genesis nie jest wydobywany. To blok kotwiczny. Został zaprojektowany tak, abyś nie mógł ich wydać, ponieważ jeśli go wydasz, może to rozwikłać koniec. To tak, jakbyś robił na drutach lub szył. Musisz związać nić, aby upewnić się, że się nie złamie. Tak więc łańcuch bloków wymaga bloku, który nie jest jak blok kopalniany. Nie jest wydobywany”.

Leniwie zamieszczony cytat z oświadczenia dr Wrighta wywołał kpiny ze strony deweloperów BTC Core Matta Corallo i Petera Todda, przy czym ten pierwszy powiedział, że to „najgłupsza rzecz, jaką kiedykolwiek powiedziano o Bitcoinie”, a drugi marzył o oprawieniu cytatu na swojej ścianie.

Dekodowanie bloku Genesis

Aby zrozumieć blok Genesis, musimy skontekstualizować go za pomocą oryginalnego klienta Satoshi.

Skrót bloku Genesis został wymieniony w pliku main.cpp repozytorium:

const uint256 hashGenesisBlock(“0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce
26f”);

W tym samym pliku kod sprawdza, czy węzeł zapisał blok genezy w bazie danych bloków węzła. Blok ten zawiera wypłatę 50 bitcoinów coinbase na adres 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa (chociaż należy zauważyć, że transakcja jest faktycznie zakodowana jako transakcja Pay to Public Key). Wszystkie informacje dotyczące bloku Genesis są przechowywane w komentowanym kodzie rozpoczynającym się w wierszu 1439 głównego.cpp.

Węzeł utrzymywał dwie bazy danych — bazę bloków i bazę transakcji. Węzeł umieścił blok Genesis w swojej bazie danych bloków, ale wykluczył transakcję coinbase z bazy danych transakcji. W rezultacie każda próba wydania bloku Genesis będzie próbowała wydać monety, które nie istnieją w bazie danych transakcji węzła i zostaną odrzucone przez oprogramowanie. Monety są blokowane za pomocą standardowego skryptu wyjściowego Pay to Public Key (P2PK), w którym ważny podpis przy użyciu klucza prywatnego może odblokować monety jako dane wejściowe do nowej transakcji, ale tylko wtedy, gdy transakcja nadrzędna została rozpoznana przez oprogramowanie węzła w jego baza danych transakcji.

Należy zauważyć, że chociaż oprogramowanie pozostawia tę transakcję poza swoją bazą danych transakcji, nic nie stoi na przeszkodzie, aby węzeł ręcznie dodał ją do swojej bazy danych transakcji (poprzez hard fork). Jeśli węzeł to zrobił i miał poprawny skrypt odblokowujący (podpis) dla transakcji, blok Genesis mógłby zostać wydany na ten łańcuch. Gdyby większość mocy obliczeniowej w sieci zdecydowała się uwzględnić tę transakcję wydatków, wówczas blok Genesis z pewnością można by wydać. Jednak poprzez wykluczenie transakcji Genesis coinbase z bazy danych transakcji, z oryginalnego kodu jasno wynika, że ​​Satoshi wyraźnie zamierzał, aby transakcja blokowa Genesis pozostała niewykorzystana.

Blok Genesis jako kotwica

Satoshi napisał komentarz w oryginalnym kodzie, który definiuje blok Genesis jako „korzeń” łańcucha bloków: „Łańcuch bloków to struktura w kształcie drzewa, zaczynająca się od bloku genezy u podstawy, z każdym blokiem potencjalnie mającym wielu kandydatów do bycia następny blok.”

Podczas gdy kolejne bloki mają potencjalnie wielu kandydatów, blok Genesis jest ustanowiony jako kotwica, z której zbudowane są wszystkie możliwe gałęzie. Aby być dobrą kotwicą, ważne jest, aby węzły w sieci miały kotwicę. Ponieważ blok Genesis zawiera tylko jedną transakcję (transakcję coinbase), wydanie tej transakcji spowodowałoby problem w sieci: jeśli wszystkie transakcje w bloku zostaną wydane, sam blok może zostać usunięty z każdego węzła w sieci. Umożliwiłoby to następnie węzłowi przycięcie wszystkich kolejnych bloków, gdy monety w nich są wydawane. To całkowicie złamałoby właściwość niezmienności zapisu historycznego i spowodowałoby duże problemy dla każdego, kto próbuje zsynchronizować łańcuch nagłówków bloków, nie mówiąc już o pełnym łańcuchu bloków. To by „rozwikłało” blockchain, że tak powiem.

Pamiętaj, że nowatorskie rozwiązanie, którego używa Bitcoin do rozwiązania problemu podwójnego wydawania gotówki elektronicznej, zaczyna się od użycia serwera znaczników czasu, z „każdym dodatkowym znacznikiem czasu [hasz blokowy] wzmacniający te przed nim”. Jeśli pierwsze 1000 bloków może zostać przycięte przez węzeł, to 1001 blok staje się nową kotwicą, wymazując 1000 bloków historii. Byłoby również trywialne dla nowoczesnego ASIC, aby stworzyć 1000 bloków historii z fałszywymi znacznikami czasu w celu oszukania/zaatakowania reszty sieci. Bez jednej kotwicy, skąd wiesz, że to, z czym się synchronizujesz, to nawet Bitcoin?

Nie do wydania

Teraz, kiedy omówiliśmy, dlaczego ważne jest, aby blok Genesis pozostał niewykorzystany, i prawda dotycząca stwierdzenia dr Wrighta o „rozplątaniu” łańcucha, nadal mamy nierozwiązany problem – czy rzeczywiście nie można go wydać?

Dla programistów BTC Core, takich jak Matt Corallo i Peter Todd, musi to być nie do wydania, ponieważ obecne oprogramowanie BTC Core na stałe zakodowuje wykluczenie transakcji coinbase bloku Genesis z zestawu UTXO. Deweloperzy tacy jak Matt i Peter, którzy mają bardzo małą wiedzę na temat systemu ekonomicznego stworzonego przez Satoshi Nakamoto, nie uważają, że Bitcoin może przejść hard fork. Poza niezrozumieniem definicji węzłów przez Satoshiego i opowiadaniem się przeciwko hard forkom, posuwają się nawet do stwierdzenia, że ​​hard forki są niemożliwe pomimo kilkukrotnego hard forku Bitcoina pod przywództwem Satoshiego. Jak pokazała firma BSV podczas przywracania oryginalnego protokołu Satoshi, hard forki są normalną częścią konsensusu Nakamoto w celu aktualizacji sieci.

Matt, Peter i inni noszący kapelusze nie mogą zrozumieć oświadczenia dr Wrighta o wydatkach Genesis Block „rozplątujących” łańcuch, ponieważ mają ograniczoną wiedzę na temat tego, czym jest Bitcoin. Jak omówiliśmy powyżej, wydawanie bloku Genesis jest technicznie możliwe, jeśli odpowiedni klucz prywatny jest używany do tworzenia sygnatury, a większość węzłów (górników) w sieci hard forkuje sieć, aby uwzględnić początkową transakcję Genesis i odpowiednią transakcję wydatków.

Jeśli Satoshi rozumiał, jak niebezpieczne może być wydawanie transakcji blokowej Genesis, to czy ten scenariusz stanowi zagrożenie dla Bitcoina, gdyby Satoshi stworzył poprawną sygnaturę z kluczem prywatnym odpowiadającym adresowi 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?

Okazuje się, że Satoshi zapewnił, że nawet on sam nie może spowodować rozplątania łańcucha.

Nieznany klucz prywatny

W ECDSA, algorytmie podpisu cyfrowego używanym w Bitcoin, podpisy składają się z pary liczb całkowitych — r i s. r jest współrzędną x bezpiecznie, ale losowo wyznaczonego punktu na krzywej eliptycznej, a s jest funkcją klucza prywatnego użytego do utworzenia podpisu i hashem podpisanej wiadomości (w Bitcoin wiadomość jest transakcją samo). W większości przypadków jest to dość proste — posiadacz klucza prywatnego może wygenerować podpis, a inni mogą sprawdzić, czy klucz publiczny odpowiada kluczowi prywatnemu, który pasuje do podpisu.

W Bitcoin mechanizm ten jest wykorzystywany do transakcji typu Pay to Public Key, jak opisano w samej białej księdze:

a graph showing transactions for bitcoin

Oznacza to, że wszystkie monety zamknięte w kluczu publicznym można wydać z odpowiednim kluczem prywatnym. Wprowadza to naszą wspomnianą lukę, w której odpowiedni klucz prywatny do klucza publicznego użytego w transakcji Genesis block coinbase może spowodować „rozplątanie” łańcucha bloków.

Okazuje się jednak, że Satoshi Nakamoto rozwiązał tę lukę w Genesis Bitcoina.

W poście na blogu „The Genesis of Genesis” z 12 kwietnia 2019 r. Craig Wright poetycko opowiada o okolicznościach związanych z uruchomieniem Bitcoina. Pod koniec przedstawia w końcu pewne informacje na temat budowy bloku Genesis. Odwołuje się do techniki, której można użyć do stworzenia „Nieznanego klucza prywatnego”. Cytowany z Advances in Elliptic Curve Cryptography, zapoznaliśmy się z techniką generowania klucza publicznego z losowej wartości (r,s) przy użyciu skrótu dowolnej wiadomości m. Korzystając z tej techniki, widzimy, że teoretycznie możliwe jest wytworzenie klucza publicznego, dla którego odpowiadający mu klucz prywatny jest nieznany nawet samemu Satoshiemu Nakamoto:

a screenshot about unknown private key

Można by to uczynić jeszcze bardziej skomplikowanym — klucz prywatny mógłby być kombinacją informacji, które nigdy nie byłyby znane pojedynczej osobie. To wprowadza interesujące pytanie — jeśli nie istnieje klucz prywatny dla bloku Genesis, czy Satoshi Nakamoto ma informacje o komunikacie m, który został użyty do wygenerowania podpisu, który wygenerował klucz publiczny używany do transakcji coinbase Genesis Block?

W akapicie poprzedzającym tę sekcję widzimy sekcję zatytułowaną „Podpisy własnoręcznie podpisane”:

a screenshot about self-signed signatures

W tym widzimy, że możliwe jest utworzenie samodzielnie podpisanej transakcji Bitcoin przy użyciu klucza prywatnego, który jest obliczany po utworzeniu podpisu. Czy to możliwe, że Satoshi Nakamoto posiada klucz prywatny, który może udowodnić powstanie wiadomości m służącej do generowania klucza publicznego używanego w transakcji coinbase bloku Genesis, jednocześnie nie będąc w stanie podpisać samego bloku Genesis?

Twierdzę, że transakcja Genesis block coinbase pozostaje dla mnie tajemnicą, ale wyobrażam sobie, że nie pozostanie tajemnicą na zawsze.

Autor ; BitcoinSV.pl

Źródło : The mystery of the Genesis block – CoinGeek



Author: BitcoinSV.pl
CEO