P2PK, P2PKH, P2SH, P2WPK – was diese wichtigen Abkürzungen bedeuten

"Machine", Bild von bark via flickr.com. Lizenz: Creative Commons

Wer sich ein wenig mit Bitcoin beschäftigt, wird auf viele Abkürzungen stoßen. Hier erklären wir, was die Adress-Bezeichnungen P2PK, P2PKH, P2SH und P2WPK bedeuten. Um dies zu verstehen, hilft es, sich zu vergegenwärtigen, was eine Bitcoin-Transaktion wirklich ist.

Gewöhnlich sagt man, dass Bitcoins an „Adressen“ gesendet werden. Dies stimmt nur auf der optischen Oberfläche. Wenn man es genau nimmt, ist es falsch. Eine Bitcoin-Transaktion bedeutet nämlich lediglich, dass man eine Bedingung definiert, unter der bestimmte Coins ausgegeben werden können. „Ausgeben“ bedeutet, um in dieser Terminologie zu bleiben, natürlich auch wieder nur, eine neue Bedingung zu definieren.

Bei gewöhnlichen Transaktionen ist es durchaus richtig, wenn man umgangssprachlich sagt, die Bitcoins werden an eine Adresse gesendet. Denn die Bedingung, um die Coins auszugeben (bzw. die Bedingung zu ändern) ist es, dass man beweist, der „Besitzer“ bzw. „Erschaffer“ einer Adresse zu sein.

P2PK

Die einfachste Form, eine solche Bedingung zu definieren, ist eine „P2PK“-Transaktion, was für „Pay-to-Public-Key“ steht („Bezahl an den öffentlichen Schlüssel“). Eine solche Transaktion nimmt Bitcoins und definiert für sie die Bedingung, dass nur der Besitzer eines privaten Schlüssels, der zu dem in der Transaktion angebenen öffentlichen Schlüssel passt, das Recht hat, die Coins wieder auszugeben.

Öffentlicher und privater Schlüssel sind zwei feste Begriffe der asymmetrischen Kryptographie: Ein User hat ein Schlüsselpaar von öffentlichem und privaten Schlüssel. Mit dem privaten Schlüssel kann man beispielsweise Nachrichten unterschrieben; mithilfe des öffentlichen Schlüssels kann jeder prüfen, ob die Unterschrift gültig ist. Dieses Prinzip wird bei Bitcoin benutzt, um in einer Transaktion eine Bedingung zur Ausgabe der Coins zu formulieren, die öffentlich sichtbar und prüfbar ist, aber nur von einer Entität erfüllt werden kann.

Für die, die es genauer wissen wollen: Der Computer sammelt Entropie, also Zufälligkeit, und formt aus dieser dann einen privaten Schlüssel. Im üblicherweise verwendeten Format sieht er beispielsweise so aus: L59F66TnwcmqDdGafUQHfggCgE8q3vL3g6Jd1XZ88iucJP8ybsdC. Aus diesem privaten Schlüssel wird dann der öffentliche Schlüssel abgeleitet. In unserem Fall wäre das diese Zeichenkette: 026405864d86d06d4c02eeeddf8c6daa498dcbb789088f8c7ebd1fa81deff21841. Diese Zeichenkette mit dem Hinweis, dass die Signatur gegen diesen Schlüssel geprüft werden soll, ist genügend Information, um in einer Bitcoin-Transaktion eine neue Bedingung für das Ausgeben von Coins zu definieren.

Das Skript der Coinbase-Transaktion von Block-10. Hier wird direkt an den öffentlichen Schlüssel gezahlt.

P2PKH

Für einige Jahre lief P2PK gleichzeitig mit P2PKH. Die Bitcoin-Software hat P2PK verwendet, um die Coinbase-Transaktionen zu generieren, mit denen sich die Miner ihre Belohnung für das Finden eines Blocks auszahlen, und für Zahlungen an IP-Adresse.

