Bitcoin Teil 2

in #deutsch4 years ago (edited)

Zusammenfassung aller meiner bisherigen Bitcoin Artikel. (leider in zwei teile unterteilt, da mein post sonst die post maximal größe überschritten hat).

Pseudonyme und Zugriffsberechtigungen

Die Verwendung von echten Namen im Blockchain Register wäre nicht sehr sinnvoll (Guthabenstände von Personen könnten direkt zugeordnet werden; jeder wüsste wie viel jeder hat) und natürlich das Problem der Legitimität (wie soll man nachweisen ob das wirklich Person xy ist). Diese Probleme werden wie wir wissen bei Bitcoin durch die Verwendung von Pseudonymen (Schlüsseln) gelöst. Damit diese Verwendung von Pseudonymen in einem dezentralen System umgesetzt werden kann müssen zwei Vorraussetzungen erfüllt werden:

  1. Jeder Teilnehmer muss sich eigenständig Pseudonyme erstellen können. Mithilfe dieser Pseudonyme muss eine eindeutige Zuordnung von Bitcoin Einheiten möglich sein. Bei der Auswahl der Pseudonyme darf es nicht zu Überschneidungen kommen weshalb die Zahl der möglichen Pseudonyme extrem groß sein muss.
  2. Die Besitzansprüche eines Pseudonyms müssen von jedem überprüft werden können der Zugriff auf ein Guthaben muss einen Nachweis erfordern.

Diese Bedingungen werden bei Bitcoin durch kryptografische Schlüsselpaare erfüllt. Aus dem öffentlichen Schlüssel kann eine Bitcoin Adresse berechnet werden, die als Pseudonym für die jeweilige Person verstanden werden kann. Wie in Artikel 2 bereits erklärt, wird mit dem privaten Schlüssel der Nachweis erbracht, ob der Initiant einer Transaktion auch tatsächlich der Besitzer von diesem Guthabens ist. Jeder kann beliebige viele Schlüsselpaare erstellen (und somit beliebig viele Pseudonyme annehmen).

Die Erstellung eines Schlüsselpaares:

Um ein Schlüsselpaar zu erstellen, wird ein Element aus einer sehr großen Zahlenmenge (alle Zahlen zwischen 1 und einer Zahl mit 78 stellen, genauer gesagt zwischen 1 und 115792089237316195423570985008687907852837564279074904382605163141518161494336) ausgewählt. Die daraus gewählte Zahl ist dann der private Schlüssel, aus dem der dazugehörige öffentliche Schlüssel berechnet wird. Dies geschieht indem ein bekannter Basispunkt G der elliptischen Kurve mit dem privaten Schlüssel multipliziert wird. Der öffentliche Schlüssel ist dann ein Punkt auf der elliptischen Kuve, dessen x- und y- Wert den öffentlichen Schlüssel repräsentieren. Wieso man das ganze macht ist einfach. Eine Multiplikation auf einer elliptischen Kurve kann nicht „umgedreht“ werden (Problem des diskreten Logarithmus). Das bedeutet, dass aus dem privaten Schlüssel der öffentliche Schlüssel hergeleitet werden kann, aber aus dem öffentlichen Schlüssel nicht der private Schlüssel hergeleitet werden kann. Der einzige Weg vom öffentlichen Schlüssel auf den privaten Schlüssel zu kommen ist das ausprobieren aller möglichen Werte (Brute-Force Methode). Dadurch ist es möglich, den eigenen öffentlichen Schlüssel anderen Teilnehmern des Bitcoin-Netzwerkes anzuvertrauen aber selber als einziger im Besitz des private keys zu bleiben (und damit befähigt zu sein, eine Transaktion zu starten und die Legitimität ebendieser zu bestätigen.)

Das von den Nutzern „Standardmäßig“ verwendete Pseudonym ist die Bitcoin Adresse. Die Bitcoin Adresse ist der Hashwert des öffentlichen Schlüssels (wieder nicht umkehrbar, da doppelter Hash).

Darstellung von Schlüsseln (Base 58Check)

Sämtliche Schlüssel und Pseudonyme im Bitcoin Netzwerk sind Zahlen. Die Darstellungsform dieser Zahlen kann allerdings variieren; binär (Basis 2), Dezimalsystem (Basis 10), Hexadezimalsystem(Basis16),... bei Bitcoin wurde ein weiteres Format eingeführt; das Base58Check (Basis 58, die Zahlen 1-9 sowie alle Groß- und Kleinbuchstaben außer O,l,I )

Base58Check wird zur Darstellung von privaten Schlüsseln und Pseudonymen verwendet. Beginnt die Abfolge mit 1 oder 3 ist es ein Pseudonym. Wenn 5, K oder L am Anfang stehen handelt es sich um einen privaten Schlüssel.

Bitcoin Adresse

Das am meisten verwendete Pseudonym (wie schon vorher erwähnt) ist die Bitcoin Adresse. Die Bitcoin Adresse kann aus einem öffentlichen Schlüssel berechnet werden, indem nacheinander zwei Hashfunktionen auf diesen angewandt werden. (1. SHA256 und 2. RIPEMD160) sind die Namen der Hashfunktionen. Die Vorteile der Bitcoin Adresse im Vergleich zum öffentlichen Schlüssel sind

  1. Der Komfort (die Bitcoin Adresse ist deutlich kürzer und beinhaltet eine Prüfziffer, da Base58Check; öffentliche Schlüssel werden im Hexadezimal Format dargestellt)
  2. Theoretisch mehr Sicherheit (wenn jemand eine Schwachstelle in der Multiplikation auf elliptischen Kurven findet), da der öffentliche Schlüssel dank der Bitcoin Adresse erst zum Zeitpunkt der trx bekannt gegeben werden muss.

