Nochmal Überblick

Ich hatte vor kurzem über meine Ledger-Erfahrungen berichtet, und nach einem Überblick über das Wesen der Blockchain-Kommunikation gefragt. Leider ging das unter dem Ledger-Thema unter. Deshalb nochmal kurz gefragt. Sehe ich das so richtig :

Ich will eine Paper-Wallet machen, und irgendwann davon aus Coins z.b. von und nach Bitcoin.de schicken. Die Kommunikation stelle ich mir so vor, daß irgendwo ein Server (also informationstechnisch ein Responder) läuft, der Anfragen von mir, dem Client (Requester), bearbeiten kann.

  1. Ich erzeuge eine (formatkonforme) Zufallszahl
  2. Daraus generiere ich mit Kryptoalgorithmen (z.b. bitadress.org) einen public key.

Das ist sowas wie eine ISBN, die, weil formatkonform, von einem Blockchain-Server akzeptiert wird.

  1. aus dem public key generiere ich (wieder krypto…) einen private key.

Das ist sowas wie der Tresorcode in der Bank mit obiger ISBN.

  1. Innerhalb dieses Tresors" kann ich jetzt Fächer aufmachen, sogenannte Adressen (Hash-Werte zum private key)

  2. Jetzt schreibe ich eine Nachricht (den Request), in der steht, daß ich irgendwas verschieben möchte, z.b. 1 Bitcoin an bitcoin.de… Ich adressiere mit dem public key von bitcoin.de, und gebe eine Adresse bei denen an. Diese Nachricht „personalisiere“ ich, indem ich sie mit meinem private key „signiere“ (der aber damit nicht lesbar wird). Der Server kann nun das lesen, und in der blockchain nachschauen, ob es den Coin, von dem ich da rede (also eine Transaktion, die mir den Coin übermittelt hat), überhaupt gibt.

ABER : für das Formulieren eines „wohlgeformten“ Requests incl. der Angabe der Adressen und dem Kryptoprotokoll brauche ich doch eine Software. Also ein Tool, das mir das Portokoll macht. Die muß ich aus dem Web laden, selber schreiben kann ich das nicht.
Woher weiß ich, daß ich da nicht was lade, was ein „Hintertürchen“ enthält und mich dann abzockt ??

→ ist der Ablauf richtig beschrieben, was ist mit der abschließenden Frage ?

Ich glaube der von dir beschriebene Ablauf ist nicht richtig. Die Hälfte habe ich nicht verstanden, aber von einem Public Key kannst du nicht zu einem Private-Key herleiten.

Ich würde dir empfehlen dich erstmal mit Bitcoin weiter auseiander zu setzen. Besonders mit den Themen (Seed, Private Key, Public Key, Wallets, HD-Wallet, Hardware-Wallet etc.)

Zudem würde ich eine BitBox empfehlen. Die Software ist komplett open-Source, sodass es dort keine Hintertüren geben sollte.

Nein.

Eine Zufallszahl hat kein Format, sondern ist zufällig.

Die Zufallszahl ist der private key. Daraus errechnest du den public key, aber wenn du dafür bitaddress.org verwendest, hast du schon verloren, weil du keine Ahnung hast, ob die Website nicht kompromittiert ist.

Natürlich nicht – wenn das ginge, könnte das ja jeder machen. Den private key hast du aus Schritt 1.

Du kannst keine „Fächer aufmachen“. Du hast einen einzigen private key, daraus erhältst du einen einzigen public key, und daraus kannst du eine einzige Adresse errechnen (und zwar nicht als „Hash-Werte zum private key“, sondern aus dem public key). Wenn du mehrere Adressen willst, darfst du nicht mit einem private key beginnen, sondern mit einem BIP32 seed.

Keine Ahnung, was du meinst mit „ich adressiere mit dem public key von bitcoin.de“, aber das machst du nicht, weil du den gar nicht kennst. Du schreibst eine Transaktion mit deiner Adresse als Input und der bitcoin.de-Adresse als Output, und signierst sie mit dem private key, der zu deiner Adresse gehört.

Ja, und das Tolle ist, dass diese Software bei der Transaktion alles, was auf deiner Adresse war und nicht Teil der Transaktion an bitcoin.de sein soll, entweder dem Miner schenken wird oder an irgendeine andere Adresse schicken wird, die du noch nie gesehen hast, und dann wirst du hier panisch ins Forum schreiben, wo jetzt deine ganzen BTC sind, wie schon viele andere IT-Bastler vor dir.

