Jump to content

Adressen, Schlüssel und Backup


bavarian

Recommended Posts

Hallo,
 
folgendes wird immer wieder geraten:
 
1. "Backup your Wallet"
2. "Sichere immer deinen pivaten Schlüssel"
3. "Benutze für jede Transaktion eine neue Adresse"
 
zu 1) --> Verstanden.
wallet.dat + starkes Passwort --> regelmäßige Kopie(n) an einen "sicheren" Ort
 
zu 2) --> Theoretisch verstanden, praktisch nicht
Hier steht wie es geht. Ich nehme an ich muss dumpprivkey "mein Public Key" ausführen und bekomme dann meinen Private Key angezeigt. 
Aber welche der Adressen unter "Datei" -> "Empfangsadressen" ist mein Public Key zu meinem Konto?. Ich seh nur ne Liste mit Adressen, die ich irgendwann mal alle selber via "Zahlung anfordern" generiert habe, entsprechend kommt für jede Adresse ein anderer vermeintlicher Private Key raus.
 
zu 3) Praktisch verstanden, aber theoretisch nicht
OK, "Zahlung anfordern" drücken, generierte "Adresse" an den Bezahler schicken, warten.
Aber was mache ich da denn eigentlich? Ich verschicke doch offenbar nicht meinen Pub-Key, sondern irgendwas aus meinem Pub und/oder Priv Key abgeleitetem oder? Irgendwie habe ich da was ganz entscheidendes noch nicht richtig begriffen. Was genau ist denn jetzt (m)eine Adresse?
 
Im Bitcoin Wiki steht 
Adressen werden einfach durch Zufallszahlen erzeugt und anschließend werden noch einige Operationen durchgeführt um aus den Zufallszahlen ein passendes Public- und Private-Key Schlüsselpaar abzuleiten

 

Demnach ist meine persönliche Bitcoin-Adresse eine Zufallszahl aus welcher das Priv/Pub Schlüsselpaar erzeugt wird, wovon wiederum der private Schlüssel offenbar im Wallet gespeichert wird, den man ja tunlichst (siehe 2) backuppen sollte. Aber wo zum Henker finde ich diese meine Zufallszahlenadresse denn? Und wenn ich diese nicht zum Bezahler für eine Überweisung schicke, was genau schicke ich denn dann jedesmal, wenn ich eine neue Zahlungsadresse generiere?  :unsure:

 

Wer bekommt meinen Hirnknoten auf?

 
Link to comment
Share on other sites

Ich versuche es mal, bin aber nicht sicher, ob ich dich ganz richtig verstanden habe.

 

zu 1) --> Verstanden.
wallet.dat + starkes Passwort --> regelmäßige Kopie(n) an einen "sicheren" Ort

 

 
 
perfekt!
 
zu 2) --> Theoretisch verstanden, praktisch nicht
Hier steht wie es geht. Ich nehme an ich muss dumpprivkey "mein Public Key" ausführen und bekomme dann meinen Private Key angezeigt. 
Aber welche der Adressen unter "Datei" -> "Empfangsadressen" ist mein Public Key zu meinem Konto?. Ich seh nur ne Liste mit Adressen, die ich irgendwann mal alle selber via "Zahlung anfordern" generiert habe, entsprechend kommt für jede Adresse ein anderer vermeintlicher Private Key raus.

 

 

 
Der Befehl geht etwa so dumpprivkey "Adresse". Der Public Key ist in der Tat eine Ableitung von einer Adresse. Da der public key länger ist als eine Adresse, gibt es ziemlich viele public und damit auch priv keys für eine Adresse. Aber die Wahrscheinlichkeit, ihn zu erraten, ist weiterhin astronomisch hoch.
 
Das hast du wohl gar nicht gefragt :)
 
Vielleicht hilft das: Deine Wallet beginnt damit, zufällig einen privkey zu nehmen. Von dem ausgehend bildet sie den öffentlichen Schlüssel und von dem aus die Empfangsadresse. D.h. du hast nicht einen public key, sondern ganz viele.
 
 
zu 3) Praktisch verstanden, aber theoretisch nicht
OK, "Zahlung anfordern" drücken, generierte "Adresse" an den Bezahler schicken, warten.
Aber was mache ich da denn eigentlich? Ich verschicke doch offenbar nicht meinen Pub-Key, sondern irgendwas aus meinem Pub und/oder Priv Key abgeleitetem oder? Irgendwie habe ich da was ganz entscheidendes noch nicht richtig begriffen. Was genau ist denn jetzt (m)eine Adresse?

 

 

 
Ist das schon erkärt? Adresse ist eine Ableitung aus PubKey.
 