Eine andere Form der Bitcoin Adressen sind die Pay-to-Script-Hash-Adressen. Dadurch können Auszahlungen an bestimmte Bedingungen geknüpft werden, wie zum Beispiel das eine Zahlung durch mehrere private keys bestätigt werden muss.

von private key zur bitcoi.jpg

Abbildung 6

Sicherheit bei Bitcoin (Hashfunktionen)

Einweg-Pseudonymität

Für die Sicherheit (und Anonymität) ist es wichtig, dass die Pseudonyme im Bitcoin System nur einmal verwendet werden. Wie das gelöst wird steht auch als Kommentar unter meinem letzten Artikel wird aber hier nochmal kurz erklärt. Viele Wallets (die meisten) erstellen für jede Transaktion ein neues Schlüsselpaar (da aus dem public key ja die Bitcoin Adresse generiert wird, wird damit auch eine neue Bitcoin Adresse erstellt). Bei der Transaktion (von deiner Wallet aus) sendet die Wallet also den eigentlichen Betrag an die Adresse des Rechnungsstellers und generiert gleichzeitig neue Adressen, auf die dann das restliche Guthaben geschickt wird.

Dabei wird schnell klar, das es einen extrem großen Bedarf nach Adressen bzw Pseudonymen gibt. Diese können wie in Artikel 6 gelernt aus dem private key generiert werden oder aber mithilfe eines sogenannten Seed´s.

Wallets (deterministisch und nicht-deterministisch)

Nicht deterministische Wallets erstellen zu Beginn eine gewisse Anzahl an Schlüsselpaaren die dann nacheinander genutzt werden.

Deterministische Wallets dagegen nutzen eine Zufallszahl (den Seed) und erzeugen mithilfe von diesem Seed und einer Hashfunktion die private keys (Hashwert vom Seed und der Laufnummer). Das geile ist jetzt, dass das eine unbegrenzte Anzahl neuer private keys ermöglicht (wie auch bei nicht deterministischen Wallets) aber mit dem großen Vorteil, dass nur der Seed als Backup gespeichert werden muss (den Seed bekommst du anfänglich, schreibst ihn auf/gravierst ihn in eine Stahlplatte die du in einen Tresor legst oder was auch immer:D) und dann kannst du aus dem Seed deine private keys wiederherstellen, falls du deinen private key verlierst. Bei der nicht deterministischen Wallet müssen alle private keys gespeichert werden (du musst die ganze Zeit Backups machen wenn ein neues Schlüsselpaar erzeugt wird). Die Deterministischen Wallets sind also "besser" wenn man das so sagen kann. Das die Schlüssel durch eine Deterministische Wallet auf Basis eines Seeds erzeugt wurden ist "von außen"nicht erkennbar. Es gibt auch eine "Weiterentwicklung" der deterministischen Wallet, die Hierarchisch deterministische Wallet.

Sicherheit des private keys und der Pseudonyme

Da die privaten Schlüssel ja aus einer bereits bekannten Zahlenmenge gewählt werden (wie in Artikel 6 beschrieben) sind die möglichen Werte bereits vorher bekannt. Da jeder Nutzer sich eine unbegrenzte Anzahl von private keys und damit Pseudonymen aussuchen kann, könnte es hierbei zu Überschneidungen kommen.

Hierzu mal drei Szenarien, die aufzeigen, wie gering das Risiko ist das ein und derselbe private key zweimal ausgewählt wird, oder es anderweitig zu Überschneidungen kommt.

  • Szenario 1:
    Jemand will den private key einer bestimmten Bitcoin Adresse um über diese Bitcoin Einheiten verfügen zu können. Dieser private key kann durch ihn nur durch einen Brute-Force Angriff (also ausprobieren aller möglichen Kombinationen) bestimmt werden. Mit einem Computer der in der Lage ist, 60 Milliarden private keys pro Sekunde zu überprüfen würde man im 24/7 Betrieb über 7 Quadrilliarden Jahre benötigen um den passenden private key mit einer einprozentigen Wahrscheinlichkeit zu finden.

  • Szenario 2:
    Den private key für irgendeine beliebige Adresse mit Guthaben zu finden ist praktisch genauso unmöglich. Selbst wenn man alle 21 Millionen Bitcoin Einheiten (die es irgendwann mal geben wird) kleinstmöglich aufteilt (also in 2.1 Billiarden Satoshi) und jedes Satoshi einzeln auf einer anderen Adresse verteilt würde man mit dem Computer aus dem ersten Szenario noch knapp 3.7 Billionen Jahre benötigen um mit einer einprozentigen Wahrscheinlichkeit einen passenden private key zu finden (mit der Brute Force Methode).

  • Szenario 3:
    "Geburtstagsparadoxon": Wahrscheinlichkeit das durch das gesamte Bitcoin Netzwerk mindestens 2 gleiche private keys gewählt werden. (Geburtstagparadoxon ist die Wahrscheinlichkeit, nach der in einer Gruppe von Menschen mindestens zwei am gleichen Tag Geburtstag haben). Bei 5,4*10 hoch 22 erstellten Bitcoin Adressen liegt die Wahrscheinlichkeit einer solchen Kollision bei 0.01%. Selbst wenn jeder Mensch auf der Welt einen Computer hätte und Non-stop Bitcoin Adressen generieren würde, würde es über 300 Jahre dauern bis die kritische Schlüsselzahl überschritten wäre (jeder Mensch bräuchte dann ungefär 50 000 TB Speicherplatz).

