Wenn Bitcoin-Adressen wirklich zufällig sind, warum sind dann einige schwieriger zu generieren als andere?

In diesem Beitrag erklärt TierNolan, warum „Bitpoin“ viel einfacher zu generieren ist als „Bitpoin“, und das hat hauptsächlich mit der Position (erstes Zeichen) zu tun. Aber ich erinnere mich, dass bestimmte Zeichen (ich glaube 'i' und 'o') viel schwieriger zu generieren sind, unabhängig von ihrer Position in der Adresse. Wie ist das möglich?

Antworten (3)

Der 160-Bit-Hash, der in Adressen codiert ist, ist gleichmäßig verteilt („wirklich zufällig“, wie Sie es nennen), die base58-codierte Form jedoch nicht. Manche Charaktere kommen zum Beispiel eher am Anfang vor.

Betrachten Sie zur Veranschaulichung die Menge aller ganzen Zahlen zwischen 0 und 1999. Auch wenn jede dieser Zahlen mit gleicher Wahrscheinlichkeit gewählt wird, gilt dies nicht für ihre Dezimaldarstellung. Dort beginnt die Hälfte der Zahlen mit einer 1!

Schönes Beispiel, und ich verstehe, warum die erste Ziffer nicht immer zufällig ist. Aber zwischen 0 und 1999 ist die letzte Ziffer immer gleich verteilt, und wenn 'o' oder 'i' automatisch die Schwierigkeit erhöhen, ist auch das letzte Zeichen nicht gleich verteilt. Ich habe gesehen, wie der Autor von Vanity-Gen dies einmal auf Bitcointalk erklärt hat, konnte aber seinen Beitrag nicht finden.

Spezifische Antwort, warum 1Bitpoin einfacher zu generieren ist als 1bitpoin:

Die Adresse ist eine Basis-58-Darstellung einer 192-Bit-Ganzzahl (160-Bit-Hash plus eine 32-Bit-Prüfsumme). Der größte darstellbare Wert ist (2^160-1) mit der entsprechenden Prüfsumme: 0xfffffffffffffffffffffffffffffffffffffa06820b oder die 34-stellige Adresse „1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr“.

Im Basis-58-Alphabet ist 'B' < 'Q' < 'b'. Daher ist jede 34-Zeichen-Zeichenfolge, die mit „1Bitpoin“ beginnt, gültig, solange die Prüfsumme korrekt ist. Aber 34-Zeichen-Strings, die mit '1bitpoin' beginnen, sind alle außerhalb des gültigen Bereichs. Sie können immer noch 33-Zeichen-Strings beginnend mit '1bitpoin' generieren, aber offensichtlich gibt es viel weniger davon.

Die Zeichen 'i' und 'o' sind im case-insensitiven Sinne nur schwer zu generieren, da Großbuchstaben 'I' und 'O' in base-58 nicht gültig sind.