Woher eine Transaktion den pubkey weiß, wenn du nur die Adresse mitgeteilt hast, ist aber in der Tat eine interessante Frage. Da sollte man mal nachforschen. Weiß es jemand von euch? Axiom?
 
Demnach ist meine persönliche Bitcoin-Adresse eine Zufallszahl aus welcher das Priv/Pub Schlüsselpaar erzeugt wird ...

 

 

 
Es ist genau andersherum. Erst priv key, dann pub key, dann Adresse ...
Link to comment
Share on other sites

 

Ist das schon erkärt? Adresse ist eine Ableitung aus PubKey.
 
Woher eine Transaktion den pubkey weiß, wenn du nur die Adresse mitgeteilt hast, ist aber in der Tat eine interessante Frage. Da sollte man mal nachforschen. Weiß es jemand von euch? Axiom?

 

 

In der Tat ist die Bitcoin-Adresse eine Ableitung (Hash) des Public-Key.

Und mehr brauch der andere für eine Zahlung nicht zu wissen. Denn er zahl an diese Bitcoin-Adresse und dies wird im Block (Blockchain) verewigt.

Erst wenn der neue Besitzer wieder über diese Bitcoins verfügen will, muss er kryptografisch beweisen, dass er der Besitzer ist und die neue Transaktion signieren. Hier wird dann der Public-Key benötigt, den der Besitzer ja (auch) hat. Der Besitzer gibt durch die Signatur dann mehr Informationen frei.

 

Aus Sicherheitsgründen und wegen der Privatsphäre wird diese Adresse aber danach nie mehr benutzt.

 

Hier im Forum findet man schon sehr viele Informationen zu Bitcoin. Z.B. https://www.coinforum.de/topic/4003-wie-ist-eine-offline-paperwalleterstellung-möglich/;)

 

Axiom

Edited by Axiom0815
Link to comment
Share on other sites

Oh man, danke für eure Antworten. Ich glaube ich hab nen großen Teil nun endlich begriffen. Meine Ausgangsvorstellung des Bitcoin Kontomodels war zwar nicht vollkommen falsch, aber eben nicht vollständig richtig. Ich beantworte jetzt mal meine Fragen selber sehr ausführlich, damit andere vielleicht auch was davon haben und bitte um Korrektur falls nötig.

 

[FALSCH]

Ich bin bisher davon ausgegangen, dass ähnlich wie ein herkömmliches Konto eine IBAN und eine BIC hat bei Bitcoin das äquivalent eben das Schlüsselpaar bestehend aus dem PrivKey & PubKey ist, nur mit dem Unterschied, dass aus dem PubKey unendlich viele neuartige öffentliche Adressen abgeleitet werden können, nämlich diese, die mir generiert werden, wenn ich den "Zahlung anfordern" Button drücke. Das unterliegende Schlüsselpaar bleibt aber immer gleich und alles zusammen wird in der wallet.dat hinterlegt.

[/FALSCH]

 

Allgemeinverständlich:

Korrekt hingegen scheint zu sein, dass "die Adresse", auf welche mir jemand Geld schicken kann letzten Endes aus einer kryptographischen Ableitung des PrivKey besteht. Nämlich PrivKey --> PubKey --> Empfangsadresse. Anstatt jedoch aus dem PubKey weitere Empfangsadressen zu generieren, erzeugt man sich einfach einen weiteren neuen privaten Schlüssel und aus diesem dann wiederum den PubKey und letztlich eine weitere Empfangsadresse. Diese Adressen sind jene, die man vorfindet, wenn man im Bitcoin Core Client auf "Datei" --> "Empfangsadressen" klickt. Das Walletfile (wallet.dat) enthält dann einfach alle erzeugten privaten Schlüssel und jene generierten Adressen. Die Wallet ist also genau genommen ein Konten-Container, wenn man so will. Als Nutzer kann ich jetzt entscheiden, ob ich mir meine Bitcoins immer wieder auf eine gleiche Empfangsadresse oder eine neu Generierte schicken lasse.

 