Im Endeffekt wird dadurch klar, dass das System mit Pseudonymen und Schlüsseln sehr sicher ist. Für Hacker lohnt es sich überhaupt nicht die Brute-Force Methode bei Bitcoin private keys anzuwenden (die Rechenleistung ist beim Minen besser aufgehoben also profitabler).

Der einzige Weg durch den euer private key unsicher wird, ist eigentlich wenn ihr diesen von "zwielichtigen" Zufallsprogrammen erstellen lasst. Diese private keys könnten dann ein bestimmtes Muster aufweisen, dass ein Hacker nutzen könnte.

Manche Zufallsgeneratoren nutzen auch die Bewegung der Maus zum erstellen eines private keys, was wenn der Generator kein Scam ist sicher ist.

Am besten ist es meiner Ansicht nach die private keys abseits vom Computer mithilfe von physikalischen Phänomenen (die aufjedenfall echte Zufallswerte liefern und garantiert kein Scam sind:D) zu erstellen. Da könnt ihr ganz kreativ sein. zb ganz altmodisch mit Würfeln oder Münzwürfen oder Naturereignissen die ihr in Zahlen irgendwie darstellt:D

Einstieg Hashfunktionen und Hashwerte

Wie uns mittlerweile klar geworden ist, basiert sehr viel im Bitcoin System auf diesen Hashfunktionen. Hier wird jetzt erklärt was diese Hashfunktionen überhaupt sind.

Hashfunktionen H sind mathematische Abbildungen, die einem Input m (auch Urbild genannt)einen Hashwert h zuweisen H(m)=h. Das Urbild kann dabei eine Zeichenfolge von beliebiger Länge sein. Ein und das selbe Urbild wird mit einer gegebenen Hashfunktion immer den selben Hashwert liefern. Theoretisch können auch unterschiedliche Urbilder den gleichen Hashwert liefern (Kollision).

Auch in der IBAN wird übrigens eine Hashfunktion verwendet. Die ersten zwei Ziffern (nach dem Ländercode selbstverständlich) entsprechen nämlich dem Hashwert vom Rest der Kontonummer. Falls nun eine Zahl falsch eingetippt wird, wird ein Fehler gemeldet, da der Hashwert nichtmehr passt.

Damit dies funktioniert muss die Hashfunktion zwei wesentliche Eigenschaften haben:

  1. Wenn man verschiedene Inputs durchprobiert sollten alle Hashwerte ungefähr gleich oft vorkommen.
  2. Selbst kleine Input Änderungen sollten zu einem anderen Hashwert führen (sonst würde die Tippfehler Kontrolle bei einem falsch eingegebenen Wert ja nichtmehr funktionieren).

Diese Hashfunktionen sind aber nicht für komplexere Aufgaben geeignet und könnten manipuliert werden (Wahl von bestimnmten Urbildern führt zu bestimmten Hashwerten, es ist möglich Kollisionen herbeizuführen). Außerdem dürfen vom Hashwert keine Rückschlüsse auf das Urbild zu vollziehen sein. Das wird durch die Verwendung kryptografischer Hashfunktionen möglich.

Integrität der Urbilder durch kryptografische Hashfunktionen

Jegliche Anpassung des Urbilds führt sofort zu einer starken Veränderung des Hashwerts. Aufgrund der Eigenschaften kryptografischer Hashfunktionen (bei Hashfunktionen wäre es möglich) ist es außerdem unmöglich eine Kollision herbeizuführen; das bedeutet ein anderes Urbild zu finden, dass den gleichen Hashwert ergibt.

Hashwerte als Arbeitsnachweis (Block ID Schwellenwert)

Da es bei kryptografischen Hashfunktionen nicht möglich ist gezielte Hashwerte herbeizuführen, kann eine solche Hashfunktion (bei Bitcoin SHA-256) auch als Nachweis dazu dienen, dass zur Berechnung eines bestimmten Hashwertes eine bestimmte Rechenleistung genutzt wurde(im Schnitt). Wie das ganze bei Bitcoin genutzt wird, wurde im Punkt Transaktionskonsens bereits grob erklärt.

Transaktionen

Elliptische Kurven

Wieso elliptische Kurven?

  1. Bei asymmetrischen Verschlüsselungsverfahren die auf elliptischen Kurven basieren werden für Signaturen (mit einem gewissen Mass an Sicherheit) um einiges kürzere Schlüssellängen benötigt als bei "herkömmlichen Verfahren" (ohne elliptische Kurven)
  2. Der Verschlüsselungprozess ist effizienter.

Bei Bitcoin wird ein Standard verwendet, durch den die elliptische Kurve definiert wird: secp256k1

