Website-Icon BitcoinBlog.de – das Blog für Bitcoin und andere virtuelle Währungen

Adressen bei Kryptowährungen: eine Einführung

Labyrinth. Bild von Alan Levine via flickr.com. Lizenz: Creative Commons

Adressen sind wichtige Konzepte für jeden, der mit Kryptowährungen hantiert. In unserem kleinen Guide versuchen wir, das Phänomen genauer zu beleuchten: Was sind Adressen? Wir werden sie gemacht? Und wie unterscheiden sich Adressen bei verschiedenen Kryptowährungen wie Bitcoin, Monero und Ethereum? Und wie können Adressen einmal besser zu lesen und zu merken sein?

In den frühen Tagen von Bitcoin war es noch möglich, Bitcoins an eine IP-Adresse zu senden. Dies sollte eigentlich eine bequeme Methode sein, um Bitcoins zu benutzen, ohne lange Ketten von Zeichen einzugeben. Nachdem die Bitcoin Entwickler allerdings bemerkt haben, dass man diese Methode, Coins zu versenden, recht einfach angreifen kann, wurde sie entfernt. Es gab zwar Pläne, sie später zu reaktivieren, aber dies ist niemals geschehen.

Diese kurze Geschichte scheint nur anekdotischen Wert zu haben. Tatsächlich aber zeigt sie sehr deutlich, was eine Adresse im Kern ist: Sie ist nichts besonderes und nichts, was in Stein gehauen ist. Eine Adresse ist lediglich ein Platzhalter, der es ermöglicht, dass man Transaktionen in Kryptowährungen empfängt. So ähnlich wie eine IBAN oder SWIFT Nummer.

Die Adresse selbst ist ebenso unbedeutend wie ihr Format. Das einzige, was zählt, ist, dass sie ihren Zweck erfüllt: Zahlungen an eine Partei zu ermöglichen, die eine einzigartige Information besitzt, üblicherweise einen privaten Schlüssel, um das gesendete Guthaben auszugeben. Eine Adresse ist, so gesehen, nicht mehr als ein Mittel der Identifizierunug.

Während allerdings SWIFT und IBAN Nummern von zentralen Instituten wie Banken vergeben werden, existieren die Adressen auf Kryptowährungen bereits. Jede Adresse, ob von Bitcoin, Ethereum oder Litecoin, hat bereits lange existiert, bevor eine Wallet sie gefunden hat. Der Grund dafür ist, dass Blockchain Adressen das Ergebnis mathematischer Operationen sind.

Der öffentliche Schlüssel: Womit die Generierung von Adressen beginnt

Nachdem die Zahlungen an IP-Adressen eingestampft wurden, wurde P2PKH zum Standardformat für Bitcoin Adressen. Wenn ihr es nicht kennt, soltest ihr vielleicht erstmal mit Bitcoin üben, bevor ihr diesen Artikel weiterlest. Eine P2PKH Adresse sieht etwa so aus:

1BvayiASVCmGmg4WUJmyRHoNevWWo5snqC.

P2PKH Adressen haben etwa 34 Zeichen und beginnen mit einer 1. P2PKH steht für „Pay To Public Key Hash“, was bedeutet, dass man an die Hash eines Öffentlichen Schlüssels zahlt. Für diejenigen, die das zum ersten Mal hören, mag sich das äußerst kompliziert anhören. Aber wir gehen Stück für Stück durch die ganze Prozedur der Adress-Generierung und erklären es so einfach wie möglich.

Jede Wallet-Software kann ganz einfach eine P2PKH Adresse generieren. Oder, um es korrekter zu sagen: so viele davon finden, wie ihr wollt. Dahinter steckt keine Quantenphysik, sondern die Verbindung verschiedener Standard-Operationen der Kryptographie.

Zunächst sammelt die Wallet Entropie, also Zufälligkeit, um einen privaten ECDSA Schlüssel zu erzeugen. ECDSA ist der kryptographische Algorithmus, der im Kern von Bitcoin-Adressen und -Transaktionen steckt. Es ist ein aymmetrischer Signatur-Algorithmus, was bedeutet, dass man mithilfe des PRIVATEN Schlüssels Nachrichten signieren und diese Signaturen mithilfe des ÖFFENTLICHEN Schlüssels prüfen kann. Mit ECDSA kann man der Welt ganz einfach die Info geben, die diese braucht, um deine Unterschrift zu signieren. Es ist die sicherere digitale Form der händischen Unterschrift.

