Mining Bitcoin mit Bleistift und Papier
Ich wollte sehen, wie praktisch es wäre Bitcoin mit Bleistift und Papier zu mir. Es stellt sich heraus, dass der SHA-256-Algorithmus für den Bergbau ziemlich einfach ist und in der Tat von hand vorgenommen werden kann. Es überrascht nicht, der Prozess ist sehr langsam im Vergleich zu Hardware-Bergbau und ist völlig unpraktisch. Aber den Algorithmus manuell durchführen, ist eine gute Möglichkeit zu verstehen, wie das genau funktioniert.
Die Mining-Prozess
Bitcoin-Mining ist ein wesentlicher Bestandteil der Sicherheit von Bitcoin-System. Die Idee ist, dass Bitcoin-Miner-Gruppe eine Reihe von Bitcoin-Transaktionen in einen Block, dann wiederholt ausführen einen kryptografischen Vorgang genannt Hash zig Millionen Mal, bis jemand einen speziellen extrem selten Hash-Wert findet. An dieser Stelle der Block abgebaut worden und wird Teil der Bitcoin-Block-Kette. Der Hash selbst nicht Aufgabe nichts nützliches an sich, sondern weil Suche nach einer erfolgreichen Block so schwierig ist, es sorgt dafür, dass kein Mensch die Mittel, um das Bitcoin-System übernehmen. Für mehr Details über Bergbau siehe meine Bitcoin Mining Artikel.
Eine kryptographische Hash-Funktion nimmt einen Block von Eingabedaten und eine kleinere, unvorhersehbare Ausgabe erstellt. Die Hash-Funktion ist so konzipiert, es keine "Abkürzung gibt" auf die gewünschte Ausgabe zu erhalten – du musst nur Blöcke hashing zu halten, bis Sie einen per brute Force finden, die funktioniert. Für Bitcoin ist die Hash-Funktion eine Funktion namens SHA-256. Um zusätzliche Sicherheit zu gewährleisten, wendet Bitcoin die SHA-256-Funktion zweimal, ein Prozeß bekannt als Doppel-SHA-256.
In Bitcoin ist ein erfolgreiche Hash, die mit genug Nullen beginnt. [1] so, wie es selten, eine Telefonnummer oder Kfz-Kennzeichen in mehrere Nullen enden zu finden ist, ist es selten, einen Hash beginnend mit mehreren Nullen zu finden. Aber Bitcoin ist exponentiell schwieriger. Derzeit muss ein erfolgreicher Hash mit ca. 17 Nullen beginnen, so einzige aus 1.4x1020 Hashes erfolgreich sein wird. Das heißt, ist zu finden einen erfolgreiche Hash schwieriger als die Suche nach einem bestimmten Sandkorn aus alle Sandkörner auf der Erde.
Das folgende Diagramm zeigt einen Block in die Bitcoin-Blockchain zusammen mit dem Hash. Die gelben Bytes werden verschlüsselt, um die Blockhash generiert. In diesem Fall beginnt die resultierende Hash mit genug Nullen, so Bergbau erfolgreich war. Der Hash wird jedoch fast immer nicht erfolgreich sein. In diesem Fall der Bergmann ändert die Nonce Wert oder anderen Blockinhalt und versucht es erneut.
Struktur eines Bitcoin-Blocks
Der Hash-Algorithmus SHA-256 von Bitcoin verwendet
Der Hash-Algorithmus SHA-256 nimmt Eingabeblöcke 512 Bits (d. h. 64 Byte), kombiniert die Daten kryptographisch und generiert eine 256-Bit (32 Byte) Ausgabe. Der SHA-256-Algorithmus besteht aus einer relativ einfachen Runde 64 Mal wiederholt. Das folgende Diagramm zeigt eine Runde, die acht 4-Byte Eingänge nimmt — A bis H – dann führt ein paar Operationen, und generiert neue Werte von A bis H.
Einer Runde von SHA-256 Algorithmus zeigt 8 Eingang Blöcke A-H, die Verarbeitungsschritte und die neuen Blöcke. Diagramm erstellt von Kockmeyer, CC BY-SA 3.0.
Die blauen Felder mischen sich die Werte in nicht-lineare Weise, die schwer zu kryptografisch analysieren sind. Da der Algorithmus mehrere unterschiedliche Funktionen nutzt, ist es schwieriger, einen Angriff zu entdecken. (Wenn Sie eine mathematische Verknüpfung zu erfolgreichen Hashes generieren herausfinden könnte, könnte Sie Bitcoin-Mining übernehmen.)
Die Ma meisten Box sieht die Bits von A, B und C. Für jede Position wenn die Mehrheit der Bits 0, gibt es 0. Ansonsten gibt es 1. Das heißt, betrachten Sie für jede Position in A, B und C, die Anzahl der 1 Bits. Wenn es Null oder eins, Ausgang 0 ist. Wenn es zwei oder drei, Ausgang 1.
Feld Σ0 dreht sich die Bits von A drei gedrehte Versionen zu bilden, und dann fasst sie zusammen modulo 2. Das heißt, wenn die Anzahl der 1 Bits ungerade ist, ist die Summe 1; Andernfalls ist es 0. Die drei Werte in der Summe sind an 2 Bits, 13 Bits und 22 Bits eine gedreht.
Feld Ch "wählen Sie" wählt Ausgang Bit basierend auf dem Wert von Eingang E. Ein bisschen E ist 1 der Ausgangs-Bit das entsprechende Bit f. Ein bisschen E ist 0, die Ausgangs-Bit das entsprechende Bit des G. Auf diese Weise werden die Bits von F und G gemischt zusammen basierend auf dem Wert von E.
Das nächste Feld Σ1 dreht sich und fasst die Bits des E, ähnlich Σ0 , außer die Verschiebungen 6, 11 und 25 Bits sind.
Die roten Kästchen führen Sie 32-Bit-Zusatz, generieren neue Werte für A und E. Die Eingabe Wt basiert auf der input-Daten, leicht verarbeitet. (Dies ist, wo der Algorithmus den Eingangsblock zugeführt bekommt.) Die Eingabe Kt ist eine Konstante definiert für jede Runde. [2]
Wie aus dem obigen Diagramm ersichtlich ist, sind nur A und E in einer Runde geändert. Die anderen Werte durchlaufen unverändert, mit dem alten Wert immer der neuen B-Wert der alten B-Wert immer den neuen C-Wert und so weiter. Obwohl jeder Runde von SHA-256 nicht die Daten ändert wird viel, nach 64 die input-Daten runden vollständig verschlüsselt werden. [3]
Manuelle Bergbau
Das nachfolgende Video zeigt, wie die oben beschriebenen Hash SHA-256-Schritte mit Bleistift und Papier durchgeführt werden können. Die erste Runde um einen Block von mir Hashing durchführen Abschluss dieser Runde dauerte 16 Minuten, 45 Sekunden.
Zu erklären, was auf dem Papier ist: Ich habe jeder Block A bis H in Hex auf einer separaten Zeile geschrieben und legte den binären Wert unten. Maj-Betrieb erscheint unter C, und die Verschiebungen und Σ0 erscheinen über Zeile A. Desgleichen, Vorgang auswählen erscheint unter G, und die Schichten und Σ1 über E. In der unteren rechten Ecke eine Reihe von Bedingungen werden addiert, die ersten drei rote Summe Felder entsprechend. In der oberen rechten Ecke diese Summe wird verwendet, um den neuen Wert generieren und in der Mitte rechts, diese Summe wird verwendet, um den neuen E-Wert generieren. Alle diese Schritte entsprechen den Diagramm und Diskussion oben.
Ich führte auch manuell einen anderen Hash Runde die letzte Runde zu beenden, hashing die Bitcoin-Block. In der folgenden Abbildung ist die Hash-Ergebnis in gelb hervorgehoben. Die Nullen in diesem Hash zeigen, dass es eine erfolgreiche Hash. Beachten Sie, dass die Nullen am Ende des Hash. Der Grund ist, dass Bitcoin ungünstig alle Bytes, die von SHA-256 erzeugt kehrt. [4]
Bleistift und Papier-Finale von SHA-256, zeigt einen Bitcoin-Block erfolgreich abgebaut.
Was bedeutet dies für Bergbau-hardware
Jeder Schritt von SHA-256 ist sehr einfach in digitale Logik implementieren – einfache boolesche Operationen und 32-Bit-Zusatz. (Wenn Sie Elektronik studiert haben, können Sie wahrscheinlich die Schaltungen bereits visualisieren.) Für diese Reaon können benutzerdefinierte ASIC-Chips den SHA-256-Algorithmus sehr effizient in Hardware, indem Hunderte von Runden auf einem Chip parallel implementieren. Die folgende Abbildung zeigt einen Bergbau-Chip, der auf 2 Milliarden Hashes pro Sekunde ausgeführt; Zeptobars hat mehr Fotos.
Der Siliziumchip innerhalb einer Bitfury ASIC-Chip. Dieser Chip Minen Bitcoin an 2-3 Ghash/Sekunde. Bild von Zeptobars. (CC BY 3.0)
Im Gegensatz dazu verwenden Litecoin, Dogecoin und ähnliche Altcoins Scrypt-Hash-Algorithmus, die absichtlich entworfen, um in Hardware schwer umzusetzen sein. Es speichert 1024 verschiedene Hash-Werte in den Speicher und vereint diese in unvorhersehbarer Weise um das Endergebnis zu erhalten. Infolgedessen ist viel mehr Schaltungen und Speicher für Scrypt als für SHA-256-Hashes erforderlich. Sie können die Auswirkungen sehen, indem man Bergbau Hardware, die Tausende Male für Scrypt (Litecoin usw.) als für SHA-256 (Bitcoin) langsamer ist.
Fazit
Der SHA-256-Algorithmus ist überraschend einfach, leicht genug, um von hand machen. (Die elliptische Kurve Algorithmus zum Signieren von Bitcoin-Transaktionen wäre sehr schmerzhaft, von hand zu tun, da es viele der Multiplikation von 32-Byte-Ganzzahlen hat.) Einer Runde von SHA-256 von hand zu tun hat mich 16: 45 Minuten. Bei diesem Tempo würde hashing eine volle Bitcoin Block (128 Runden) [3] 1,49 dauert Tage, für eine Hash-Rate von 0,67 Hashes pro Tag (obwohl ich wahrscheinlich schneller mit etwas Übung bekommen würde). Im Vergleich dazu hat aktueller Bitcoin Mining Hardware mehrere Terahashes pro Sekunde über eine Trillionen mal schneller als meine manuelle hashing. Unnötig zu sagen, ist die manuelle Bitcoin-Mining überhaupt nicht praktisch. [5]
Ein Reddit Leser fragte nach meinen Energieverbrauch. Es gibt nicht viel körperlicher Anstrengung, also vorausgesetzt, einen Grundumsatz von 1500kcal/Tag, manuelle Hash klappt mit fast 10 Megajoule/Hash. Ein typische Energieverbrauch für Bergbau-Hardware ist 1000 Megahashes/Joule. So bin ich weniger energieeffizient durch einen Faktor von 10 ^ 16 oder 10 Billiarden. Die nächste Frage ist die Energiekosten. Eine billige Quelle der Energie aus der Nahrung ist Donuts bei $0,23 für 200 Kilokalorien. Strom hier ist $0,15 Cent pro Kilowattstunde, was billiger um den Faktor 6,7 - näher als ich erwartet hatte. So ist meine Energiekosten pro Hash etwa 67 Billiarden Mal Bergbau Hardware. Es ist klar, ich werde nicht mein Vermögen aus manuellen Bergbau zu machen, und ich habe nicht sogar enthalten die Kosten für das Papier und die Bleistifte brauche ich.
Fußnoten
[1] Es ist nicht genau die Anzahl der Nullen am Anfang des Hash, der was zählt. Um genau zu sein, muss der Hash unter einen bestimmten Wert liegen, der den aktuellen Bitcoin-Schwierigkeitsgrad abhängt.
[2] die Quelle der Konstanten verwendet in SHA-256 ist interessant. Die NSA entwickelt des SHA-256-Algorithmus und nahm die Werte für diese Konstanten, also woher wissen Sie, dass sie nicht holen, spezielle Werte, die den Hash zu brechen lassen? Um Verdacht zu vermeiden, die ersten Hash-Werte stammen die Quadratwurzeln der ersten 8 Primzahlen, und die K-t -Werte stammen aus der Quadratwurzeln der ersten 64 Primzahlen. Da diese Konstanten aus einer einfachen Formel kommen, können Sie Vertrauen, dass die NSA nicht etwas schattigen (zumindest mit der konstanten).
[3] Leider funktioniert der SHA-256 Hash auf einen Block von 512 Bit, aber der Bitcoin-Block-Header ist mehr als 512 Bit. So ist ein zweiter Satz von 64 SHA-256 Hash Runden auf der zweiten Hälfte des Bitcoin-Block erforderlich. Als nächstes Bitcoin verwendet Doppel-SHA-256, also eine zweite Anwendung von SHA-256 (64 Runden) getan wird, um das Ergebnis. Das addieren, dauert hashing eines beliebigen Bitcoin-Blocks 192 runden insgesamt. Allerdings gibt es eine Abkürzung. Bergbau ist hashing die gleichen Block über und über, so ändern die Nonce erscheint in der zweiten Hälfte des Blocks. So Bergbau kann das Ergebnis der ersten 512 Bit Hashing wiederverwenden und hashing einen Bitcoin Block erfordert in der Regel nur 128 Runden.
[4] offensichtlich habe ich nicht nur unglaubliche Glück, am Ende mit einem erfolgreichen Hash. Der Hash begonnen mit einem Block, der bereits erfolgreich abgebaut worden war. Insbesondere habe ich derjenige, der zuvor in diesem Artikel angezeigt,
[5] ein weiteres Problem mit dem manuellen Bergbau ist neue Blöcke sind etwa alle 10 Minuten abgebaut, so, auch wenn es mir gelingt, im Bergbau eines Blocks wäre es völlig überholt durch die Zeit, die ich fertig (Waisen).
Dieser Beitrag erschien auf Ken Shirriffs Blog und ist hier mit freundlicher Genehmigung veröffentlicht.
Ken Shirriff ist eine Software-Ingenieur, die Blogs über Ladegeräte, alte integrierte Schaltungen und Bitcoin in seiner Freizeit.