Für die normalen Zahlungen der Wallets, die am Anfang von Bitcoin sehr selten waren, war von Anfang an „P2PKH“ vorgesehen. Das bedeutet „Pay to Public Key Hash“ und meint die Adressen, die wir bis heute kennen. Diese entstehen, indem man den öffentlichen Schlüssel durch mehrere Hash-Algorithmen laufen lässt. Wie das genau funktioniert und was ein Hash ist, haben wir in unserem Artikel über Adressen bei Bitcoin und anderen Kryptowährungen beschrieben. Die Adresse in unserem oben genannten Beispiel wäre die 1KGMPzvxd2fDqwNyR7KUvPxXMkeHiFTF5B. Alle Adressen, die mit einer „1“ beginnen, sind P2PKH-Adressen.

Eine P2PKH-Transaktion. Man beachte die Unterschiede im Script im Vergleich zur P2PK-Transaktion oben.

Dieses Verfahren macht es an sich komplizierter, Zahlungen zu verarbeiten. Derjenige, der Coins, die er an eine Adresse bekommen hat, auszahlen möchte, muss weiterhin mit dem privaten Schlüssel signieren, aber zudem noch den öffentlichen Schlüssel angeben. Um zu prüfen, ob diese Zahlung gültig ist, muss man dann allerdings vom öffentlichen Schlüssel erneut die Adresse bilden. Aus diesem Grund war P2PK weiterhin der Standard für automatisch generierte Zahlungen, wie die Coinbase-Transaktionen der Miner oder automatisch von einem Server generierte Zahlungsaufforderungen für Zahlungen an IP-Adressen.

Aus dem öffentlichen Schlüssel eine Adresse zu bilden, hat jedoch zwei Vorteile: Zum einen ist es bequemer, weil die Adresse kürzer und angenehmer zu benutzen ist. Sie sieht wegen der größeren Vielfalt an Zeichen markanter aus. Zum anderen ist es sicherer, da der öffentliche Schlüssel erst enthüllt wird, wenn die Coins auf einer Adresse wieder ausgegeben werden. Dies kann ein entscheidender Vorteil sein, falls einmal Quantencomputer den bei Bitcoin verwendeten Signaturalgorithmus ECDSA brechen.

P2PKH-Adressen sind weiterhin am häufigsten in Verwendung. Mit mehr als 9 Millionen Bitcoin werden mehr als 50 Prozent aller existierenden Bitcoins auf ihnen gespeichert. Der Trend ist aber rückläufig. Quelle: P2SH.info

Es ist weiterhin möglich, P2PK-Transaktionen zu bilden, auch wenn sie so gut wie nicht mehr eingesetzt werden. Die Zahlungen an IP-Adressen wurden bereits sehr früh wegen Sicherheitsbedenken eingestellt, und die Coinbase-Transaktionen der Miner sind seit etwa zwei Jahren auch im P2PKH-Format. Ich vermute, weil dies die Einheitlichkeit von Transaktionen verbessert.

P2SH

Ab April 2012 etablierte sich neben P2PKH noch ein weiterer Standard für Zahlungen: P2SH. Dies bedeutet „Pay to Script Hash“. Dieses Verfahren ist am schwierigsten zu verstehen. Es hilft, sich zu vergegenwärtigen, dass Zahlungen an sich keinen Empfänger haben, sondern lediglich eine Regel definieren, wie die gesendeten Coins ausgegeben werden können.

Bisher hat der Sender einer Zahlung diese Bedingung definiert, indem er entweder einen öffentlichen Schlüssel oder eine Adresse angegeben hat. Mit P2SH wird dies nun umgedreht: Der Empfänger definiert eine Regel (das Script) und bildet daraus die Hash. Der Sender kann einfach an eine Hash bezahlen, und der Empfänger kann die Coins ausgeben, wenn er das Script einreicht, aus dem sich die angegebene Hash ableitet.

Mit sechs Millionen Bitcoins werden mittlerweile gut 33 Prozent aller Bitcoins auf P2SH-Adressen gespeichert.

Eingeführt wurde P2SH vor allem, um Multisignatur-Transaktionen zu ermöglichen, also Transaktionen, bei denen nicht nur eine, sondern mehrere Partei signieren müssen. Man kann sich das wie ein Kautionskonto vorstellen, bei dem sowohl Mieter als auch Vermieter der Auszahlung zustimmen müssen. An sich wäre das auch per P2PKH möglich gewesen. Es hatte aber den Nachteil, dass der bzw. die Empfänger dem Sender das komplette Auszahlungsscript hätten geben müssen, in dem dann sämtliche Adressen oder öffentliche Schlüssel, an die man signieren muss, enthalten sind. Das wäre, gerade bei großen Multisig-Adressen mit vielen Beteiligten, rasch komplex geworden. Mit P2SH wurde die dafür notwendige Information auf dieselbe wie bei P2PKH reduziert, wodurch es für Wallets und User derselbe Vorgang ist, an eine Multisig-Adresse zu bezahlen als an eine normale Adresse.