Nachdem man also mit ein wenig Entropie einen privaten Schlüssel erzeugt hat, leitet die Wallet von diesem den öffentlichen Schlüssel ab. Dazu nimmt sie zufällige Koordinaten auf einer bestimmten Elliptischen Kurve (für Besserwisser: secp256k1) und macht damit einige weitere Berechnungen. Die Details sind nicht weiter wichtig. Worauf es ankommt, ist, dass dieser öffentlichen Schlüssel im Prinzip alles ist, was man braucht, um Bitcoins zu versenden und zu empfangen. In den frühen Tagen von Bitcoin wurde er auch dafür verwendet.

Sehr rasch wurde das Konzept jedoch erweitert. Denn der öffentliche Schlüssel hat einige Nachteile. Er ist nicht nur sehr lang und unhandlich (etwa 65 Zeichen), sondern auch anfällig für Rechtschreibfehler. Zudem riskiert man die Guthaben, falls ECDSA einmal gebrochen wird, etwa durch Quantencomputer, wenn man den öffentlichen Schlüssel enthüllt, etwa in einer Zahlungsaufforderung. Daher haben die Bitcoin-Entwickler schon früh eine Methode entwickelt, um den öffentlichen Schlüssel in die bekannte Adresse zu transformieren.

Die Erschaffung der Bitcoin Adresse

Um also eine Bitcoin-Adresse zu generieren, nimmt die Wallet den öffentlichen Schlüssel und jagt ihn durch einige Krypto-Algorithmen. Dabei geht es vor allem um Hash-Operationen. Was das ist, habe ich in diesem Artikel genauer beschrieben. Die Kurzfassung: „‚Hashen‘ ist eine kryptographische Operation. Mathematiker nennen sie auch Einmal-Funktion, weil sie einen Input (die Datei, eine Email) stets in denselben zufällig anmutenden Output verwandelt, es aber nicht möglich ist, vom Output auf den Input zu kommen.“

Grob gesagt passiert bei der Adress-Generierung das folgende: Die Software hasht den öffentlichen Schlüssel erst mit SHA 256 und dann mit RIPEMD-160. Dann fügt sie an das Ergebnis die bytes 00 als Präfix an den Anfang an – das ist der Grund weshalb P2PKH-Adressen mit einer „1“ beginnen – und noch vier Prüfsummen-Bytes an das Ende. Die vier Prüfsummen-Bytes werden erzeugt, indem die Wallet die RIPEMD-160 Hash inklusive Präfix zweimal mit SHA 256 hasht und dann die ersten vier Bytes des Ergebnisses nimmt. Die so bearbeitete RIPEMD-160 Hash, die noch hexadezimal ist, wird in das alphanummerische base58 konvertiert, und Voilá: wir haben die Bitcoin-Adresse, wie wir siekennen und lieben.

Eine Präsentation, die ich bei Slideshare hochgeladen habe, zeigt das Schritt für Schritt.

Ihr müsst, wie gesagt, nicht die Details verstehen. Was wichtig ist, ist, dass diese Adresse einen öffentlichen Schlüssel repräsentiert, und zwar auf eine Weise, die besser zu lesen ist und dank der Prüfsumme verhindert, dass ihr einem teuren Tippfehler zum Opfer fallt. Immer wenn ihr in die Wallet eine Adresse eingibt, werden sowohl Präfix als auch Prüfsumme kontrolliert. Wenn sie nicht passen, gibt es einen Error, und eine Transaktion ist, zum Glück, nicht möglich.

Wenn man den privaten Schlüssel besitzt, der über diese Operation zu einer Adresse führt, ist man die einzige Person, die eine gültige Transaktion mit Bitcoin schreiben kann, die mit dieser Adresse verbunden sind – während jeder dank der Adresse die notwendigen Infos hat, um die Signatur zu verifizieren. Dieser einfache Prozess – Transaktionen signieren und Signaturen verifizieren – ist mehr oder weniger alles, was Transaktionen in Kryptowährungen machen.