Wie die Schlüssel erstellt werden wurde unter "Pseudonyme und Zugriffsberechtigungen" schon erklärt, aber hier nochmal. Der private key wird aus einer sehr sehr großen Zahlenmenge ausgewählt (siehe "Pseudonyme und Zugriffsberechtigungen"). Aus diesem wird dann den öffentliche Schlüssel berechnet. Dies geschieht durch Punkteverdopplung und Addition. Auf Deutsch heißt das ein Basispunkt G der elliptischen Kurve (der allgemein bekannt ist) wird mit dem privaten Schlüssel multipliziert. Der Punkt den man dann erhält ist der public key.

Signieren einer (Transaktions-)Nachricht

Wieder explizite Mathematik die ich überspringen werde. Grob gesagt:

  1. Wählen einer beliebigen Zahl i zwischen 1 und n-1 (Zahl wird nur einmal verwendet)
  2. Berechnung eines Punktes P=i*G
  3. r=xp (x-wert des berechneten Punktes bestimmen)
  4. s=[i^-1(t+r+kp)] t=Nachricht kp=private key
  5. Veröffentlichen der Nachricht t zusammen mit dem public key und der Signatur (r,s)

Überprüfung der Nachrichten Signatur

Wie wir wissen erhält ein beliebiger (vollwertiger) Knoten die Transaktionsnachricht dessen Signatur er nun überprüft.

  1. [u_1=(s^-1 *t)]
  2. [u_2=(s^-1 *r)]
  3. P=u_1 *G+u_2 *Kö
  4. Signatur gültig, wenn r=xp
    _ ist bei mir für tiefgestellte Zahlen und ^ für hochgestellte Zahlen (da Strg++ bzw Strg+# bei Steemit nicht funktioniert)

Transaktionen und wie sie aufgebaut sind

Transaktionen sind Nachrichten (Transaktionsnachrichten) über die wir in den vorigen Kapiteln schon oft gesprochen haben. Hier werden wir näher darauf eingehen.

  • Transaktionsnachrichten werden über das Bitcoin Netzwerk (vollwertige)Knoten propagiert und fungieren als Zahlungsaufträge.
  • Transaktionsnachrichten sind die einzige Möglichkeit das Besitzrecht von Bitcoin Einheiten zu ändern.

Kleine Wiederholung:

Eine Transaktionsnachricht wird vom Initianten einer Transaktion erstellt, kryptografisch signiert und an einen beliebigen Netzwerkteilnehmer (full node) geschickt. Der Knoten der die Nachricht erhält, wird diese anhand der kryptografischen Signatur prüfen (um die Transaktionslegitimität zu prüfen{sicherzugehen,dass die Nachricht wirklich vom Besitzer des Guthabens kommt}). Falls das passt wird eine kopie der Nachricht in den transaction pool des Knotens kommen und das Original wird an die Kontakte des Knotens weitergeleitet, die ebenso verfahren werden, bis das ganze Netzwerk von der Transaktion erfahren hat. (Daraus wird erkennbar, dass normale Transaktionen nicht storniert werden können; außer double-spend natürlich wie bereits erklärt).

Der Aufbau

Die Bestandteile einer Transaktion seht ihr im Bild. Selbstverständlich gibt es eine standartisierte Form nach dem Bitcoin Protokoll, die Abbildung ist daher nur eine vereinfachte Darstellung).

trx aufbau.png

Abbildung 7

Jeder Output kann nur einmal verwendet werden. Falls ein Knoten eine Transaktionsnachricht erhält, die ein schon zuvor verwendeten Output als Input referenziert, wird er die Transaktionsnachricht ignorieren.

Wurde der Output nicht bereits zuvor als Input referenziert steht er für die neue Transaktion zur Verfügung. Diese Outputs nennt man unspent transaction outputs (UTXO) (Outputs die bisher nicht verwendet wurden). Die UTXO sind sozusagen die Wertspeicher des Bitcoin Netzwerkes und werden als Bestandteil einer Transaktion in der Blockchain gespeichert und können dann in einer beliebigen Transaktion als Input referenziert werden (alle nicht als Input referenzierten Outputs UTXO sind im Arbeitsspeicher jedes vollwertigen Knoten).

Jede Bitcoin Einheit ist Bestandteil eines nicht verwendeten Transaktionsoutputs.

Wenn eine UTXO von einem Input referenziert wird, muss diese komplett verwendet werden. Um dennoch präzise Beträge zu haben gibt es verschiedene Transaktionstypen, die entweder mehrere Inputs zu einem großen Output zusammenfügen oder einen großen Input in mehrere Outputs aufsplitten (Modifikation von Stückelungen/Wechselgeld).

Transaktionstypen

  1. Aggregierend: Eine beliebige Anzahl an Inputs wird zu einem einzigen Output zusammengefasst (mehrere Beträge können an eine einzige Auszahlungsbedingung geknüpft werden).
  2. Aufsplittend: Ein einzelner Input wird in eine beliebige Anzahl von Outputs aufgesplittet. (gängigste Transaktionsform). Hierbei übersteigt der vewendete Input den Output, sodass er Wechselgeld erhält, welches er zu seinen Gunsten auf eine zweite Adresse von sich schicken kann. (mehr Anonymität und Sicherheit)
  3. Weiterleitend: Ein einziger Input aus dem ein einzelner Output generiert wird.

Transaktionsgebühr

