Zum einfacheren Verständnis sollten zuerst die folgenden Grundlagen Kapitel gelesen werden: Bitcoin Blockchain Hash Einleitung: Was ist ETHEREUM?Ethereum ist das Android der Blockchain. Darüber können dezentrale Apps programmiert und über den Ethereum App Store, MIST Browser genannt, laufengelassen werden. Der MIST Browser ist für dezentrale Apps, was Google Chrome und Mozilla Firefox für herkömmliche Apps sind. Jeder Miner lässt die gleichen Apps auf der Ethereum Virtual Machine (EVM) laufen. Fällt ein Computer aus, laufen die Programme auf den anderen weiter. Ethereum kann daher auch als Welt Computer beschrieben werden, an den man sich andocken kann. Die parallele Ausführung von Apps ist auf den ersten Blick nicht effizient. Der Vorgang ist teurer und langsamer als über traditionelle Computer. Jedoch sind dezentrale Apps fehlertolerant, unabänderlich, erleiden keine Verbindungsunterbrüche und die Daten werden in der Blockchain verewigt. Apps müssen determiniert ablaufen und können keine Zufallszahlen generieren, weil Knoten sonst zu unterschiedlichen Ergebnissen kämen und kein Konsens entstehen könnte. Über Transaktionen können aber Zufallszahlen von aussen in die EVM eingeschleust werden. Die Kryptowährung von Ethereum heisst Ether. BlöckeUntenstehende Grafik zeigt eine vereinfachte Darstellung der Ethereum Blockchain. Rechts steht ein Block. Die Kopfzeile des Blocks sieht ähnlich aus wie bei Bitcoin. In der obersten Zeile stehen die Block Nummer, Zeitpunkt der Entstehung des Blocks und Kopfzeilen-Hash des vorherigen Blocks über den die Blockchain gebildet wird. Die zweite Zeile beschreibt die relevanten Daten des Mining Prozesses: Schwierigkeitsgrad (Difficulty) der Lotterie, Adresse des Gewinners und Zahl (Nonce), die zum gesuchten Kopfzeilen-Hash geführt hat. In der dritten Zeile stehen die Gas Limite und der Gasverbrauch. Die Gas Limite kann auch mit der Blockgrösse bei Bitcoin verglichen werden, jedoch gibt es ein paar relevante Unterschiede. Bei Ethereum wird nicht nur für Speicher (Bytes), sondern auch für Nutzung des Prozessors und von Bandbreite bezahlt. Es wird definiert, wie viel Gas für Speicherung oder Rechenschritte gebraucht wird. Angebot und Nachfrage bestimmen den Gaspreis. Gas wird nicht an einer Kryptobörse gehandelt, sondern muss mit Ether gekauft werden. Der Preis zwischen Ether und Gas variiert. Wie Transaktionskosten bei Bitcoin wird Gas benötigt, um DOS-Attacken gegen die Software abzuwehren. Auch wird dadurch gewährleistet, dass fehlerhafte Apps nicht unendlich weiterlaufen, sondern nach einer gewissen Anzahl Rechenschritten stoppen (Halting Problem). Die Programme können nicht einfach nach einer gewissen Zeit gestoppt werden, da die Uhr auf verschiedenen Computern nicht exakt gleich ist und darum kein Konsens zustanden kommen könnte. Merkle Trees Unter der Kopfzeile sind Merkle Bäume dargestellt. Wie bei der Bitcoin Blockchain gezeigt, werden diese für Light Wallets gebraucht. Diese laden nicht die ganze Blockchain, sondern nur die Kopfzeilen herunter und fragen die fehlenden Daten dann von den Minern an. Über den Merkle Tree kann schnell und einfach geprüft werden, ob die angefragten Daten mit den Hashes in der Blockchain übereinstimmen. Der grüne Transaktionsbaum ist schon von der Beschreibung der Bitcoin-Technologie bekannt. Neu gibt es bei Ethereum auch einen Bestandesbaum (orange). Darin werden Ethereum Adressen mit Kontostand oder App Code gespeichert. Ein Unterbaum dessen ist der Speicherbaum (dunkelrot). Hier werden Daten gespeichert, die von den Apps generiert wurden. Schliesslich gibt es den Baum der Ausführungsprotokolle (grau). Diese Protokolle zeigen auf, wer eine App ausführen liess und wie der Zustand der Blockchain danach aussah. Da eine Beendigung einer App meistens nicht mit der Finalisierung eines Blocks zusammenfällt, ist diese Unterscheidung nötig. In diesem Baum können aber auch beliebige (Log) Daten günstig gespeichert werden, da diese durch die Miner nicht verifiziert werden müssen. Die Root-Hashes werden ebenfalls in der Kopfzeile des Blocks gespeichert. Siehe Appendix für eine genauere Spezifikation des Ethereum Merkle Trees. TransaktionenMit Transaktionen können entweder Nachrichten gesendet (message call) oder der Code einer App gespeichert (contract creation) werden. Nachrichten können eine Überweisung oder sonstige Daten sein. Wird eine Nachricht an eine App Adresse gesendet, wird der jeweilige Code ausgeführt. Hier ein Beispiel einer Transaktion: Der Sender (0xa94…) steuert eine App (0x629…) an. Für diese wird maximal 314159 Gas zur Verfügung gestellt und Input sind Daten in hexadezimaler Form, die von der App gebraucht werden. Zum Beispiel könnte die App ein Namens- oder Domainregister führen und Input der Name bzw. die Domain und deren Besitzer bezeichnen (ein Beispiel folgt weiter unten). Das Ausführungsprotokoll sieht so aus: Die Transaktion (0x9fc…) hat die App (0xa94…) aufgerufen. Für die Ausführung wurden 30234 Gas konsumiert und inklusive dieser Transaktion wurden im Block bis dahin 314159 Gas verbraucht. In Logs können irgendwelche Daten gespeichert werden, die ein Wallet braucht. Auf diese haben Apps keinen Zugriff; dies im Unterschied zu Daten, die im Speicherbaum enthalten sind. Wie bei Bitcoin gelangen Transaktionen zuerst in den Mempool und werden dort verifiziert. Unter anderem wird die digitale Signatur des Senders überprüft. Falls der Empfänger einer Transaktion eine App Adresse ist, führt der Miner diese aus, erstellt ein Ausführungsprotokoll und aktualisiert die Kontostände. Falls das Gas nicht ausreicht, wird die Transaktion bis auf die Kosten rückgängig gemacht. Überschüssiges Gas wird schliesslich an den Sender zurückgeschickt. Ethereum Virtual MachineDie Ethereum Virtual Machine (EVM) führt die App aus, die durch eine Transaktion ausgelöst wurde. Die App wird deterministisch ausgeführt, so dass alle Knoten zum selben Ergebnis kommen und die Blöcke damit kontrolliert werden können. Jeder Rechenschritt und jede RAM Speicherung kostet GAS. Es muss vorbestimmt werden, wieviel GAS die Ausführung maximal kosten darf. Ein Zähler behält die Kosten im Auge. Im RAM Arbeitsspeicher können Strings à 32 Bytes gespeichert werden. Dies ist das Minimum, um in einem Schritt Ethereum Adressen (20 Bytes) inklusive ein paar Daten zu laden. In der EVM gibt es 3 verschiedene Speichermedien: 1.) Der Stapelspeicher (engl. Stack): Dieser wird direkt von den Mikroprozessoren unterstützt. Die beiden Hauptfunktionen heissen PUSH für drauflegen und POP für wegnehmen. Die Code Rechenschritte werden darin einer nach dem anderen ausgeführt. Eine Ebene hat Platz für einen 32 Bytes String. 2.) RAM Arbeitsspeicher (engl. Memory): Sobald eine App Adresse aufgerufen wird, speichert die EVM eine Kopie davon im Arbeitsspeicher. 3.) ROM Speicher: App Adresse, wo Code und dazugehörige Daten gespeichert sind. Da es Read Only Memory ist, kann der Code nicht abgeändert werden. Der Vorteil vom Stapelspeicher ist, dass die Länge des in der App-Adresse gespeicherten Codes viel kürzer ist. Beispiel: Auf der linken Seite steht der Code für den Stapelspeicher und auf der rechten derjenige für den Arbeitsspeicher. ADD = 32 Bytes 3xM + Gleichheitszeichen = 128 Bytes Die Maschinensprache von EVM gleicht derjenigen von Bitcoin (FORTH), aber beinhaltet auch Schleifen. Damit kann universell programmiert werden. Nachträglich wird ein Beispiel einer App gezeigt, die ein Namensregister führen soll. Die Transaktion, die die App aufruft, wurde schon oben besprochen. Konkrete Inputs sind nun die Zahl 54 und der Name "Reto". Reto soll an der Stelle 54 im Namensregister eingetragen werden. Der aufgerufene Code in der App-Adresse 0x6295ee1b4f6dd65047762f924ecd367c17eabf8f sieht folgendermassen aus: Der erste Teil enthält die Anleitung, den eigentlichen Code aus dem Stapelspeicher in den Arbeitsspeicher zu laden. Dort kann die Software die Ausführung übernehmen. Der Stapelspeicher sieht nun folgendermassen aus: CODECOPY nimmt nun die letzten zwei Zahlen (12,16) und speichert die Strings 12-28 (12+16) vom Code im Arbeitsspeicher: Die Operatoren im Arbeitsspeicher sind vielfältiger und werden durch die Software gesteuert: Die Ausführung hat also 23 Rechenschritte gebraucht und hat 18 Strings im RAM gespeichert (16 als Code + 2 als Daten aus der Transaktion). Dafür muss mit GAS bezahlt werden. Diese Maschinensprache ist natürlich nicht sehr benutzerfreundlich. Deshalb gibt es anwenderfreundlichere (höhere) Programmiersprachen. Dies geht von JIT über Serpent bis Solidity. Letztere wurden extra für Ethereum geschrieben. Mit JIT können mehrere Schritte jeweils zusammengefasst werden, womit bis zu 75% Rechenschritte und GAS eingespart werden. Spezielle Operatoren, die extra für die EVM definiert wurden, finden sich hier. GHOST ProtokollIm Unterschied zu Bitcoin, wo das Block-Intervall bei ca. 10 Minuten liegt, werden Blöcke bei Ethereum in ca. 14 Sekunden finalisiert. Transaktionen können damit viel schneller abgewickelt werden. Allgemein gilt aber: Je kürzer das Block-Intervall, desto weniger Knoten werden die Blockchain in der nächsten Runde aktualisiert haben. Damit sind zwei Probleme verbunden: Double Spending: Falls ein Miner die Blockchain und damit die Kontostände noch nicht aktualisiert hat, könnte jemand sein Kryptogeld doppelt ausgeben. Sobald die Aktualisierung jedoch erfolgt, wird die fehlerhafte Transaktion sofort rückgängig machen. Ein Problem besteht nur, falls in der Zwischenzeit Waren geliefert oder Dienstleistungen ausgeführt wurden und die Zahlung storniert wird. Um dies zu verhindern, kann mehrere Bestätigungen bzw. Blöcke abgewartet werden, was vor allem bei grösseren Beträgen der Fall sein wird. Konzentrationsprozess: Solange ein Miner seine Blockchain nicht aktualisiert hat, arbeitet er weiterhin am alten Block, obwohl dieser eigentlich schon abgeschlossen wurde. Diese Arbeit wird verschwendet. Bei Bitcoin kostet ihn das Geld, ohne dass er Aussicht auf Erfolg hat. Falls er die gesuchte Zahl errät, hat er Pech, weil ein anderer schneller war. Es ist auch so, dass ein Miner mit hohem Hashpower seltener verschwenderische Arbeit leisten wird, einfach darum, weil er ja öfters selber den Block abschliesst. Dies verschafft grossen Minern einen Vorteil, womit eine Tendenz zur Konzentration besteht. Beispiel: Mining Pool 1 hat 10% Hashpower und Mining Pool 2 30%. Bei ersterem ist 90% der Zeit möglich, dass er an einem Block arbeitet, der schon abgeschlossen wurde. Bei letzterem besteht dieses Risiko nur 70% der Zeit. Damit wird der grössere Pool tendenziell profitabler sein und könnte den kleineren zur Stilllegung zwingen. Es gibt eine Tendenz zur Konzentration, was gefährlich ist. Um dies zu vermeiden, bekommen bei Ethereum auch "Onkel" Blöcke einen Teil des Blockentgelts. So werden Blöcke genannt, die die gesuchte Zahl innerhalb der folgenden 6 regulären Blöcke noch finden. Die glücklichen erhalten 7/8 des Blockentgelts (4.375 Ether) und der Miner, der den "Onkel" zur Blockchain hinzufügt 1/8 zusätzlich. Jedoch erhalten "Onkel" Blöcke keine Transaktionsgebühren. Dieses Protokoll wird GHOST genannt und wurde 2013 vorgestellt. Mining Algorithmus (ETHASH Proof-of-Work)Neben dem oben beschriebenen GHOST Protokoll führt auch Ethash Proof-of-Work, der Mining Algorithmus von Ethereum dazu, dass dem bei Bitcoin gesehenen Konzentrationsprozess entgegengewirkt wird. Bei Bitcoin hängt die Wahrscheinlichkeit in der Lotterie das Blockentgelt zu gewinnen leider nicht nur davon ab, wieviel Revisionsarbeit für die Blockchain erbracht wird, sondern auch wie leistungsfähige Prozessoren eingesetzt werden. Forschung wurde in spezielle Mikrochips (ASICs) investiert, um sich einen Wettbewerbsvorteil zu verschaffen. Ethereum wirkt dem mit Ethash Proof-of-Work entgegen, indem auch der RAM Arbeitsspeicher einbezogen wird (siehe Grafik unten). Mit dem Bitcoin-Hash muss sozusagen eine Extrarunde eingelegt werden. Der Hash ist Input für einen Zufallsgenerator, der 64 Hashes bestimmt, die entweder berechnet oder aus einer Datei, genannt DAG, gelesen werden müssen. Da das Lesen 750x schneller ist als die Berechnung der Hashes, verwenden alle Knoten den DAG. Nach jeder Epoche, momentan definiert als 30’000 Blöcke oder ca. 5 Tage, muss eine Datei von unzähligen Hashes berechnet werden. Der DAG ist 1.7 GB gross, wächst jedoch pro Epoche um ca. 8.3 Mio. Bytes an. Entscheidend ist nicht so sehr der Speicherplatz, der dafür gebraucht wird, sondern, dass 64 Hashes daraus gesucht und gelesen werden müssen. Der Arbeitsspeicher wurde durch die Forschung der Computerindustrie bereits zum äussersten optimiert, weshalb sich kein Miner für diesen Extraschritt einen Wettbewerbsvorteil verschaffen kann. Findet er eine Möglichkeit heraus, den Arbeitsspeicher zu optimieren, wäre es lukrativer, das Patent an die Computerindustrie zu verkaufen. "The DAO" DesasterDa der App Code einmal gespeichert nicht mehr abgeändert werden kann, wirken sich Fehler fatal aus. So geschehen bei "The DAO", dem grössten Crowdfunding aller Zeiten, über das 160 Mio. USD finanziert wurden. Ein DAO (Dezentrale Autonome Organisation) ist eine Ethereum App, die die Verwaltung einer Unternehmung übernimmt. Diese wird danach demokratisch über einen Abstimmungsmechanismus geführt. Management gibt es keines. Investoren konnten mit Hilfe der unten stehenden Funktion jederzeit aussteigen. Ein cleverer Angreifer hat eine Fehlkonstruktion im Code benutzt, um wiederholt Gelder aus dem DAO abzuziehen; wohlgemerkt, nicht nur seine Investition. Dadurch konnte er 50 Mio. USD stehlen. Der gefährliche Teil des App-Codes hat etwa so ausgesehen: Das Problem bestand darin, dass die DAO App eine zweite App aufrief (Zeile 3), bevor die Anfangsinvestition des Senders = 0 gesetzt wurde (Zeile 4). Der Angreifer hat nun die zweite App so programmiert, dass wieder zu Zeile 2 gesprungen wurde und konnte so wiederholt Gelder abziehen. Wären Zeilen 3 und 4 vertauscht gewesen, hätte dies nicht passieren können. Da die App nicht gestoppt werden konnte, hätte der Angreifer sämtliche 160 Mio. USD stehlen können. Die Ethereum Software-Entwickler haben darauf zu einem extremen Mittel gegriffen. Sie haben die Blockchain über einen Hardfork auf den Zeitpunkt vor dem Angriff zurückgesetzt. Sämtliche Gelder aus dem DAO wurden darauf sofort an eine Ethereum Adresse überwiesen. Investoren konnten später darüber ihre Gelder zurück verlangen. Nun gab es aber viele Ethereum Wallet Anbieter, die mit dem Hardfork nicht einverstanden waren. Sie argumentierten damit, dass das Besondere der Blockchain genau darin besteht, dass Daten unabänderlich gespeichert würden. Ein Hardfork dürfe nur für einen Software Upgrade benutzt werden. Diese Wallet-Anbieter haben beide Versionen der Software installiert und damit neue Ether geschöpft. Es lässt sich darüber streiten, ob die Ether auf der alten Software (ETC = Ether Classic) oder der neuen Software (ETH) neu geschaffen wurden. Jeder hatte nun in seinem Wallet die doppelte Menge an Ether. Beide Währungen sanken aber im Wert. ETC ist heute nur noch etwa 1/10 wert. Der Angreifer konnte die ETC stehlen, jedoch sind diese momentan "nur" noch 5 Mio. USD wert. Insgesamt haben "The DAO" Investoren nur wenig Geld verloren. Der Wert von ETH und ETC zusammengenommen liegt leicht unter dem Wert vor der Attacke. Das Image von Ethereum hat darunter aber arg gelitten. In Zukunft braucht es wohl spezialisierte Firmen, die neue Apps zuerst auf Fehler überprüfen. Ethereum lernt aus vergangenen Fehlern (wie Bitcoin) und wird dadurch robuster. Software Fehler und Angriffe lassen sich jedoch nie ganz vermeiden – auch nicht bei Microsoft. Appendix: Patricia Merkle TreeDer Transaktionsbaum muss für jeden Block komplett neu berechnet werden. Hingegen bleibt beim Bestandesbaum ein Grossteil von Block zu Block gleich. Nur von Transaktionen tangierte Kontostände verändern sich. Um Speicherplatz einzusparen, wird eine Abwandlung des Merkle Trees, der sogenannte Patricia Merkle Tree, berechnet. Dieser wurde erstmals im Ripple Protokoll eingesetzt. Ein vereinfachtes Beispiel davon ist in der unten stehenden Grafik links dargestellt. Im Viereck oben rechts stehen 4 Ethereum Adressen mit den entsprechenden Kontoständen. Tatsächlich sind Ethereum Adressen viel länger, wie bei Bitcoin. In diesem Beispiel beginnen alle Adressen mit "a7". Diese Sequenz wird nur einmal in den Baum geschrieben. Da Ethereum Adressen wie Bitcoin Adressen in hexadezimaler Form dargestellt werden, gibt es für die dritte Stelle 16 Zeichen, 0-9 und a-f. Bei den folgenden Stellen gibt es wieder zwei Adressen mit "d3", die gebündelt werden können usw. Rechts in der Grafik steht der einfache Merkle Tree. Über den Patricia Tree (links) müssen bei einer Veränderung der Kontostände markant weniger Hashes neu berechnet werden (dies kommt aus der Grafik nicht zum Ausdruck, da nur 4 Konten angezeigt werden). Die Präfixe werden übrigens benötigt, um die hexadezimalen Zeichen in binäre Computersprache umzuwandeln. Quellen:
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgettransactionreceipt https://github.com/ethereum/wiki/wiki/Ethereum-Development-Tutorial https://medium.com/@jeff.ethereum/optimising-the-ethereum-virtual-machine-58457e61ca15#.1sxy42559 https://medium.com/@jeff.ethereum/go-ethereums-jit-evm-27ef88277520#.o840gcou7 http://www.hashcash.org/papers/dagger.html https://github.com/ethereum/wiki/wiki/Ethash http://ethereum.stackexchange.com/questions/6415/eli5-how-does-a-merkle-patricia-trie-tree-work https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/ https://github.com/ethereum/wiki/wiki/Design-Rationale http://ethereum.stackexchange.com/questions/2286/what-diagrams-exist-to-illustrate-the-ethereum-blockchain-creation-process http://ethereum.stackexchange.com/questions/6400/what-is-the-exact-data-structure-of-each-block http://ethdocs.org/en/latest/introduction/what-is-ethereum.html http://gavwood.com/Paper.pdf
2 Kommentare
Zum einfacheren Verständnis sollten zuerst die folgenden Grundlagen Kapitel gelesen werden: ASCII Elliptic Curve (ECC) Hash Wallet Zahlensysteme Einleitung Die Blockchain Technologie ist ein dezentrales Buchhaltungssystem. Zwischen den Nutzern steht kein Intermediär wie zum Beispiel eine Bank. Im Fachjargon wird ein solches System Peer-to-Peer (P2P) genannt. Die Blockchain wird alleine durch die Software gesteuert und muss von den beteiligten PCs und Handys, den Knoten des Netzwerks, heruntergeladen werden. Jeder Knoten führt Buch über sämtliche Daten, die über das Netzwerk transferiert werden. Im Endeffekt gibt es hunderttausende von Kopien der Buchhaltung. Zwar ist dies eine sehr ineffiziente Speicherung. Jedoch ist die Blockchain dadurch auch das sicherste Medium überhaupt, um hochwertige elektronische Daten zu speichern. Die Blockchain wird für verschiedene Anwendungen benutzt und die meisten haben ihre eigene Währung. Angefangen hat alles mit einem Zahlungssystem - BITCOIN. Überweisungen werden alleine über die Software gesteuert. Bank und Clearinghaus fallen weg (siehe Grafik oben). Zahlungen sind dadurch sehr schnell und günstig. Unter der Bitcoin Blockchain kann man sich also eine Art dezentrale Online Bank ohne Firma, Sitz und Mitarbeiter vorstellen. Jeder elektronische Bankschalter ist mit ungefähr 100 anderen verknüpft. Löst ein Knoten eine Zahlung aus, wird diese Information sogleich an das Netzwerk weitergeleitet. Damit diese elektronischen Bankschalter genug Zeit haben, um ihre Datenbanken zu aktualisieren, werden Transaktionen in Blöcken zusammengefasst. Da es kein Clearinghaus gibt, könnten Betrüger ansonsten noch nicht belastete Bitcoins doppelt ausgegeben. Dies würde zwar von der Software sofort nach der Aktualisierung erkannt und die zweite Zahlung storniert. Jedoch könnte in der Zwischenzeit bereits eine Dienstleistung erfüllt oder eine Ware übertragen worden sein, womit der Dienstleister bzw. Händler geprellt wäre. Es gibt verschiedene Knoten. Je nach Funktion, Speicher, Prozessorleistung und Bandbreite des Computers laden diese die ganze Blockchain (full) oder nur einen Teil davon (light) herunter.
- Kontonummer (Bitcoin Adresse) 160 Bits - Public Key ("IBAN" Nummer) 520 / 264 Bits - Private Key (Passwort) 256 Bits - Signatur (digitale Unterschrift, Hilfspasswort) Vorteil ist, dass sich aus dem Private Key über Verschlüsselungstechnik sowohl Kontonummer wie auch IBAN und Signatur berechnen lassen, jedoch nicht umgekehrt. Nachteil ist, dass falls der Private Key verloren geht, kein Kontozugang mehr besteht und somit auch alle Bitcoins verloren sind. Private Keys müssen sehr sicher aufbewahrt werden. Am besten druckt man sich eine Kopie davon aus und legt sie in einen Safe. Um einen Private Key zu generieren, braucht man keinen Computer oder Internetzugang, sondern lediglich eine Münze (Kopf = 0, Zahl = 1). Nun wird die Münze 256x geworfen und jeweils aufgeschrieben, ob das Resultat Kopf (0) oder Zahl (1) ist. Somit erhält man eine 256 Ziffern lange Zahl, den Private Key (einfacher geht es über bitaddress.org ). Diese binäre Darstellung kann dann in die hexadezimale umgeformt werden. Mehrere Münzwürfe entscheiden also über sämtliche Kontodaten! Der Private Key ist damit nicht etwa besetzt. Würde jemand anderes den gleichen Key wählen, könnte er das Konto leeren. Jedoch gibt es 2^256 (bzw. 10^77) mögliche Kombinationen, was etwa sämtlichen Atomen im sichtbaren Universum entspricht, weshalb die schiere Grösse dafür sorgt, dass es extrem unwahrscheinlich ist, dass zweimal der gleiche Private Key gewählt wird. Public Key Der Public Key entspricht einer Koordinate auf der elliptischen Kurve. Die Koordinaten müssen in eine Zahl umgewandelt werden. Das dekomprimierte Format (Präfix 04) erhält man, indem dem Präfix die x und y Koordinate angehängt wird. Der dekomprimierte Public Key ist 520 Bits (2x256 + 8 für Präfix) lang. Über die Funktion der elliptischen Kurve kann aber y aus x berechnet werden, weshalb die x Koordinate eigentlich überflüssig ist. Der Komprimierte Public Key erhält nur noch die x Koordinate und ein Präfix (02 = positiv, 03 = negativ), da für jedes x sowohl eine positive als auch eine negative y Koordinate möglich ist. Die komprimierte Form ist 264 Bits lang und wurde erst kürzlich bei Bitcoin implementiert, um Speicherplatz einzusparen. Bitcoin Adresse Durch doppeltes anwenden einer Hashfunktion wird aus dem Public Key schliesslich die Bitcoin Adresse erstellt, die eine Länge von 160 Bits aufweist. Da der Public Key in verschiedenen Formaten auftaucht (dekomprimiert und komprimiert) gibt es auch verschiedene Formate für Bitcoin Adressen, was etwas verwirrend ist. Damit die Geldbörse (Wallet) weiss, in welcher Form die Adressen importiert werden sollen, wird dem Private Key ein Suffix 01 angehängt, falls es sich um das komprimierte Format handelt (siehe unten Hex-compressed). Natürlich ergibt sich dadurch auch ein komplett anderer Private Key in Base58Check Format (WIF-compressed). Als totale Verwirrung ist dieser sogar länger als der dekomprimierte, was auf das Suffix zurückzuführen ist! Signatur Die digitale Unterschrift wird gebraucht, um Transaktionen vornehmen zu können. Der Private Key kann als Ausgangspasswort und die Signatur als Hilfspasswort angesehen werden. Die Signatur beweist, dass jemand den Private Key hat, ohne diesen offen zu legen. Zusammenfassung Durch ECC-Multiplikation mit dem Private Key erhält man den Public Key und daraus durch doppeltes Hashing die Bitcoin Adresse. Diese wird wie oben beschrieben kompakt in Base58 dargestellt. Damit Tippfehler von Bitcoin Adressen nicht Folgen haben, wird noch eine sogenannte Prüfsumme angehängt. Auf Base58 wird eine Hashfunktion angewendet und die ersten vier Stellen des Hashes an Base58 angehängt. Resultat ist eine kompakte Bitcoin Adresse im Base58Check Format. Hier ein Beispiel der verschiedenen Darstellungsweisen: Transaktionen Um Kapazitäten zu schonen, werden bei Bitcoin keine Kontostände gespeichert (dies im Unterschied zu RIPPLE und HEAT). Wird in einem Wallet ein Bestand angezeigt, so wurde dieser durch eine App ausserhalb der Blockchain generiert. Erfolgt eine Überweisung, werden so viele frühere Einzahlungen (UTXO) als ausgegeben markiert, bis Betrag und Gebühren gedeckt sind. Ein etwaiger Überschuss wird als Wechselgeld an den Sender zurückbezahlt. Dies lässt sich am besten am Bespiel einer älteren Transaktion zeigen: Links steht der Input oder die Sender Bitcoin Adresse und rechts der Output oder die Empfänger Bitcoin Adressen. Etwas irritierend steht links, also auf der Inputseite, "3.7057 BTC - Output". Dies hängt mit den Transaktionsgebühren zusammen. Input und Output müssen gleich hoch sein. Der Verweis auf der linken Seite gibt an, wie hoch der zu verteilende Gesamtbetrag ist. Die Differenz zum grünen Output Feld gibt an, wie hoch die Gebühr ist. Die eine Adresse steht sowohl links als auch rechts, da das Wechselgeld an die gleiche Adresse zurückgeschickt wird. Das Wechselgeld wurde in der Zwischenzeit bereits wieder ausgegeben, weshalb der Betrag mit "spent" (ausgegeben) markiert wurde. Da jeder Input einem früheren Output entspricht, können Transaktionen bis zur Entstehung der Bitoins (Genesis, Coinbase) zurückverfolgt werden. Bei der Genesis (Entgelt des ersten Blocks) oder Coinbase Transaktion gibt es nur einen Output, da dabei neue Bitcoins geschaffen werden: Hier hat gerade jemand die 12.5 BTC + Gebühren in der Lotterie gewonnen. Im Unterschied zu Kreditkarten enthalten Bitcoin Transaktionen keine heiklen Daten, weshalb sie unverschlüsselt über irgendein Netz verschickt werden können. Es ist für eine Regierung daher praktisch unmöglich, Bitcoin abzuschalten. Sicherung der Transaktionsliste Bei Bitcoin ist keine zentrale Bank involviert. Die Transaktionsliste wird dezentral auf vielen unbekannten Servern gespeichert. Zwei Probleme ergeben sich:
Um Manipulationen zu verhindern, könnte die ganze Transaktionsliste einfach mit einem Hash versehen werden. Würde bei irgendeiner Transaktion etwas abgeändert, wäre dies sofort im falschen Hash ersichtlich. Um Light Wallets zu ermöglichen, die keine Transaktionen speichern, sondern diese bei anderen Knoten anfragen, wird jedoch der sogenannte Merkle Tree (Baum) aufgestellt. Für jede einzelne Transaktion wird ein Hash berechnet und danach, wie in der Abbildung dargestellt, pyramidenförmig weitergerechnet, bis zuoberst nur noch die Merkle Root (Wurzel) übrig bleibt. Block Bisher gab es keinen Anlass, Blöcke aufzustellen. Wieso wird dann von Blockchain gesprochen? Nehmen wir vorerst an, dass derjenige Server, der eine Transaktion als erster geprüft und akzeptiert hat, diese an seine Transaktionsliste anhängt und die Information übers Internet an die anderen Server sendet. Diese aktualisieren dann ebenfalls ihre Listen. Bis die Information übers Internet verbreitet wurde, vergeht eine gewisse Zeit. Es wäre möglich, dass ein Gauner dazwischen die gleiche Transaktion nochmals ausführt (double spending), obwohl sein Konto nun eigentlich leer ist. Geht ein anderer Server seine noch nicht aktualisierte Transaktionsliste durch, geht er fälschlicherweise davon aus, dass noch Geld auf dem Konto ist und gibt die Überweisung frei. Um dies zu vermeiden, werden Blöcke gebildet. Jeder Server kontrolliert erhaltene Transaktionen und fügt sie falls einwandfrei einem Zwischenspeicher (Mempool) zu. Bei Knoten, die sich als Miner betätigen, entspricht der Mempool dem potentiellen Block. Ein Block wird im Durchschnitt alle 10 Minuten generiert. Damit haben die Knoten genügend Zeit, um ihre Version der Blockchain zu aktualisieren. Die anderen Knoten streichen die im neuen Block enthaltenen Transaktionen von ihrem Zwischenspeicher. Der Merkle Tree wird in den Block versetzt. Tatsächlich gibt es jetzt so viele Merkle Trees wie Blöcke. Damit an der Reihenfolge der Blöcke nicht manipuliert werden kann, wird in die Kopfzeile des Blocks auch der Hash des vorherigen Blocks geschrieben. Blockchain Als Belohnung für die Sicherung der Blockchain dürfen die Miners an einer Lotterie teilhaben. Die Ausgangsdaten für die Lotterie sind aus der unten stehenden Grafik ersichtlich. Das Resultat, der SHA-256 Hash, wird Kopfzeilen-Hash genannt. Ein Kopfzeilen-Hash entspricht sozusagen einem Lotterie-Ticket. Die Nonce zählt die im Merkle Tree berechneten Hashes. Nach jedem Hash wird die Nonce um 1 erhöht, womit ein neuer Kopfzeilen-Hash berechnet werden kann. Je schneller ein Computer Transaktionen verifiziert und Merkle Tree Hashes produziert, desto öfter kann an der Lotterie teilgenommen werden, desto grösser die Gewinnchance. Deshalb wird von Proof-of-Work gesprochen. Der Gewinner der Lotterie erhält momentan 12.5 Bitcoins Blockentgelt (ca. 7`400 USD) plus die Gebühren der im Block enthaltenen Transaktionen. Diese neu geschaffenen Bitcoins in Form von Blockentgelt werden Coinbase genannt, da sie nicht durch Überweisung von einer anderen Bitcoin Adresse entstanden sind. Alle 4 Jahre wird dieses Entgelt halbiert. Aufgrund der Halbierung wird die Belohnung im Jahr 2140 unter die kleinste Bitcoin Einheit (1 Satoshi) fallen. Danach werden keine neuen Bitcoins mehr geschaffen und der Gewinner der Lotterie erhält einzig die Gebühren. Total werden 21 Mio. entstanden sein. Das Angebot wird jedoch etwas tiefer sein, da einige Nutzer ihren Private Key verlieren und die Bitcoins damit für immer verloren sind. Während des Proof-of-Work Prozesses werden laufend neue verifizierte Transaktionen an den Merkle Tree angehängt. Ein Block ist momentan aber auf 1 Megabyte limitiert. Danach werden keine zusätzlichen Transaktionen mehr zugelassen. Was passiert nun, falls die Kapazitätsgrenze erreicht wird, der ganze Merkle Tree bis zur Merkle Root berechnet wurde, aber noch niemand in der Lotterie gewonnen hat? Dann gibt es noch eine extraNonce, die im Merkle Tree selbst eingebaut ist (in der Coinbase Transaktion). Sobald die extraNonce um 1 erhöht wird, muss der ganze Baum wieder von vorne berechnet werden. Dasselbe geschieht, sobald die Nonce die Zahl 4294967296 erreicht. Dies ist die grösste Zahl, die sich mit 4 Bytes oder 32 Bits darstellen lässt (2^32). Da der Kopfzeilen-Hash auf den Kopfzeilen-Hash des vorherigen Blocks verweist, entsteht eine Kette, die Blockchain. Hier eine Zusammenfassung der Daten von Block 427254. Die meistens Kennziffern wurden im Text beschrieben. Gebühren Diese werden bei Bitcoin pro Byte abgerechnet und hängen folglich von der Anzahl Inputs und Outputs der Transaktion ab. Die Gebühr ist nicht zwingend. Jedoch wird sie von den meisten Wallets belastet, damit sichergestellt ist, dass Transaktionen zügig ausgeführt werden. Je höher die gewählte Gebühr, desto schneller werden Transaktionen in Blöcken berücksichtigt. Die durchschnittliche Gebühr pro Transaktion beträgt momentan 30 Cents. Da Bitcoin an seine Kapazitätsgrenze von 1 Megabyte pro Block stösst, wird die minimale Gebühr bei Spitzenbelastung angehoben. Dieser Marktmechanismus wurde nach einer DOS-Attacke eingeführt. In untenstehender Grafik sind zwei Transaktionen ersichtlich, die beide 226 Bytes gross sind. Da die Blockgrösse mit 998 Kilobytes nahe ans Limit von 1 Megabyte kommt, ist die Gebühr in der oberen (später eingefügten) Transaktion 13x höher als in der unteren (60 Cents gegenüber 4.6 Cents). Dies ist mit ein Grund, wieso die Kapazitätsgrenze von 1 Megabyte pro Block nicht erhöht wird. Miners wären damit weniger profitabel. Die Priorisierung von Transaktionen hängt neben der Gebühr aber auch vom Alter ab, wofür die ersten 50 Kilobytes im Block reserviert sind. Grosse Beträge, die sich schon lange im Zwischenspeicher (Mempool) befinden, werden bevorzugt. Dies gilt umso mehr, je weniger Speicherplatz die Transaktion benötigt. Insgesamt ergibt sich folgende Formel: Priorisierung = (Bitcoin Betrag * Zeit seit Aufgabe der Überweisung) / Transaktionsgrösse Konsensus-Algorithmus Im Schnitt wird die Lotterie alle 10 Minuten gewonnen und damit ein Block generiert. Dabei geht es jedoch immer um Wahrscheinlichkeiten. Es ist möglich, dass per Zufall zwei Server ungefähr gleichzeitig den gesuchten Hash finden. Die beiden Knoten speichern nun zwei verschiedene Blockchains und kommunizieren ihre Version ans Internet. Dies wird Gabelung oder Fork genannt. Welche soll nun weiterverwendet werden? Bei der Bitcoin Blockchain gilt die Regel, dass die längste Kette beibehalten wird. Also heisst es, abzuwarten, bis der nächste Block generiert wird. Es ist sehr unwahrscheinlich, dass diesmal wieder zwei gleichzeitig Erfolg in der Lotterie haben. Die Software des Gewinners wird den neuen Block an ihre Version der Blockchain anhängen und diese ans Internet weitergeben. Da es jetzt nur noch eine längste Blockchain gibt, wird diese auf den anderen Knoten gespeichert. Pech für denjenigen, der in der vorherigen Runde ebenfalls in der Lotterie gewonnen hat; er geht leer aus. Bei kürzeren Block-Intervallen (z.B. bei Ethereum mit 15 Sekunden) hat dieser Effekt Auswirkung auf die Sicherheit einer Blockchain, sofern nicht gegengesteuert wird. Im Schnitt gibt es pro Tag eine Fork mit Länge von 1 Block, all Monat eine mit 2 Blöcken und solche mit 3 Blöcken sind schon sehr selten. Neue Blöcke werden von den anderen Minern akzeptiert, sofern eine Mehrheit (sagen wir 51%) diese als korrekt verifiziert. Doppelte Ausgabe (Double Spending) Je grösser der Anteil eines Miners, desto grösser die Gefahr, dass Bitcoins doppelt ausgegeben werden könnten (double spending), trotz Blöcken. Dies soll an einem extremen Beispiel gezeigt werden. Nehmen wir an, Hans gehört die riesige Mining Farm, die im Bild zu sehen ist. Er sichert damit 49% der Blockchain (49% Hashpower). Er möchte ein Bild im Gegenwert von 5000 Bitcoins in einer Galerie kaufen und initiiert die Zahlung. In der Blockchain werden die Bitcoins mit der Hash-ID X als "ausgegeben" markiert, die Transaktion dem Block X zugeführt. Hans bedankt sich und macht sich mit dem Bild aus dem Staub. Ein Miner gewinnt in der Lotterie, sendet den Block an die anderen Miner und die Zahlung von Hans wird bestätigt. Die Miner wenden sich nun dem Block X+1 zu, da sie das Rennen um Block X verloren haben und dort nichts mehr zu gewinnen ist. Hans jedoch manipuliert die Transaktion an den Galeristen, indem er als Zieladresse neu seine eigene angibt und arbeitet am Block X weiter, bis er ebenfalls in der Lotterie gewinnt, obwohl der Topf für diesen Block geleert wurde. Sein Ziel ist ja nicht das Blockentgelt, sondern die Manipulation von Transaktionen. Die anderen Knoten werden diesen Block akzeptieren, da er alle Voraussetzungen erfüllt. Nun gibt es 2 Blockchains mit unterschiedlichen Köpfen (Fork). Hans gewinnt in der Lotterie für Block X+1 und fügt diesen der manipulierten Blockchain bei. Diese wird nun als längste Kette vom Netzwerk akzeptiert. Die anderen 51% Miner bemerken bei der Verifizierung der Transaktionen und Blöcke, dass die Bitcoins mit Hash-ID X bereits ausgegeben wurden und stornieren mit Konsensus von 51% die ursprüngliche Zahlung an den Galeristen. Pech nur, dass Hans mit dem Bild schon über alle Berge ist. Der Galerist wurde geprellt. 51% Attacke Wie oben gesehen, kann sich Hans zwar mit dem unbezahlten Bild aus dem Staub machen, da er aber nur 49% Hashpower hatte, konnte er keine doppelte Ausgabe tätigen. Hat Hans aber 51% Hashpower kann er auch die Transaktionen selber zumindest vorübergehende manipulieren. Bitcoin rät, dass für grössere Zahlungen 6 Blöcke oder Bestätigungen abgewartet werden sollte. Nun müsste Hans 6x hintereinander in der Lotterie gewinnen, um Blöcke und Transaktionen zu manipulieren. Auch wenn er 51% der Blockchain kontrolliert, beträgt die Wahrscheinlichkeit dafür bei tiefen 1.7% (0.51^6). Jedoch wird es ihm jedes 59te Mal gelingen (100%/1.7%=58.8). Und sobald er gewinnt, bringt er die manipulierten Blöcke durch, da er mit 51% die Mehrheit und den Konsensus stellt. Statt doppelter Ausgabe könnte Hans überhaupt keine Transaktionen in die Blöcke aufnehmen oder überhaupt keine Verifizierung vornehmen und somit alle Transaktionen zulassen. Beides würde zu Chaos und einem Kursverfall von Bitcoin führen. Eine Aufteilung der Hashpower findet sich hier. GHash.io hat 2014 knapp 50% Anteil erreicht und einmal 6 Blöcke hintereinander gewonnen. Aufgrund des folgenden Bitcoin Crashs, haben Mitglieder freiwillig den Pool verlassen. Jedoch gibt es Organisationen (Staat, Geheimdienst, Bankenkonsortium etc.), die eventuell nicht gewinnorientiert agieren und ein Interesse daran haben könnten, Bitcoin zu Fall zu bringen. Im April 2013 gab es für ein paar Stunden 2 Ketten. Eine davon war maximal 26 Blöcke länger, womit die meisten Überweisungen bereits ausgelöst waren. Der Grund dafür war ein Software Upgrade. Bei der älteren Version konnte ein Block maximal 1024 Transaktionen enthalten. Diese Restriktion wurde bei der neuen Version aufgegeben. Nun geschah einer der täglichen Forks. Es hiess also abzuwarten, bis Block X+1 über die längste Kette entscheidet. Dieser wurde von einem Knoten generiert, der bereits auf die neue Version umgestellt hatte und daher mehr als 1024 Transaktionen besass. Block X+1 wurde ans Netzwerk kommuniziert, jedoch von vielen Knoten nicht akzeptiert, da sie noch nicht auf die neue Software Version umgestellt hatten. Und so ging es weiter. Block X+2 wurde bestätigt, aber auch teilweise abgelehnt. Spätestens nach einem Fork von 6 Blöcken gingen die Alarmglocken los und die Bitcoin Community rief über Nacht eine Gipfelkonferenz ein. Innerhalb weniger Stunden war der Fehler behoben und der Spuk vorbei. Um auf 100% sicher zu gehen, darf die Coinbase erst nach 100 Blöcken ausgegeben werden. Schliesslich handelt es sich bei der Coinbase nicht um eine Überweisung, weshalb Zeit keine grosse Rolle spielt. Es liegt im Ermessen des Händlers oder Ladenbesitzers, wie viele Block Bestätigungen abgewartet werden soll. Kleine Beträge können akzeptiert werden, ohne überhaupt auf einen Block zu warten. Meistens werden für Käufe von Bitcoins keine Kreditkarten bzw. nur kleine Beträge akzeptiert, da Kreditkartentransaktionen oft rückgängig gemacht werden. Wie anonym ist Bitcoin? Viele Leute glauben, dass Bitcoin anonym sei. Dies hat zu Marktplätzen wie Silk Road geführt, die illegale Güter und Dienstleistungen anbieten (Waffen, Mord etc.). Anonymität ist jedoch ein Mythos. Die ganze Blockchain ist öffentlich; jede Transaktion kann zurückverfolgt werden. Die Namen der Kontoinhaber sind zwar nicht ersichtlich, jedoch laufen die Transaktionen übers Internet und von irgendwo muss man sich einloggen. Zumindest in Zukunft wird es für die NSA ein leichtes sein, Identitäten festzustellen. Etwas anders könnte es aussehen mit alternativen Währungen wie Monero. Quellen und Links: CSBreakdown Mastering Bitcoin CuriousInventor wbn Michael Nielsen Bitcoin Wiki www.imponderablethings.com |