Bitcoin Forum

Local => Anfänger und Hilfe => Topic started by: daboehla on August 01, 2015, 05:51:06 PM



Title: C# Public Key von Private Key VERY SLOW
Post by: daboehla on August 01, 2015, 05:51:06 PM
Hallo zusammen,

ich versuche derzeit aus einem private key den dazugehörigen public key zu errechnen.
z.b.: priv. key: 26760d07c7b06da3ac7d27946b4853e0665c50e0a8b705269b2cfd48f061de2b  -> 1A9yKFpmH1GFFeLLv2XGhP41BKCFgRgykN
Dazu habe ich mir den Sourcecode von Bitcoin Address Utility (https://en.bitcoin.it/wiki/Bitcoin_Address_Utility) heruntergeladen.

Hab im Sourcecode die Stelle gefunden, an welcher der Public Key in die Textbox geschrieben wird und zum Test mal 100 Mal durchlaufen lassen.

Nun ist mein Problem, dass es SEHR lange dauert... 100 mal generieren -> 10s -> ca 10 Keys/s
Jemand eine Idee warum das so lange dauert ?

Wenn ich mir vanitygen anschaue, die erstellt ja ca 1 Million pro Sekunde.

Gib es eine schnellere Möglichkeit den public key mit C# zum rechnen ?

Hier mein Testcode:
Code:
                DateTime start = DateTime.Now;
                for (int i = 0; i < 100; i++) {
                    KeyPair kp = new KeyPair(txtPrivHex.Text, compressed: compressToolStripMenuItem.Checked);
                    string pubkey = kp.AddressBase58;
                }
                double elapsedsecs = (DateTime.Now - start).TotalSeconds;

EDIT: Topic im englischen Bereich:
https://bitcointalk.org/index.php?topic=1141038.0


Title: Re: C# Public Key von Private Key VERY SLOW
Post by: daboehla on August 01, 2015, 06:32:15 PM
Hab den Code nochmals genau untersucht und die Operation gefunden, die so lange braucht.

Ist die Umrechnung vom Private Key zum Public Key mit den "komischen" Elliptic Curves....
Kann es sein das die Library(Org.BouncyCastle) so langsam ist ? :/

Soweit ich das System von Bitcoin verstanden habe, gibt es keinen Ausweg aus dieser Operation ...?

Folgender Code braucht 100ms:

Code:
            Org.BouncyCastle.Math.BigInteger Db = new Org.BouncyCastle.Math.BigInteger(1, _privKey);
            ECPoint dd = point.Multiply(Db);


Title: Re: C# Public Key von Private Key VERY SLOW
Post by: herzmeister on August 07, 2015, 02:21:20 PM
gibt ja inzwischen auch eine offizielle BigInteger-Implementierung von MS, vielleicht ist die performanter https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

aber is sicher nich ohne, diese Dependency in der verwendeten Library zu ändern


Title: Re: C# Public Key von Private Key VERY SLOW
Post by: hexafraction on August 20, 2015, 07:39:55 PM
Das Algorithmus von vanitygen ist im Unterschied zu Ihren Algorithmus. Vanitygen macht "point-addition", aber man musst fur Private zum Public "point multiplication" machen. Point-addition ist schneller als Point multiplication, aber point addition kann nur eine Suche von alles private keys machen (Zu secret exponent wird immer wieder inkrementiert).

Entschuldigung, leider ist mein Deutsch schrecklich.