Die Summe aller Inputs/des Inputs muss mindestens so groß sein, wie die Summe der Outputs/des Outputs. Ist der Input größer als der Output bleibt eine gewisse Summe übrig. Diese Differenz (das Wechselgeld) wird (bei der aufsplittenden Transaktion auf eine nächste Adresse versendet) und kommt als Transaktionsgebühr dem Miner zugute, der die Transaktion in die Blockchain aufnimmt (einen gültigen Block erstellt). Umso höher diese Differenz zwischen Input und Output (umso mehr Geld für den Miner übrig bleibt) umso schneller wird die Transaktion in der Regel bearbeitet/bei der Auswahl der Transaktionen die in den Block des Miners kommen bevorzugt.

Durch diese Verkettung der Transaktionen entsteht eine Transaktionshierarchie, in der jeder Output eine klar nachvollziehbare Herkunft hat (bis hin zur jeweiligen Coinbase Transaktion).

Alle Transaktionen, die einen bestimmten Transaktionsoutput von vorherigen Transaktionen als Input referenzieren werden von den Knoten als Duplikate erkannt und verworfen.

Ein Output kann nicht mehrmals referenziert werden. Sonst würde er ja mit der ersten Transaktion die sich auf diesen Output referenziert konkurrieren.

Block Bestandteile (Transaktionskonsens)

Transaktionskonsens: Wieso Blöcke und Blockketten?

Wieso Bitcoin eine Blockchain braucht haben wir schon geklärt. Da das schon eine Weile her ist nochmal eine ganz kurze Erklärung.

  • Stichwort Transaktionskonsens

Da das Bitcoin Netzwerk dezentral ist hat jeder Knoten seine eigene Registerversion. Um nun sicherzustellen welche Registerversion jetzt aktuell und gültig ist gibt es die Blockchain.

Die Blockchain ist also das "Instrument" das dafür sorgt, dass ein Konsens ("Übereinstimmung der Meinungen") erreicht wird. Also welche Transaktionen vom Netzwerk als gültig betrachtet werden (nach der Transaktionslegitimität). Und welche Person über welche Bitcoin Einheiten verfügen darf.

  • Stichwort Double Spend Problem

Wenn zwei Transaktionsnachrichten gleichzeitig losgeschickt werden, die sich auf die gleiche Bitcoin Einheit beziehen, wird dieses Problem ebenfalls durch das Erreichen eines Transaktionskonsens (mithilfe der Blockchain) gelöst.

Blockchain:

  • Öffentliches Register des Bitcoin-Systems, indem die bestätigten Transaktionen festgehalten sind (seit der Entstehung von Bitcoin). Die Blockchain ist also eine stetig wachsende Datenbank zurzeit weit über 100GB.
  • Theoretisch kann jeder die Blockchain herunterladen und verändern, doch die veränderte Version wird vom Rest des Netzwerkes nicht angenommen werden, da das Verändern einer Transaktion (die Inhalt eines Blocks ist) die Block ID verändern wird. Und da Blöcke immer die ID des Blockes der vor ihnen kommt referenzieren ist eine Veränderung (wenn man unter 50% der Gesamtrechenleistung hat) unmöglich.

Aus was besteht die Blockchain? Bestandteile eines Blocks

Die Blockchain (zu deutsch Blockkette) besteht wie der Name schon sagt aus mehreren aneinander gereihten Blöcken. Diese Blöcke beinhalten alle jeweils mindestens eine Transaktion.Damit eine Transaktion in die Blockchain aufgenommen werden kann muss sie also erst in einen Block (Kandidaten). Jeder vollwertige Netzwerkknoten (dank Pool Mining auch ohne Full node möglich) mit Mining Funktion kann Blöcke beziehungsweise Blockkandidaten erstellen.

Hierfür wählt der Knoten verschiedene Transaktionen aus seinem transaction pool aus, die dann in die vordefinierte Struktur des Blocks kommen (Merkle Root). (Begriff wird später erklärt)

In der Abbildung sieht man den schemenhaften Aufbau eines Blockes bzw die Inhalte die dieser haben muss. Die in der Abbildung gezeigten Bestandteile werde ich jetzt kurz erklären.

Block.png