Bitcoin hat jedoch noch ein weiteres Adress-Format: die sogenannten P2SH Adressen. Diese Abkürzung steht für „Pay to Script Hash“, was bedeutet, dass man nicht mehr an die Hash eines öffentlichen Schlüssels zahlt, sondern an die Hash eines Scriptes. Man muss also nicht mehr die Signatur vorlegen, die zu einem bestimmten öffentlichen Schlüssel passt, sondern ein Skript, dass eine bestimmte Hash hat. Diese Art von Adressen ermöglichen es, flexiblere Methoden einzuführen, sich als Eigentümer von Coins auszuweisen, etwa die oft benutzen Multi-Sig-Adressen, bei denen mehrere Parteien eine Transaktion signieren müssen, damit sie gültig ist. Diese Adressen benutzen das Präfix 05, weshalb sie mit einer „3“ beginnen.

Allerdings könnte man einen ganzen Artikel über P2SH Adressen schreiben. Daher belasse ich es hier dabei und komme wieder auf die Adressen an sich. Wie verhält es sich mit ihnen in anderen Kryptowährungen?

Adressen bei anderen Kryptowährungen

Eine Menge anderer Kryptowährungen benutzen dasselbe Adressformat wie Bitcoin. Etwa Litecoin, Dash oder Dogecoin. Sie generieren die Adresse mit genau derselben kryptographischen Prozedur, mit ECDSA, SHA 256 und RIPEMD 160.

Der einzige Unterschied ist das Präfix vor der RIPEMD 160 Hash. Während Bitcoin das Präfix 00 verwendet, so dass alle Adressen mit einer 1 beginnen, benutzen die Altcoins andere Präfixe, so dass die Adressen mit anderen Zeichen beginnen: Mit L bei Litecoin, X bei Dash oder D bei Dogecoin.

Da diese Coins dieselben kryptographischen Algorithmen verwenden, könnt ihr mit demselben privaten und öffentlichen Schlüssel Coins der verschiedenen Währungen speichern. Zum Teil kann man auch Coins auf derselben Adressen lagern. So benutzen etwa Bitcoin und Litecoin dasselbe Präfix für P2SH Adressen – 05 – weshalb man auf Adressen, die mit 3 beginnen, sowohl Bitcoin als auch Litecoin verwahren kann.

Andere Kryptowährungen hingegen generieren die Adressen auf eine andere Art. Monero etwa basiert auf dem Cryptonote Algorithmus. Dieser benutzt einen anderen Signatur-Algorithmus, um die Schlüssel zu generieren, EdDSA. Cryptonote Währungen benutzen sogenannte Ring-Signaturen, die mehr Privatsphäre bieten, da man nicht genau sagen kann, mit welchem öffentlichen Schlüssel eine Transaktion signiert wurde. Aus diesem Grund beinhaltet eine Cryptonote Adresse zwei öffentliche Schlüssel, einen sogenannten „view“ und einen „spend“ Schlüssel.

Die Zeichenkette der Ethereum-Adresse wird zunächst nicht gehasht. Es wird ein Präfix angehängt, das die Version anzeigt, sowie eine Prüfsumme, die entsteht, indem man das ganze mit Keccak 256 hasht und dann die letzten vier Bytes nimmt. Die Kette mit den Schlüsseln, dem Präfix und der Prüfsumme wird dann in base58 konvertiert. Die dabei entstehendende Adresse ist länger als bei Bitcoin. Sie sieht etwa so aus: 43ZZViHQKd42X7cajEtc6NUoxG4AvyMu3ZqpGTBP85uhEfYoPVAuGHxJcomMHEPp3NWiKJRUMnuAJ7dfBrPTcfjYMPJzz2a.

Diese verschiedenen Möglichkeiten, Adressen zu erzeugen, zeigen, erneut, dass Adressen lediglich ein Mittel sind, um Zahlungen zu empfangen. Für diese Basis-Funktion ist es egal, wie man aus dem öffentlichen Schlüssel eine Adresse bildet, welche kryptographischen Algorithmen man verwendet und wie die Adresse am Ende aussieht. Die Prozedur der Adressbildung hat allerdings wichtige Implikationen für die Sicherheit und Privacy: Ohne die Prüfsumme könnte man sich bei Bitcoin-Adressen vertippen, und ohne die Integration des zweiten Schlüsselns könnte Monero nicht so anonym sein, wie es ist.