Um nochmal meine eigenen Ausgangsfragen selber zu beantworten:

 

Was ist eine Bitcoinadresse?

Eine Bitcoinadresse ist eine aus dem PubKey abgeleitete, Base58 encodete 25-34 Zeichen langer alphanumerischer einmaliger String, der im kryptographischn Zusammenhang mit meinem PrivKey steht.

 

Wie wird eine Bitcoinadresse erstellt?

Der technische Ablauf zur Erstellung einer solchen Adresse ausgehend vom PubKey ist in diesem Artikel hervorragend beschrieben.

 

 

Was ist der PrivKey und was ist der PubKey und wo kommen die her?

Ein PubKey und PrivKey Schlüsselpaar wird aus dem ECDS-Algorithmus abgeleitet.

 

PrivKey

Der PrivKey ist nichts weiter als eine 256bit (=32byte) lange Zahl des Typs uint32.

Dieser kann genau genommen komplett frei erfunden werden. Z.B. per Zufallsgenerator, manuell aus irgendwelchen ausgedachten aneinandergereihten Zahlen oder aus allem auf dem man einen SHA256-Hash-Algorithmus anwenden kann. Zum Beispiel einer Wörterkette (sog. Seed), oder einer beliebigen Datei. Theoretisch könnte diese Nummer auch aus einer eingescannten Gehaltsabrechnung, nem Foto der Exfreundin oder eines kompletten Timemachine-Backupfiles erzeugt werden :D .

 

PubKey

Der Pubkey wird aus dem PrivKey abgeleitet. Etwas verwirrend ist, dass es eine komprimierte und eine unkomprimiere Variante gibt. Beide Formate sind erlaubt.

Komprimierte Variante: 1 Prefixbyte + 32 bytes (uint32). 

Unkomprimierte Variante: 1 Prefixbyte + 32 bytes (uint32) + 32 bytes (uint32)

Über das Prefixbyte sind die Varianten voneinander zu unterscheiden.

Zur Bitcoin-Adresserstellung (s.o.) wird die unkomprimierte Variante benötigt, wobei ein komprimierter Key quasi wieder dekomprimiert werden kann, indem der zweite 32 Byte Block aus dem ersten 32 Byte Block abgeleitet werden kann. 

 

Wie bekommt man nun den echten PrivKey aus dem (Bitcoin Core) Wallet extrahiert?

Es gibt nicht DEN PrivKey, sondern einen PrivKey für jede einzelne Adresse innerhalb des Wallets, welcher über die Debugkonsole des Clients via dumpprivkey "Adresse" extrahiert werden kann. Wichtig: Die Wallet muss vorher entschlüsselt sein!

 

Ist das jetzt der echte, echte "Genesis"-PrivKey von dem alles abgeleitet werden kann?

Genaugenommen: Nein.

Die Zeichenkette, die der Befehl "dumpprivkey" ausspuckt ist der PrivKey im WIF (=Wallet Import Format). Das ist der echte uint32 PrivKey (z.B. der aus dem Bild der Exfreundin) wieder Base58 encodet. Es reicht aber aus diesen zu sichern, wenn man sein Konto später wieder im Bitcoin Core Client herstellen möchte. Will man in andere Wallets umziehen oder Papieradressen generieren, braucht man aber unter Umständen den Bytestring. Die Konvertierung WIF<->Bytestring im technischen Detail kann man unter o.g. Link nachlesen. Wenn man selber einen PrivKey erstellt hat und prüfen will, ob der auch funktioniert, kann man das im WIF-Konverter mal prüfen. Aber bitte NUR ZUM TESTEN und wenn keine BTCs drauf sind und den Key dann vernichten, wer weiß wem die Seite gehört und ob die Keys da abgegriffen werden !!!

 

Muss man das alles wissen?

Nö. Wenn man nur Anwender ist, vermutlich nicht. Es reicht regelmäßig die wallet.dat Datei zu sichern und gut is. Um ein Gefühl dafür zu bekommen, worauf es beim Sichern und Wiederherstellen aber wirklich ankommt, wenn man zwischen Bitcoin Clients umziehen will, wenn man wirklich selber paranoia-saubere Adressen erstellen will oder nur verstehen will, warum der Coinforum-User "maximal" in diesem Thread so "ausrastet" ;)  hilfts. 

Edited by bavarian
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.