Gar nicht. Viel Glück. (Oder du verwendest doch einfach deinen Ledger auf einem normalen Computer wie normale Leute.)

2 „Gefällt mir“

Ja genau !
Hab ich falsch geschrieben im Ablauf unter 3)
Der private key wird kryptotechnisch aus einer Zufallszahl erzeugt.
Daraus ist ein public key ableitbar, dies aber nicht umkehrbar.
Daraus als hash eine Adresse.

Sorry,

Eine Zufallszahl hat kein Format, sondern ist zufällig.

Ist das Format über die Länge (=Informationsgehalt) nicht festgelegt ?
Ich dachte, 256 Bit wären Standard.

Natürlich nicht – wenn das ginge, könnte das ja jeder machen. Den private key hast du aus Schritt 1.

Klar, war grob falsch in 3) und 4), ich hab private und public verwechselt …

Keine Ahnung, was du meinst mit „ich adressiere mit dem public key von bitcoin.de“, aber das machst du nicht, weil du den gar nicht kennst.

Ok, ich dachte, ich muß auch den public key des Empfängers kennen.

Ja, und das Tolle ist, dass diese Software bei der Transaktion alles, was auf deiner Adresse war und nicht Teil der Transaktion an bitcoin.de sein soll, entweder dem Miner schenken wird oder an irgendeine andere Adresse schicken wird,

Jetzt mal langsam bitte, damits auch ein IT-Bastler versteht :

Meine Kommunikationssoftware schickt ins Netz einen Request, in dem steht, ich möchte eine Bitcoin-Menge (sagen wir 0.1) von meiner Adresse (mit meinem public key dahinter, das Ganze signiert mit meinem private key), an die Empfängeradresse transferieren.

Meine Software schickt das nun an einen Server im Web (am Ende muß es ja eine IP-Adresse sein, oder ?). Ab da wirds unklar für mich. ist das immer derselbe, von einem Absender aus gesehen ? So ähnlich wie ein DNS ? Wenn nicht (ich rate mal : jede „Miner“-Software kann das), wie kriegt meine Kommsoftware die IP von so einem raus ?

Wenn die Serversoftware alles geprüft hat, wird ein Eintrag in die Datenbank (blockchain) ausgeführt, das ist der eigentliche „Übertragungs“-Schritt.

Formatvorschriften gibt es für Zeichenfolgen, nicht für Zahlen – für die gibt es allenfalls mathematische Einschränkungen.

Hier allerdings keine besonderen, denn dass der private key nicht größer als 2^256 sind darf, stimmt nicht, es bringt nur keine zusätzliche Sicherheit. Tatsächlich ist es so, dass bereits das obere Ende der 256 bit range für private keys auf Secp256k1 unnütz ist, weil du sowieso modulo der Ordnung der entsprechenden zyklischen Gruppe rechnen musst, die kleiner als 2^256 ist.

Aber ja, dein RNG sollte den 256-Bit-Zahlenraum verwenden. Das ist keine Formatvorschrift, sondern dient deiner eigenen Sicherheit. Wenn du willst, kannst du dir aber auch einfach eine Zahl von 1 bis 10 ausdenken und die als private key verwenden.

Das, was du „Server“ nennst, ist eine von vielen Nodes des Bitcoin-Netzwerks. Jede Walletsoftware kennt die Adressen von irgendwelchen Nodes, damit sie Transaktionen ans Netzwerk übermitteln kann.

Wenn du deine Transaktionen selber basteln willst, kannst du auch einfach selbst eine Node betreiben (sprich: Bitcoin Core auf deinem Rechner laufen haben) und dieser deine gebastelte Transaktion direkt lokal übermitteln. Die Nodesoftware weiß, wie sie andere Nodes findet und deine Transaktion verbreitet, und irgendeine dieser anderen Nodes gehört dann einem Miner, der deine Transaktion in einen Block aufnimmt.

Du scheinst die Sache komplizierter zu machen, als nötig. Wenn du vor hast Bitcoin zu verwenden, nutze doch bitte die bereits etablierten modernen Wege. Paper Wallets sind eine sehr alte Methode und bürgen viele Gefahren. Es kann schnell zu Totalverlust kommen. Schau dir stattdessen modernere Technologien an. Dazu gehören Hot Wallets, um komfortabel Bitcoin zu verschicken, und Hardware Wallets, um Bitcoin sicher aufzubewahren.

Hast du jedoch vor, zu verstehen wie Bitcoin technisch funktioniert, muss ich dir leider mitteilen dass du vieles noch nicht verstanden hast. Da hilft dann nur weiter einlesen und mehr Fragen zu stellen. @mowtan hat ja bereits versucht einiges gerade zu rücken. Ich befürchte jedoch dass das für dich noch nicht ausreicht.