Abbildung 8

  • Version:Beschreibung der Protokoll Version unter der der Block erstellt wurde. (32 Bit Zahl)
  • Referenz: Diesen Bestandteil kennen wir schon. Dieser Eintrag im Block Header referenziert den Vorgänger Block also den vor diesem Block aktuellsten Block der Blockchain. Referenziert wird die Block ID sprich der 256 Bit Hashwert der doppelt angewandten (auf den Block Header) SHA256 Hashfunktion.
  • Zeitstempel: Angaben zum Zeitpunkt an dem der Block erstellt wurde.
  • Schwellenwert: Der Schwellenwert ist der maximale Hashwert den der Block Header maximal haben darf (Block ID).
  • Nonce: Raum für arbiträre Daten. Kleine Erklärung von mir aus einem Kommentar. >Die Nonce ist einfach ein Raum für arbiträre Daten im Block der einfach verändert werden kann. Die Block ID (Identifikationsnummer) wird ja aus dem Block berechnet (mit einer Hashfunktion). Diese Block ID ist also abhängig vom Inhalt des Blocks. Und die Block ID muss unter einem gewissen Schwellenwert liegen, damit der Block ins Blockchain Register kommt. Und da man bei einer Hashfunktion (bei SHA 256) nicht weiß welcher Input (also welcher Block Inhalt) welchen Hashwert liefert muss man einfach den Block Inhalt so lange ändern, bis die Block ID unter dem Schwellenwert liegt. Soweit verständlich hoffe ich:)
    Also der Hashwert des Block Inhaltes (Block ID) ist jetzt vereinfacht gesagt 12. Der Schwellenwert liegt aber bei vereinfacht gesagt 6 als beispiel. Nun kann der Block nicht ins Blockchain Register, da die Block ID zu groß ist. Also muss der Miner den Block Inhalt solange ändern bis die Block ID unter 6 liegt (der Miner muss das machen da er nur wenn sein Block vom Blockchain Register angenommen wird, er die Belohnung bekommt (die sogenannte Coinbase Transaktion bei der ein paar neue Bitcoins geschaffen werden die der Miner bekommt).
    Also jetzt könnte der Miner den Block Inhalt ändern in dem er ein paar Transaktionen aus dem Block wirft oder neue reintut und so weiter. Aber das wäre doof:D Daher gibt es die sogenannte Nonce. Also verändert der Miner einfach nur die Nonce und kann sonst alles im Block gleich lassen. Aber durch die veränderte Nonce (andere Zahl) ist der Block Inhalt anders und daraufhin wird auch der Hashwert des Blocks anders und damit auch die Block ID. Diese neue Block ID ist jetzt zum Beispiel 9. Immernoch nicht unter dem Schwellenwert. Also nimmt der Miner wieder eine andere Nonce. Diesesmal ist der Hashwert des Block Inhaltes (und damit auch die Block ID) 3 das ist unter dem Schwellenwert das heißt der Block wird angenommen, kommt in die Blockchain und der Miner bekommt seine Belohnung:)
  • Merkle Root: Alle Transaktionen im Block als 256 Bit Eintrag. Die Transaktionen selbst sind nicht Bestandteil des Block Headers. Die Sicherstellung das nicht verändert (manipuliert) wird erfolgt hier über einen Merkle Tree (Hash Baum:D). Die Transaktionen werden hierfür zu Paaren genommen und mithilfe der der doppelt angewandten Hashfunktion SHA256d der Hashwert jedes trx Paares berechnet. Aus diesen Hashwerten werden dann wieder Paare gebildet, bis nur noch ein Wert übrig bleibt. Dieser Wert ist dann der sogenannte Merkle Root (hash Wurzel). Damit das ganze besser zu verstehen ist hier eine Abbildung.

Hash Baum.png

Abbildung 9

In der Abbildung sieht man, dass eine ungerade Transaktionszahl nichts ausmacht, da in diesem Fall einfach c verdoppelt wird (die übrigbleibende Transaktion eben).

Sobald auch nur eine einzige Transaktion verändert wird, nimmt die Merkle Root einen anderen Wert an womit der Block ungültig werden würde. Die Merkle Root ist also eine Art Bindeglied zwischen Transaktionen und Block Header der trotzdem dafür sorgt, dass die Transaktionen nicht manipuliert werden können aber gleichzeitig die Suche nach einer bestimmten Transaktion eines Blockes effizienter macht.

Blockrace, skalierbarkeit, Anwendungsbereiche der Blockchain

Gerade haben wir die Difficulty kennengelernt. Difficulty: Veränderung des Schwellenwertes; umso größer die Difficulty umso kleiner ist der Schwellenwert und andersrum bzw. wie schwer ist es den Hashwert des Block Headers (BlockID) unter den geforderten Schwellenwert zu bekommen, zu deutsch: wie schwer ist es zu minen.

Wofür diese Difficulty benötigt wird behandeln wir jetzt im folgenden Abschnitt.

Welche Blockchain Version ist die aktuellste?

Es wird immer die Kette als die aktuelle angesehen, die die größte aufsummierte Difficulty hat. Also vereinfacht gesagt die längste Kette/die in die am meisten Arbeit geflossen ist.

Jetzt wissen wir wie eine eindeutige Blockchain Version geschaffen, besichert und erkannt (als aktuellste) wird.

Übersicht Konsensprotokoll:

  • Legitimität: Durch sie wird verhindert, dass ungültige Blöcke aufgenommen werden, sowie Sicherstellung der Berechtigung des Transaktionsinitiianten über das Guthaben zu verfügen(siehe Artikel 2 und 6).

  • Blockchain/Verkettung: Sorgt dafür, dass in die Blockchain aufgenommene Blöcke nicht verändert werden können. Dadurch ist es nicht möglich Besitzzustände zu manipulieren.

  • Proof-of-Work mit Schwellenwert: Künstliche Schwelle zu Aufnahme neuer Blöcke, Sicherung der Blockchain vor Manipulation.

  • Entlohnung der Miner: Coinbase-Transaktion und Transaktionsgebühren.

  • Aufsummierte Difficulty: So wird sichergestellt, dass die Version der Kette, in die am meisten Arbeit geflossen ist, als aktuellste Version betrachtet wird.

Block Race (zu deutsch: Block Rennen)

In der Theorie (und auch Praxis) ist es durchaus möglich, dass zeitgleich zwei konkurrierende Blöcke entstehen. Also zwei Blöcke die den gleichen Block referenzieren und somit beide einen Anspruch darauf erheben der aktuellste Block der Chain zu sein. Kann natürlich nicht gehen/es kann nur einen geben:D

block race.png

Abbildung 10

