Een anonieme
Bitcoin-gebruiker heeft een walletpuzzel permanent in de blockchain gezet. De sleutel zou volledig te reconstrueren zijn met openbare gegevens uit
Satoshi Nakamoto’s Genesis Block.
Het 255 bytes grote bericht verscheen in
Bitcoin-block 963.629. De maker beweert bewust extreem weinig willekeur te hebben gebruikt bij het maken van de wallet.
Dat maakt de transactie tegelijk een puzzel en een beveiligingsles.
Galaxy Research vindt opvallend bericht in block 963.629
Galaxy Research signaleerde de transactie op zondag 23 augustus.
Block 963.629 werd een dag eerder, op 22 augustus rond 19:45 UTC, gemined door Foundry USA.
De transactie bevat een leesbaar bericht van 255 bytes via een OP_RETURN-output. De afzender schrijft daarin dat de wallet is gemaakt met informatie uit het Genesis Block.
Ook staat er dat de gebruikte entropy “extremely low” is.
De maker zegt zelfs geen aparte back-up nodig te hebben gehad, omdat alles wat nodig is al in het eerste Bitcoin-block zou staan.
Dat laatste is alleen een bewering.
De blockchain bewijst dat iemand deze tekst heeft gepubliceerd. Bitcoin controleert niet of de puzzelmaker daadwerkelijk de beschreven methode heeft gebruikt.
Het bericht kostte maar 250 satoshis
De volledige transactie was ongeveer 500 bytes groot.
De miner fee bedroeg slechts 250 satoshis, met een fee rate rond 0,60 satoshi per virtual byte.
Meer dan de helft van de ruwe transactie bestond dus uit het bericht.
Galaxy omschreef de transactie daarom als een grote OP_RETURN.
Dat is tegenwoordig minder technisch uitzonderlijk dan enkele jaren geleden.
Bitcoin Core 30 verhoogde de standaardlimiet voor data-carriertransacties van het oude niveau van 83 bytes naar 100.000 bytes. Ook meerdere OP_RETURN-outputs kunnen sinds die versie standaard worden doorgegeven en gemined.
Een nodebeheerder kan die instellingen zelf aanpassen.
De puzzel doorbreekt dus geen consensusregel door 255 bytes aan tekst te bevatten.
Wat doet OP_RETURN eigenlijk?
OP_RETURN maakt het mogelijk om gegevens in een
Bitcoin-transactie op te nemen.
Zo'n output kan niet als gewone bitcoin worden uitgegeven.
Gebruikers kunnen er bijvoorbeeld korte tekst, hashes of andere informatie mee vastleggen. Zodra de transactie wordt bevestigd, komt die data in de transactiegeschiedenis terecht.
Daar zit een belangrijk verschil.
De
blockchain bewijst dat de gegevens op een bepaald moment zijn opgenomen.
Hij bewijst niet dat de inhoud waar is.
Als iemand via OP_RETURN schrijft dat hij Satoshi Nakamoto is, maakt Bitcoin die persoon niet ineens Satoshi.
Voor deze puzzel geldt dezelfde grens.
Lage entropy vormt de echte aanwijzing
De interessantste zin draait om entropy.
Een veilige private key moet zo onvoorspelbaar mogelijk worden gegenereerd. In normale walletsoftware komt daarvoor cryptografisch sterke willekeur uit het apparaat.
De zoekruimte wordt daardoor astronomisch groot.
Wanneer een maker zijn sleutel daarentegen baseert op een paar openbare getallen, woorden of andere voorspelbare gegevens, stort die veiligheid in.
Denk aan een sleutel die wordt afgeleid van een geboortedatum of bekende zin.
Een aanvaller hoeft dan niet iedere mogelijke Bitcoin-private key te testen.
Hij hoeft alleen de beperkte groep waarschijnlijke invoerwaarden en bewerkingen te proberen.
Dat is precies het idee achter deze puzzel.
Satoshi’s eerste block zit vol mogelijke ingrediënten
Het probleem voor puzzelaars is dat het Genesis Block veel openbare gegevens bevat.
In de
Bitcoin Core-broncode staan de vaste parameters van block 0 nog steeds letterlijk vastgelegd.
De blockhash is:
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
De Unix-timestamp is 1231006505.
De nonce is 2083236893.
Ook de Merkle root, moeilijkheidsgraad en publieke sleutel uit de coinbase-transactie zijn bekend.
Daar komt de beroemdste aanwijzing nog bij.
De Times-tekst kan eveneens onderdeel zijn van de puzzel
Satoshi stopte een krantenkop in de eerste Bitcoin-transactie:
“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”
De tekst verwees naar de Britse krant van 3 januari 2009.
Ook die zin staat nog altijd in de Bitcoin Core-code.
Voor een puzzelmaker zijn er dus genoeg ingrediënten.
De blockhash kan worden gebruikt. De nonce kan worden gebruikt. De datum, timestamp, publieke sleutel of tekst kunnen worden gebruikt.
Misschien zelfs meerdere tegelijk.
De moeilijkheid zit niet in het vinden van deze waarden.
Iedereen heeft ze.
De moeilijkheid zit in de vraag wat de onbekende maker ermee heeft gedaan.
Alle ingrediënten kennen is nog geen private key kennen
Stel dat de maker vijf waarden uit het Genesis Block heeft geselecteerd.
Dan blijven allerlei mogelijkheden over.
In welke volgorde staan ze?
Zijn ze als tekst of als hexadecimale waarden verwerkt?
Zijn ze achter elkaar gezet?
Is er SHA-256 overheen gegaan?
Is een getal opgeteld bij een andere waarde?
Is slechts een deel van een hash gebruikt?
Zelfs een beperkte verzameling openbare ingrediënten kan daardoor veel mogelijke afleidingsmethoden opleveren.
“Extreem lage entropy” maakt de puzzel makkelijker dan het zoeken door de volledige private-keyruimte.
Het betekent niet automatisch dat de oplossing triviaal is.
Dit is géén ontdekking van Satoshi’s private key
Daar ligt ook de grootste val voor sensationele headlines.
De puzzel heeft geen bewezen toegang tot verloren bitcoins van Satoshi Nakamoto.
Er is geen aanwijzing dat iemand een oude private key van Satoshi heeft gereconstrueerd.
De onbekende gebruiker heeft volgens zijn eigen bericht een nieuwe wallet gemaakt en daarvoor data uit het Genesis Block gebruikt.
Dat is iets volledig anders.
De Genesis-data is openbaar. Iedereen kan vandaag dezelfde blockhash, nonce of krantenkop gebruiken om zelf een zwakke sleutel te maken.
Dat levert geen toegang op tot de oorspronkelijke wallets van Satoshi.
De originele 50 BTC horen niet bij deze puzzel
Ook de eerste mining reward van 50
BTC moet erbuiten worden gehouden.
Bitcoin Core zegt in zijn eigen broncode dat de output uit de Genesis Block-transactie niet kan worden uitgegeven, omdat deze oorspronkelijk niet in de database met uitgeefbare outputs terechtkwam.
Die 50 BTC staat daardoor technisch apart van normale mining rewards.
CryptoBenelux schreef eerder over een gebruiker die zelfs
2,565 BTC naar het bekende Genesis-adres stuurde.
De nieuwe puzzel verandert niets aan die oude coins.
Hij gebruikt alleen informatie uit Satoshi’s eerste block als grondstof.
Een oplossing moet cryptografisch bewijs opleveren
Wie zegt de puzzel te hebben opgelost, kan dat in principe hard aantonen.
De sterkste methode is een geldige handtekening met de afgeleide private key of een transactie vanuit het bijbehorende adres.
Dan staat vast dat iemand over de sleutel beschikt.
Zelfs dan blijft nog één probleem bestaan.
De oorspronkelijke puzzelmaker kent die private key zelf waarschijnlijk ook.
Als coins vanuit het adres bewegen, bewijst dat dus niet automatisch dat een externe puzzelaar heeft gewonnen. De maker kan zijn eigen wallet zelf leeghalen.
Een oplosser kan daarom aanvullend zijn afleidingsmethode openbaar maken.
Anderen kunnen vervolgens controleren of dezelfde Genesis-data inderdaad naar dezelfde sleutel leidt.
Vooralsnog ontbreekt zo’n geverifieerde oplossing
Op het moment van schrijven is geen overtuigende publieke oplossing vastgesteld.
Ook de identiteit van de maker is onbekend.
Dat maakt claims dat “Satoshi’s code is gekraakt” of dat een oude Bitcoin-wallet is opengebroken veel te zwaar.
Wat wél hard staat: een gebruiker heeft een nieuwe on-chain uitdaging gepubliceerd die zegt bewust slechte randomness te gebruiken.
Meer nog niet.
Zwakke sleutels zijn buiten puzzels levensgevaarlijk
Daar zit de serieuze kant van dit verhaal.
Een private key is alleen veilig zolang anderen hem praktisch niet kunnen raden.
Zelf een slimme zin, datum of publiek getal bedenken voelt misschien willekeurig.
Voor een computer is dat vaak helemaal niet willekeurig.
Hetzelfde geldt voor een
wallet die met een voorspelbare random generator wordt gemaakt.
Een aanvaller kan lijsten met waarschijnlijke invoer proberen en daar automatisch adressen uit afleiden.
Heeft één kandidaat toegang tot een wallet met saldo, dan hoeft de eigenaar daar niets van te merken totdat de bitcoin wordt verstuurd.
Een seed phrase hoort juist uit sterke willekeur te komen
Moderne wallets proberen precies het tegenovergestelde van deze puzzel te doen.
Ze genereren een grote hoeveelheid cryptografisch sterke willekeur en zetten die eventueel om in herstelwoorden.
De gebruiker hoeft zelf geen “originele” woorden te verzinnen.
Dat is veiliger.
Een menselijke gedachte is vaak veel voorspelbaarder dan mensen zelf denken.
Ook een correct gegenereerde seed moet daarna geheim blijven. CryptoBenelux liet recent zien hoe malware zelfs
seed phrases uit screenshots probeert te halen.
Sterke entropy beschermt niet meer wanneer iemand de uiteindelijke herstelzin zelf weggeeft.
De puzzel draait Satoshi’s eerste block bewust binnenstebuiten
Het Genesis Block vormt normaal juist een publiek anker.
Iedere Bitcoin-node kent dezelfde hash en dezelfde parameters. Geheimhouding speelt daarbij geen enkele rol.
De onbekende maker doet nu iets wat je bij een echte wallet nooit zou moeten doen: die volledig openbare informatie gebruiken om een geheime sleutel reproduceerbaar te maken.
Als de claim klopt, ligt de sleutel dus niet verborgen in onbekende data.
Hij ligt ergens in de manier waarop bekende Genesis-data is gecombineerd.
Dat maakt block 963.629 een merkwaardige toevoeging aan de Bitcoin-geschiedenis.
Satoshi maakte zijn eerste block openbaar zodat iedereen Bitcoin kon verifiëren. Zeventien jaar later probeert iemand uit precies die openbaarheid weer een private key te laten raden.