Du musst aber nicht die gesamte Technik verstehen, um Bitcoin zu verwenden. Aber cool wenn du es trotzdem verstehen möchtest.

Jetzt bin ich ein gutes Stück weiter. Danke !

(btw : es geht hier nicht darum, unbedingt das Zeug von bitcoin.de auf eine eigene Wallet zu schieben. Ich hab seit vielen Jahren einen bitcoin-Account, und das kann da gut noch einige Jahre liegen, garantiert sicherer als auf einem Wallet, das ich zusammenmurkse. Ich will nur den Mechanismus verstehen ! )

Das, was du „Server“ nennst, ist eine von vielen Nodes des Bitcoin-Netzwerks. Jede Walletsoftware kennt die Adressen von irgendwelchen Nodes

Das ist die Info, die mir gefehlt hat. Was ich „Server“ nenne, ist informationstechnisch gemeint. Da ist eine Software, die auf einen Request hin antwortet, „old school“ ein Responder. Umgangssprachlich ein Server (oder eben Node). Und da sind wohl auch Listen anderer Server. Fehlt bloß noch eine Verwaltungseinheit, die IPs neuer Server in die Quelllisten aufnehmen kann (analog DNS).

muss ich dir leider mitteilen dass du vieles noch nicht verstanden hast.

Na, da sind wir uns ja einig. Ich lese, aber vieles bleibt im Dunklen. Das IP-Handling unter den Nodes z.b. (siehe oben) hatte ich nirgends gefunden.

Wenn es um diese Richtung geht, ist die obige Beschreibung nicht korrekt – da ging es darum, dass du zu bitcoin.de sendest. Wenn du von bitcoin.de auf deine eigene Wallet senden willst, hat dein private key nichts damit zu tun.

Vielleicht möchtest du übrigens mal ausprobieren, ob du überhaupt von deinem bitcoin.de-Account irgendwo hin senden kannst – gerade bei bitcoin.de ist das oft ein Problem, und es gibt zahlreiche User, die geglaubt haben, sie haben dort BTC, auf die sie jederzeit zugreifen können, und beim Auszahlungsversuch wurde dann ihr Konto gesperrt.

Bitcoin Core beinhaltet sowohl eine statische, manuell verwaltete Liste von IPs, unter denen Nodes laufen, als auch eine Liste von DNS-Seeds, also Domains mit mehreren A-records, die alle auf IPs zeigen, unter denen Nodes laufen.

Beides dient nur der initialen Kontaktaufnahme zum Netzwerk. Sobald eine Node mal mit ein paar anderen Nodes verbunden ist, geben die ihr die Adressen von weiteren Nodes.

das wäre betrüblich. ich hatte in grauer urzeit mehrere coins gekauft.
also doch ein hardware-wallet, und das aus bitcoin.de in sicherheit bringen ??

Soweit ich verstehe, hast du ja einen Ledger, der in deinem VM-Setup nicht läuft, aber es sollte ja kein Problem sein, einfach einen normalen Computer dafür zu verwenden.

Wenn du die Gewissheit haben willst, dass die BTC, die du zu haben glaubst, wirklich unter deiner Kontrolle stehen, wäre ein Übertrag auf deinen Ledger sicher empfehlenswert.

1 „Gefällt mir“

Mach ich, danke für den Tipp.

Das Ledger-Dings hab ich zurückgeschickt, weil ich das mit dem VM-Ware-Treiber sehr übel fand (Der Treiber, da bin ich mir sicher, ich hab’ rund 20 Jahre Erfahrung mit VM-Ware in allen Varianten) Ich find auch die HW (das Display) mies. Ich versuchs mal mit einem Bitbox2 oder dem Trezor.

