Okay, ich denke ich kapiere so langsam wozu die Invertierung nötig ist.
Ein Punkt auf der elliptischen Kurve wird in der openssl Kryptobibliothek in Jacobi Koordinaten (projektive Koordinaten) beschrieben, weil das für die häufig benötigte Modulus Multiplikation wesentliche Vorteile bringt. Um den Punkt als Schlüssel auszugeben, muss dieser allerdings in affinen Koordinaten vorliegen. Hierzu braucht man eine Division zurch z, welche auch als Multiplikation mit der Inversen von z anzusehen ist:
Affine points(x,y) correspond to standard projective points(xz,yz,z).Converting from standard projective to affine coordinates requires one modular inversion z^-1 and two modular multiplications:x(z^-1) and y(z^-1)
Ich würde mal sagen dass das Vanitygen Tool 95 % seiner Zeit mit dieser Modulus Invertierung verbrät. Also müsste man sich bei einer GPU Implementierung genau darauf konzentrieren - und schon könnte man bis zu 20 mal schneller solche Addressen erzeugen.
Hier noch schnell das Profiling Ergebnis mit den Namen der Funktionen. In meinem Testlauf, der etwa 22 Sekunden dauerte, gingen etwa 19 Sekunden nur für die Invertierung drauf.
0.01 21.36 73314/73314 EC_POINT_point2oct [5]
[4] 80.5 0.01 21.36 73314 ec_GFp_simple_point2oct [4]
0.00 21.24 53466/53466 EC_POINT_get_affine_coordinates_GFp [6]
0.01 21.23 43805/43805 EC_POINT_get_affine_coordinates_GFp [6]
[7] 80.1 0.01 21.23 43805 ec_GFp_simple_point_get_affine_coordinates [7]
0.69 18.84 73452/73461 BN_mod_inverse [8]
0.00 0.60 129806/706165 ec_GFp_mont_field_mul [15]
0.00 0.50 71787/71787 BN_mod_sqr [27]
0.01 0.42 76319/76319 BN_mod_mul [29]
0.00 0.15 56763/56765 ec_GFp_mont_field_decode [43]
Die andere Sache, die man sich mal anschauen könnte, wäre, was mit z passiert wenn im Code der öffentliche Schlüssel auf der Kurve verschoben wird. Das ist in dem Vanitygen tool der Regelfall:
/* Common case: next point */
EC_POINT_add(pgroup, ppnt, ppnt, pgen, bnctx);
Vielleicht lässt sich der neue Wert von z^-1 aus dem vorhergehenden Wert von z^-1 ableiten, ohne dass dabei eine erneute Invertierung notwendig wird.
Christian