Nonce und Difficulty
Zum Zweck des Minings hat die Bitcoin-Blockchain ein zusätzliches Feld pro Block: Das Feld “Nonce” (Abkürzung für „number used once“) enthält eine Zahl, die nur ein einziges Mal in dem jeweiligen Kontext verwendet wird. Außerdem gibt es für den Hashwert der Blockchain die Vorgabe, dass er mit einer bestimmten Anzahl Nullen anzufangen hat. Die Anzahl der Nullen, mit denen der Hash beginnen muss, ist die “Difficulty”. Für die Difficulty 0000 muss der Miner beispielsweise die Nonce-Zahl finden, die zusammen mit den Daten im Block einen Hash ergibt, der mit vier Nullen anfängt. Um nun die richtige Zahl zu finden, muss der Computer durch Trial-and-Error so lange verschiedene Zahlen in das Feld Nonce eingeben und den jeweiligen Hash berechnen, bis er eine Zahl findet, die der Vorgabe entspricht.
In einem Hashgenerator kann man das selbst ausprobieren. Wir benutzen dafür den SHA-1-Algorithmus und den Text derkontext.com. Der Hash dafür ist:
36b042edaf798d15329cf4e5fb8116fce3a0d190
Daran hängen wir nun einfach so oft die Ziffer 1, bis wir einen Hash finden, der mit einer Null anfängt. Die Lösung bekommen wir für derkontext.com111111111111:
0deeeb799f703ae136a51f7e476133ac6c2e02c1
Damit haben wir unsere Nonce-Zahl gefunden: 11111111111. Diese Aufgabe war nun ziemlich einfach, wir hatten nur eine Null, eine einfache Hashfunktion und eine sehr kleine Datenmenge. Beim Mining passiert das Gleiche – nur mit viel größeren Zahlen. Während wir elf Hashes ausrechnen mussten, sind es bei einem Bitcoin-Block viele Milliarden, Billionen oder gar Trillionen.
Wenn jemand nun die Bitcoin-Blockchain manipulieren will, also eine bestätigte Transaktion verändern wollte, um beispielsweise mehr Bitcoins zu erhalten, müsste er so eine Zahl nicht nur für den aktuellen Block ermitteln, sondern für alle Blocks, die auf die veränderte Transaktion folgen. Damit wäre er erheblich langsamer als ein Miner, der nur den aktuellen Block bestätigt, und seine Kopie würde nicht übernommen werden.
Zur Überprüfung müssen die anderen Teilnehmer, die sogenannten “Full Nodes”, nur einen einzelnen Hash errechnen: Den aus der Zahl im Feld Nonce, die der Miner vorgibt, und den Daten im Block. Die Lösung der Aufgabe ist also anspruchsvoll, ihre Überprüfung erfolgt jedoch in ein paar Millisekunden.