Zu oben : Wieso brauch ich, wenn ich von bitcoin zu meiner eigenen Wallet schicke (oder jedenfalls deren Adresse als Ziel angebe, keinen privat key ? Ich kann doch sonst (egal ob auf Papier oder in HW) bei mir keinen public key und keine Adresse erzeugen, die ich als Ziel aber angeben muß ??

(oh weh, steh’ ich schon wieder auf dem Schlauch ?)

Ich habe nicht geschrieben, dass du keinen brauchst, sondern dass er mit der Transaktion nichts zu tun hat, im Sinne von: damit wird nichts signiert.

Aber tatsächlich ist es so, dass wenn du ein normales BIP32-basiertes Setup hast, so wie jeder in 2024, du nicht jede einzelne Adresse aus einem einzelnen private key berechnest, sondern so viele Adressen, wie du willst, aus deinem extended public key ableitest.

Ok, danke.
So ganz daneben bin ich also gar nicht.
Ob das Ganze jetzt ASCII-basiert den Schlüssel angibt (wie BIP32, wenn ich nicht irre) oder irgendwie anders, ist ja für die eigentliche Transaktion völlig egal.

Was ich nicht durchschaue, ist die Frage, wieso ich nicht beliebige Bitcoin-Teile transferieren kann, woher das Problem der „Restbeträge“ kommt. Hängt vielleicht mit der Funktion des minings zusammen ? Also irgendwer bastelt mit seiner Software die „Berechtigung“, an die Blockchain eine Entität anzuhängen. Dafür kriegt er irgendwas. Diese entity bietet jetzt Speicherplatz für irgendjemand, dort eine Transaktion einzuschreiben. („einzupflegen“) im DB-Sprech. Wieso kann ich da jetzt nicht z.b. 3,2 Bitcoin oder was immer einfach reinschreiben, mit Empfänger, Sender, Timestamp und allem … ?

Kannst Du.

Du bekommst halt ggfs. Wechselgeld zurück.

Stichwort: UTXO-Modell.

Naja, Du schreibst halt keine Blöcke, sondern der Miner, der Deine Transaktion aufnimmt.

Und ja, Du kannst dem Mempool (bzw. allen Nodes) eine Transaktion mitteilen, die Du verarbeitet haben möchtest. Und dafür kannst Du mehrere UTXOs verwenden bzw. musst das je nach Betrag eben auch.

Ein transaction output (TXO) kann nur einmal als Input einer Transaktion verwendet werden. Gäbe es diese Einschränkung nicht, wäre das Ganze viel schwieriger zu dezentralisieren, weil nicht gewährleistet werden kann, dass verschiedene Nodes neue Transaktionen in der gleichen Reihenfolge reinbekommen.

Wenn du irgendeinen Teil deines TXO, den du in den input setzt, weiterverwenden willst, musst du in deiner Transaktion also einen neuen TXO draus machen.

Ich brauche eine „alte“ Transaktion, in der ich Coins gekriegt habe, als „Nachweis“, daß ich das Zeug habe. Angenommen ich habe 1,5 Coins erhalten.

Für die aktuelle Transaktion gebe ich diese alte Transaktion als Input an, und als Output die Adresse des Empfängers und die Menge die er kriegen soll, sagen wir 1 Coin.

Die „alte“ Transaktion bleibt aber mit ihrem Rest von 0.5 Coins nicht zur Verfügung, sondern die Restmenge muß in eine weitere neue Transaktion verlagert werden („Wechselgeld“).

Muß ich das selber berechnen und organisieren, wenn ich die Wallet selber betreibe (paper oder sonst irgendwie cold) ? Bei bitcoin.de merke ich davon ja gar nix…

Du brauchst nicht extra noch eine neue Transaktion machen.

Du (bzw. die Software) schreibt dann 1.5 Coins in den Input und zwei Outputs. Einen Output an die Adresse des Empfängers und einen zweiten Output mit dem Wechselgeld an eine Adresse von Dir.

Alles in einer Transaktion.

Genau. Bei bitcoin[.]de sind es eben noch nicht Deine Coins.

Das übernimmt die Walletsoftware für Dich.

(Wobei Du natürlich auch erweiterte Features wie ‚coin control‘ verwenden kannst, dann hast Du ein paar mehr Möglichkeiten.)

Langsam kapier ich was :wink:

Erlaubt noch eine Frage : Wenn ein Seed-Phrase Generator (wie zum Beispiel der im Ledger) Wörter würfelt, benutzt er ja eine Quellliste. Wenn ich ins Web schaue, finde ich z.b. im BIP-32 Protokollvorschlag eine Liste von 2048 englischen Wörtern.

24 aus 2048 ?? Läßt sich das nicht brute-force mäßig knacken ?

(24 Ziffern in Reihenfolge bei 2048 möglichen … gibt wieviele Varianten ?)

Ich glaube, ich nehme die Frage zurück.
Wenn ich nicht irre, ist das „Würfeln mit Zurücklegen“.
Bei 2048 Varianten und 24 Wörtern ergibt sich eine Anzahl von rund 3 x 10^80 Möglichkeiten.
Die Reihenfolge macht die vielen Möglichkeiten …

Grob ok ?

1 „Gefällt mir“