Die P2SH-Adressen haben an sich dasselbe Format wie die P2PKH-Adressen, beginnen aber mit einer „3“. Jede Wallet ist in der Lage, Bitcoins an diese Adressen zu senden, ohne etwas über die Scripte zu wissen, durch die die Coins dann weiterüberwiesen werden.

P2WPKH

P2SH-Adressen erlauben es aber auch, andere Scripte als Multisig zu verarbeiten. So wurde etwa das Protokoll-Upgrade SegWit zunächst über die P2SH-Adressen eingeführt.

An sich benutzt SegWit ein neues Verfahren, P2WPKH, was für „Pay To Witness Public Key Hash“ steht. Hier wird nicht an den öffentlichen Schlüssel in einer Transaktion bezahlt, sondern an den öffentlichen Schlüssel, der der ausgelagerten Signatur beiliegt. Indem nun dieses Script selbst gehasht wird, kann es ein Teil einer P2SH-Adresse sein. Dies hatte den Vorteil, dass jede existierende Wallet in der Lage war, an SegWit-Adressen zu senden und die von Usern wahrgenommene Disruption minimiert wurde. Darüberhinaus kann ein Beobachter der Blockchain die SegWit-Adressen erst dann von den bereits bekannten P2SH-Adressen unterscheiden, wenn die darauf befindlichen Coins ausgegeben werden.

Es hat jedoch den Nachteil, dass es komplexer ist und auch mehr Platz in der Blockchain braucht. Daher wurde zeitgleich ein weiteres Adress-Format eingeführt, das P2WPKH nativ implementiert, anstatt es in eine P2SH-Adresse hineinzupressen. Diese Adressen sind im neu entwickelten „Bech32“-Format und sehen vollkommen anders aus als die bisherig bekannten Adressen. Etwa so: bc1q76awjp3nmklgnf0yyu0qncsekktf4e3qj248t4. Sie sind also etwas länger als normale Adressen, beginnen mit „bc1“ und enthalten nur Kleinbuchstaben.

Noch kaum in Benutzung: Mit 220.000 Bitcoins liegen nur rund 1,4 Prozent aller Bitcoins auf bech32-Adressen.

Bisher werden sie noch nicht von allen Wallets unterstützt. Die Wallet des Bitcoin-Nodes Bitcoin Core sowie Electrum sind zwei Beispiele für Wallets, die native SegWit-Adressen verwenden. Viele andere Wallets und Börsen sind lediglich in der Lage, an die bech32-Adressen zu senden, aber nicht, über sie Bitcoins zu empfangen. Dementsprechend ist die Nutzung der nativen P2WPKH-Adressen weiterhin recht gering.

Über Christoph Bergmann (1569 Beiträge)
Das Bitcoinblog wird von Bitcoin.de gesponsort, ist inhaltlich aber unabhängig und gibt die Meinung des Redakteurs Christoph Bergmann wieder. Christoph hat vor kurzem ein Buch geschrieben: Bitcoin: Die verrückte Geschichte vom Aufstieg eines neuen Geldes. Das Buch stellt Bitcoin in seiner ganzen Pracht dar. Ihr könnt es direkt auf der Webseite Bitcoin-Buch.org bestellen - natürlich auch mit Bitcoin - oder auch per Amazon. Natürlich freuen wir uns auch über Spenden in Bitcoin, Bitcoin Cash oder Bitcoin SV an die folgende Adresse: 1BergmanNpFqZwALMRe8GHJqGhtEFD3xMw. Wer will, kann uns auch Hier mit Lightning spenden. Tipps für Stories sind an christoph.bergmann@mailbox.org immer erwünscht. Wer dies privat machen möchte, sollte meinen PGP-Schlüssel verwenden.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s