Jetzt beginnt wie im Bild zu sehen (okay nicht ganz so:D) ein "Rennen". Nämlich ein Rennen darüber, auf welchen der beiden Blöcke sich zuerst ein neuer Block referenziert. Dieser Block hat dann "gewonnen". Wenn sich ein neuer Block auf ihn referenziert, bevor sich jemand auf seinen Konkurrenten referenziert, ist seine Kette am längsten und die aufsummierte Difficulty am höchsten und er bekommt als in die aktuelle Blockchain Version aufgenommener Block seine Entlohnung(Coinbase Transaktion). Also es "gewinnt" im Schnitt die Version der Kette der am meisten Rechenleistung zufließt (umso mehr Rechenleistung der Version zufließt umso höher ist die Wahrscheinlichkeit das ein neuer Block der sich auf diese Version referenziert gefunden wird.)

Miner werden jetzt den Block für ihre Block Kandidaten referenzieren, der als erstes bei ihnen eingegangen ist. Es spielt bei einem solchen Block Race also eine wichtige Rolle, wie schnell die beiden Blöcke propagiert werden. Denn der Block der sich schneller verbreitet und auf den sich mehr neue Blockkandidaten referenzieren dem fließt am meisten Rechenleistung zu, wodurch er im Schnitt das Block Race (und damit die Coinbase Transaktion die man ja nur bekommt, wenn der geminte Block zur längsten Kettenversion gehört bekommt) gewinnt.

Ganz einfach ausgedrückt beim Fall Block Race: Bei der Blockchain Version(bei dem Block) bei der/bei dem zuerst ein neuer Block gefunden wird, wird weitergearbeitet (weil man die Entlohnung für einen geminten Block nur bekommt wenn dieser Block in der aktuellsten Blockchain Version ist).

Das wars jetzt mit den technischen Erläuterungen. Jetzt kommen noch ein paar interessante Infos zur Skalierbarkeit und Zukunft von Bitcoin. Mit der Blockchain an sich sind wir jetzt aber fertig: Glückwunsch:D ich hoffe du hast es verstanden und bist jetzt ein Bitcoin Experte:D

Skalierbarkeit und Bestätigungsdauer für eine Transaktion

Die Skalierbarkeit von Bitcoin ist logischerweise begrenzt, da die Blockgröße (Zahl der enthaltenen Transaktionen) begrenzt ist. Die durchschnittliche Zeit von 10 Minuten bis zur Annahme eines neuen Blocks begrenzt ebenfalls die Zahl der Transaktionen pro Sekunde.

Konkret komme ich da auf 2,79 Transaktionen pro Sekunde in den letzten 24 Stunden. Das ist natürlich nicht das Maximum. Das Maximum liegt laut meinem Buch bei 7 Transaktionen pro Sekunde (Anfang 2017) (damals hat ein BTC noch unter 2000USD gekostet, zeitweise sogar unter 1000).

Zum Vergleich das VISA Netzwerk hat 2014 bis zu 57 000 Transaktionen pro Sekunde erreicht.

Da im Schnitt nur alle 10 Minuten ein neuer Block in die Blockchain kommt, liegt auch die durchschnittliche Wartezeit zur Bestätigung einer Transaktion in diesem Bereich (durchschnittlich zwischen 5 und 10 Minuten).

Die begrenzte Blockgröße ist eine Sache, die ohne weiteres aufgehoben werden kann (Soft-oder Hardfork). Die Zahl der Transaktionen pro Sekunde kann also durchaus gesteigert werden. Bitcoin wird jedoch trotzdem nie die Geschwindigkeit des VISA Netzwerks erreichen können(zumindestens in naher Zukunft nicht).

Auch hier haben sich irgendwelche sehr sehr intelligente Menschen (keine Ironie:D) etwas einfallen lassen. Und zwar Zahlungskanäle die Off-Blockchain Transaktionen ermöglichen. Das bedeutet, diese Transaktionen sind nicht einzeln im Block, sondern werden aggregiert(zusammengefasst) verbucht. Diese Off-Blockchain Transaktionen belasten also nicht die (beschränkte) Blockgröße. Zahlungskanäle basieren auf Multising. Sie erlauben es zwei Parteien über einen gewissen Zeitraum eine große Anzahl an Mikro Transaktionen durchzuführen und diese dann am Schluss des Zeitraums zu verrechnen und als zusammengefasste Transaktion der Blockchain hinzuzufügen. Diese Zahlungen sind sicher und unmittelbar gültig und können somit auch ohne Vertrauensverhältnis durchgeführt werden.

Diese Zahlungskanäle können auch bidirektional verwendet werden.

Hier wird es jetzt interessant, da diese bidirektionalen Zahlungskanäle zu einem auf Bitcoin basierenden Zahlungsnetzwerk erweitert werden können.Durch eine Serie von Ausgleichzahlungen über verschiedene Zahlungskanäle können so Zahlungen zwischen verschiedenen über Zahlungskanälen verbundenen Teilnehmern abgewickelt werden. Diese Zahlungsnetzwerke sind dezentral und können die Skalierbarkeits- und Wartezeit Probleme von Bitcoin lösen.

Ein solches Zahlungsnetzwerk kennt ihr wahrscheinlich alle. Das ist das sogenannte Bitcoin lightning-network. Zum Lightning-Network verlinke ich euch unten ein paper. Und eine github Quelle für die sehr interessierten.