Ein Blick auf Adressen bei Ethereum verdeutlicht diese Erkenntnis weiter.

Adressen bei Ethereum

Wie so viele andere Dinge im Kryptouniversum werden auch Adressen erst so richtig interessant und verwirrend, wenn wir uns Ethereum zuwenden. Viele Leute, die mit Bitcoin begonnen haben und dann mal Ethereum versucht haben, sind verwirrt vom Adress-Format. Dieses ist eine lange Kette von hexadezimalen Zeichen, die mit 0x beginnen. Zum Beispiel 0x0eb81892540747ec60f1389ec734a2c0e5f9f735.

Technisch gesehen sind die Unterschiede zu Bitcoin nicht so groß. Ethereum scheint lediglich auf halbem Wege aufzuhören. Wie bei Bitcoin beginnt man mit einem privaten Schlüssel, und wie bei Bitcoin wird darauf mit ECDSA ein öffentlicher Schlüssel mit 64 Byte gebaut. Danach wird der öffentlichen Schlüssel gehasht, nicht mit SHA 256, sondern wie bei Cryptonote mit Keccak 256. Das Ergebnis ist eine hexadezimale Kette von 32 Byte. Die ersten 12 davon werden weggeworfen, und die letzten 20 ergeben eine Adresse mit 40 Zeichen. An die wird dann das Präfix 0x hinzugefügt, und schon haben wir die Adresse. Anders als bei Bitcoin oder Cryptonote wird die Adresse nicht in base58 übersetzt, sondern bleibt hexadezimal (0-F).

Der wichtigste Unterschied ist jedoch, dass Ethereum Adressen keine Prüfsumme haben. Jede Kette von 40 hexadezimalen Zeichen kann eine gültige Ethereum Adresse sein. Daher wird den Usern strikt abgeraten, Ethereum Adressen von Hand einzugeben, da die Wallets keine Tippfehler bemerken. Man kann hier sehr leicht Coins verlieren. Im Vergleich mit anderen Währungen scheinen Ethereum-Adressen daher unfertig und benutzerunfreundlich zu sein. Für eine Kryptowährung, die für sich beansprucht, der heißeste neue Scheiß zu sein – und damit bei den Märkten auch ganz gut durchkommt – ist das verwirrend schwach.

Aber natürlich gibt es hierfür Gründe, die gar nicht mal so schlecht sind. So wurden die Adressen in der ersten Version von Ethereum, Frontier, als eine Art Platzhalter eingeführt. Da Ethereum damals noch nichts wert und das Projekt der Nerds unter den Nerds war, hat sich niemand für Benutzerfreundlichkeit interessiert. Es war niemals geplant, dass diese Adressen langfristig genutzt werden. Stattdessen soll Ethereum einen Smart Contract benutzen, der Namen mit öffentlichen Schlüsseln verbindet, so dass man Ether einfach an Namen oder Domains senden kann. Langfristig soll Ethereum also den Kreis schließen und das ermöglichen, was Satoshi eigentlich vorhatte – dass man an IP Adressen oder Domains bezahlt.

Es gibt aber noch einen weiteren Grund, den der Ethereum Entwickler Jeff Coleman erklärt: Die Entwickler sind der Meinung, dass vollständige Adressen besser sein können als bei Bitcoin. Erinnern wir uns: Adressen repräsentieren lediglich die Informationen, die man braucht, um Guthaben mit einem privaten Schlüssel zu verbinden, ohne diesen zu kennen. Dies kann, wie Ethereum plant, mit Verträgen gemacht werden, die die öffentlichen Schlüssel mit Namen verbinden. Es kann aber auch mit sehr ausgefeilten Adress-Formaten gemacht werden.

Das Format, das die Ethereum-Entwickler derzeit bevorzugen, nennt sich ICAP und sieht so aus:

E7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS

Wie Bitcoin besteht es aus base36 Zeichen und beinhaltet eine Prüfsumme. „Aber das ist nicht alles, Leute! Eine Sache ist, dass ICAP eine vollständig gültige International Bank Account Number (IBAN) ist,” erklärt Coleman, „Das bedeutet, die existierende Software der Banken kann die Nummer verstehen und mit ihr interagieren.“ IBAN ist die internationale Identifizierungsnummer von Bankkonten. Sie besteht aus 32 alphanummerischen Zeichen, die einen Ländercode, eine Prüfsumme, die Banknummer sowie die Account-Nummer beinhalten. Das von Ethereum entwickelte ICAP-Format benutzt ein XE als Landescode und eine Kette von 16 bis 30 alphanummerischen Zeichen, die Informationen wie Account, Asset, Prüfsumme oder Institution beinhalten.

Coleman fährt fort: „Eine andere Sache ist, dass ICAP keine hexadezimalen Adressen braucht. Stattdessen können wir alle dazu überwechseln, Namereg Verträge zu benutzen, so dass man eine für Menschen aussprechbare Zeichenkette benutzt, so was wie XE81ETHXREGJEFFCOLEMAN, was immer noch dem Format der Banken entspricht, aber tatsächlich auch zu merken sein kann.“ Langfristig sollen Ethereum Adressen also memorierbar und kompatibel mit dem Bankensystem sein.

Die Verbreitung der ICAP Adressen wächst. Die üblichen Clients sind bereits in der Lage, sie zu erzeugen und zu lesen, auch wenn die alten Adressen weiterhin Standard sind und vermutlich noch für eine lange Zeit bleiben werden. Um diese sicherer zu machen, hat Vitalik Buterin vor einiger Zein eine kleine Verbesserung eingeführt, so dass Großbuchstaben als Prüfsumme gelten. Mit EIP55 generierten Adressen reicht ein Großbuchstabe, um dafür zu sorgen, dass die Adresse mit einem Tippfehler ungültig wird.

Steem – wenn der Username zur Adressse wird

Die Kryptowährung Steem hat ein ähnliches System wie das implementiert, das Ethereum einmal erreichen will. Bei Steem ist der Username die Adresse.

Steem ist eine Kryptowährung auf Basis von BitShares. Es ist mit der Plattform Steemit verbunden, auf der die User Steem-Coins minen können, indem sie Upvotes für Posts und Kommentare sammeln. Dieser „subjektive Proof of Work“ ist eine clevere Verbindung von Proof of Stake und Proof of Work. Das System ist insgesamt so komplex wie interessant. Es beinhaltet „Delegierte“, die gewählt werden, um den Proof zu organisieren, es gibt drei Arten von Token, Steem, Steem Power und Steem Dollar, und vermutlich ist Steem viel weniger dezentral als Bitcoin oder Ethereum, da es zu großen Teilen auf der privat gehosteten Plattform Steemit beruht und es auch keine offenen Wallets und Clients zu geben scheint.

Was jedoch faszinierend ist, ist die Art, wie Steem Adressen bildet. Die User bekommen bei der Anmeldung auf Steemit einen privaten Schlüssel, während der Username ihre Adresse ist. So wie ich es sehe, sind die Adressen daher keine kryptographischen Derivate vom privaten oder öffentlichen Schlüssel, sondern in einem Verzeichnis mit dem öffentlichen Schlüssel verbunden, so dass man in der Blockchain weiterhin prüfen kann, ob eine Transaktion gültig ist. Die Verbindung zwischen User und Schlüssel bzw. Guthaben jedoch hängt bei Steem offenbar an einer Datenbank, die privat gehostet ist. Es ist also nicht auf Mathematik, sondern auf Vertrauen gebaut.

Dennoch sind die Adressen auf Basis der Usernamen bei Steem interessant, da sie ein Optimum der Usability gewährleisten. Aufgrund des notwendigen Vertrauens und der zentralisierten Adressvergabe dürfte dieses System jedoch für die meisten Kryptowährungen wenig attraktiv sein, da diese ja gerade die Verifizierung dezentralisieren und Vertrauen durch Mathematik ersetzen wollen.

Ein Namens-Register auf Basis von Smart Contracts, wie es Ethereum plant, könnte jedoch das beste aus beiden Welten verbinden: Es ist dezentral und benötigt kein Vertrauen, wie Kryptwährungen wie Bitcoin und Monero – aber es ist so einfach zu benutzen wie die Adressen von Steem.

Edit: Mein begrenztes Wissen über Steem erzeugt eventuell ein unvollständiges Bild. Bitte die kundigen Kommentare von btswolf unter dem Artikel lesen. Danke!

Die mobile Version verlassen