Nicht monetäre Anwendungen für die Blockchain

Es gibt zahlreiche Anwendungsfälle und in vielen Bereichen macht der Einsatz der Blockchain wirklich Sinn. Hierfür ist es wichtig zu verstehen, dass in der Blockchain nicht nur Transaktionen gespeichert und festgehalten werden können, sondern auch andere Daten.

Ein cooles Sinnbild ist das einer Pinnwand, die von jedem einsehbar ist und die dezentral bewirtschaftet wird:D An diese Pinnwand können alle möglichen Informationen angebracht werden. Doch diese Informationen können nachträglich nicht mehr verändert oder entfernt werden. Desweiteren kann das Datum sowie der Autor der Information optional festgehalten werden. Die Authentizität und Integrität von Daten kann so also sichergestellt werden.

Dies bringt jedoch auch Nachteile mit, die ich hier auch kurz erwähnen wollte. "Das Internet vergisst nicht" ist auch ohne die Blockchain ein wahrer Spruch. Durch die Blockchain könnte "sensible Informationen" in eine Blockchain gelangen und würden dort für immer bleiben.

Als Beispiel habe ich mal von Kinderpornos(bzw links dazu) in der Bitcoin Blockchain gehört (https://www.btc-echo.de/versteckte-kinderpornografie-in-der-bitcoin-blockchain/).

Diese Integrität der Daten in der Blockchain kann also auch Nachteile bieten. Jedoch sind diese Nachteile im Vergleich zu den Vorteilen klein.

Jetzt mal ein paar grobe Anwendungsfälle:

  • Proof-of-Existence (Beweis das ein Datenpaket zu einem bestimmten Zeitpunkt existiert hat) Hashwert des Datenpakets kann so dafür sorgen, dass kein "Ideenklau" betrieben wird zb.
  • Sicherstellung der Integrität von Daten: So kann zum Beispiel sichergestellt werden das zum Beispiel Geschäftsbedingungen nicht nachträglich verändert werden. Oder Dokumente eines Unternehmens welches den Hashwert dieser Dokumente in der Blockchain verewigt und so diese trotz Geheimhaltung der Informationen vor Manipulation schützt. (oder Blockchain Grundstückregister)
  • Authentizität von Daten: Die Universität von Nicosia besichert "academic certificates" auf der Blockchain. Unten packe ich den Link dazu wieder in die Quellen; zusammen mit anderer interessanter Literatur.
  • Zahlungsversprechen und Kryptoassets: Wertanknüpfung/colored coins/Besitzzustände von Werteinheiten jeglicher Art
  • Smart Proberty: Ein physisches Objekt ist in der Lage seinen Besitzer durch die Blockchain zu identifizieren und ihm dementsprechende Rechte zu geben. Zum Beispiel die Blockchain bzw private key als Hausschlüssel. Das ist jedoch nicht die eigentliche geplante Verwendung. Eigentlich sollen so physische Besitze besser übertragen werden.
  • Smart Contracts: Blockchain Verträge (geskriptete Abfolgen mit einem an Bedingungen geknüpftes Resultat)
  • Besicherter Kredit: Stichwort Defi, DAI,...

Wenn man Kreativ ist fallen einem hier sehr viele gute Anwendungsfälle ein.

Quellen

Die Abbildungen haben ich alle selbst mit Paint3D erstellt. Als Vorlage dienten mir die Abbildungen im gerade genannten Buch.

Ich danke euch für eure Aufmerksamkeit und vorallem @lauch3d und @chappertron für die sehr interessanten Diskussionen und Erkenntnisse.

Auch wenn dies bestimmt nicht mein letzter Artikel ist, werde ich mich für einige Zeit erstmal zurück ziehen.
Dankeschön

Sort:  

Thanks for your contribution to the STEMsocial community. Feel free to join us on discord to get to know the rest of us!

Please consider supporting our funding proposal, approving our witness (@stem.witness) or delegating to the @stemsocial account (for some ROI).

Please consider using the STEMsocial app app and including @stemsocial as a beneficiary to get a stronger support. 
 

Wunderbares Ding!

Falls du es zeitlich schaffst, kannst du auch was zum Thema "Proof-of-Stake" machen???

Besten Gruß

Chapper

Ich behalte es aufjedenfall im hinterkopf, jedoch werde ich erstmal eine "Hive schreib pause" einlegen.
Werde aber trotzdem noch lesen, kuratieren und kommentare schreiben.

(und früher oder später schreibe ich auch wieder artikel, aber momentan habe ich andere prioritäten und dinge in der mache).

edit: Aber pos interessiert mich auch, gerade im Hinblick auf ETH 2.0 und so.

Congratulations @urdreamscometrue! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) :

You published more than 70 posts. Your next target is to reach 80 posts.

You can view your badges on your board And compare to others on the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Du hast ein Upvote von mir bekommen, diese soll die Deutsche Community unterstützen. Wenn du mich unterstützten möchtest, dann sende mir eine Delegation. Egal wie klein die Unterstützung ist, Du hilfst damit der Community. DANKE!

Du wurdest als Member von @investinthefutur gevotet!
Dazu noch ein kleines !BEER


Hey @urdreamscometrue, here is a little bit of BEER from @investinthefutur for you. Enjoy it!

Learn how to earn FREE BEER each day by staking your BEER.