Bitcoin Forum
May 26, 2024, 08:30:45 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 ... 96 »
461  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 10:51:13 PM
What is the advantage of these 3 intervals? Actually they are all the same, just copies. The have the same scalar range, but different 3 types of points in every range. Also in order to implement it you need generate and store 3 tables of jumps (G, G' and G''). But what is the advantage of that 3 point ranges?

It looks the same if you put 3 times more angaroos at the same range (with G), but for this method you need less jump tables (only one jump table)

Good point, effectively they are just copies.  Roll Eyes
462  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 09:52:24 PM
If you cube the x coordinate you will extinguish the group of the endomorphism-- all six keys P, lambda*P, lambda^2*P, -P, lambda*-P, and lambda^2*-P all share the same x^3 coordinate, so if the x^3 was used to select the next position, they'd all collapse to the same chain.

Great idea!

But for our problem it is not suitable, we have to maximize the chance to get a collision inside an interval.
In a small interval [a*G, ..., b*G] (80 bit) probably you won't find 2 points with the same x or the same y, we don't work in the entire space.

We tried to move [a*G, ..., b*G] to [-(b-a)/2*G, +(b-a)/2*G]  because it is precisely the way to have all points with the opposite in the same subgroup. Then for each 'x' we have 2 points for sure.


The endomorphism might be less interesting though, because the cases you are selecting the DL is known to lie in a 'small' range from a specific base point, and the two endomorphism generated points do not.

If you work in 3 spaces of points and you change the generator and the jumps accordingly:

           point                                scalar                                                                             jumps
[a*G,   (a+1)*G, ....,  b*G]     <-> [a,b]   interval 1                                         (1*G, 2*G, 4*G,...., 2^(n-1)*G)
[a*G',  (a+1)*G', ....,  b*G']    <-> [a,b]   interval 2  where G'=lambda*G      (1*G', 2*G', 4*G',...., 2^(n-1)*G')
[a*G'', (a+1)*G'', ...., b*G'']   <-> [a,b]   interval 3  where G''=lambda*G    (1*G'', 2*G'', 4*G'',...., 2^(n-1)*G'')

you will have three intervals of consecutive points. In this way any movement in the interval 1 has its own "copy" in the other 2 intervals.
463  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 08:52:11 PM
But with both signs (+-) or not?

Could you try with an average of 2^21 - 2^22 instead?
u try with an average of 2^21 - 2^22 instead?

Yes at the beginning I used the y sign to select positive or negative jump then I tried an otehr set of random negative jumps without success.
It seems that this "bownian motion" is rather tricky to tune.

Tomorrow, I'll try other things...


Only negative jumps? I would try with positive/negative jumps and a greater average (my sensation)
To me it looks promising. 1.50sqrt(N) would be amazing!
Another thing to pay attention to is: when we translate our interval, we have only 2^(n-1) x-coordinates, and then half DP. For the tuning it's like we worked in a 2^(n-1) space.


I was thinking another thing,
if you want to overcome/avoid the brownian-motion tuning problem,

go back and put together

1) the linearity (and therefore the simplicity) of the classic approach (that you used in the release 1.3)
2) the power of the symmetry

Exploiting the symmetry means that we use equivalence classes to increase the probability of a collision (same number of tries, half 'points'); in our case, given a point P(x,y), 'x' decides the width of the jump and 'y' only the direction.
In the secp256k1 there are 2 points that share the same 'x', (x,y) and (x,-y).

In a interval of consecutive points, all x-coordinates are different, but if we move the interval like we did it becomes symmetric.

The drawback of our approach is that the kangaroo, instead of going in only one direction, keep going back and forth, creating many loops. Besides, not only we don't know where a wild kangaroo is (obviously we don't know its position-private key), but we don't control even the direction of its motion (and often it comes out from the interval)


But this curve has another symmetry that respects the linearity (unlike the negative map that overturns the interval and the kangaroo algorithm): endomorphism.

There are 3 points with the same 'y' , that means that this curve has about 2^256 points and
 
1) 2^256 / 2 different x-coordinates
2) 2^256 / 3 different y-coordinates

Why don't we use the symmetry that mantains the linearity of the interval?

We can work on the y-coordinates, and a jump should be depend on 'y' and not on 'x'.
We set equivalence classes where [P] = {P, Q, R} if and only if  yP = yQ = yR

What is the relation between the private key of these points P, Q, R?

If P=k*G, then Q=k*lambda*G and R =k*lambda^2*G (endomorphism)
and P=(x,y) -> Q=(beta*x, y) -> R=(beta^2*x,y)

observation:

if P=k*G, i.e. k is the private key of P respect of the generator G, then
lambda*P = k*lambda*G, i.e. the private key of P'=lambda*P respect of the generator G'=lambda*G is always k.

In other words, if we know that k lies in [a,b], resolving the problem P=k*G is equivalent to resolve the problem P'=k*G'
The interval is the same (from the scalar's point of view) but there are actually 3 different intervals of points. They are all consecutive from a different generator's point of view:

           point                                scalar
[a*G,   (a+1)*G, ....,  b*G]     <-> [a,b]   interval 1
[a*G',  (a+1)*G', ....,  b*G']    <-> [a,b]   interval 2  where G'=lambda*G
[a*G'', (a+1)*G'', ...., b*G'']   <-> [a,b]   interval 3  where G''=lambda*G

We could work on  3 "spaces" simultaneously :

P=k*G, with all points with generator G   -> interval 1     jumps (1*G, 2*G, ,,,2^(n-1)*G)

P'=k*G' with all points with generator G' -> interval 2     jumps(lambda*G, lambda*2*G, .... lambda*2^(n-1)*G)

P''=k*G'' with all points with generator G'' -> interval 3  jumps(lambda^2*G, lambda^2*2*G, .... lambda^2*2^(n-1)*G)

if the movements of a kangaroo depends only by the y-coordinates, that means that if a kangaroo reach a point T in the first interval and another kangaroo reachs a point W in the second interval with the same y, we will have a collision!
From that point they will walk together along the same path (across the same equivalence classes) until they reach a DP (in this case a y-coordinate with some zero bits), we detect this collision.

EDIT:
We work in this way in a space of 3*2^n points (3 intervals), but with only 2^n y-coordinates, then we should have a collision with a higher probability.  WRONG
464  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 08:06:41 PM
-snip-
We do have fast inversions. Inversion in additive group means: -P, and -P is pratically for free.
-snip-

For the whole group with range [0, order] yes it is free to make -P from P. But for the subgroup within a pecified range you need to make scalar operations.

If you shift the range [a,b] -> [-(b-a)/2, (b-a)/2], each point P in this interval has the property that -P is in interval too. No other operations are needed.
465  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 06:24:58 PM
-snip-
I think there's a paper about this already:
https://www.iacr.org/archive/pkc2010/60560372/60560372.pdf

You probably need to detect frutiless cycles with this method (stuck kangaroos in a loop without distinguished points).

Thank for this reading.
In abstract it was noted that the method "to solve the DLP in an interval of size N with heuristic average case expected running time of close to 1.36√N group operations for groups with fast inversion".

We do not have fast inversions. They also showed in practice that the total number of operations was not 1.36sqrt(N), but 1.46-1.49sqrt(N).

We do have fast inversions. Inversion in additive group means: -P, and -P is pratically for free.

Quote
we  show  how  to  speed  up  the  Gaudry-Schost  method in  groups  with  fast  inversion  (such  as  elliptic  curve ... )
Here fast inversion means that computing u^−1 for any u in the group is much faster  than  a  general  group  operation.

466  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 04:08:11 PM
Not in this release, I use a random set of jump [32 jumps] with an average of 2^20.

But with both signs (+-) or not?

Could you try with an average of 2^21 - 2^22 instead?
467  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 03:53:14 PM
Yes From time to time it fails and go out the range. The number of dead kangaroo (collision in same herd) increase.
The idea of replaying walk is good, I do like this in my BTCCollider.

Your jumps are: +-G, +-2*G, ...., +-2^19*G ?
468  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 03:19:41 PM
But, they are not very clear on the jumps and especially the average distance of the jumps.
As the wild are on a shorter range, may be steps have to be different than tame's one (not yet tested).
I also didn't coded a stop and retry after a certain number of jump (sqrt(n) ?), i let the algorithm continue outside the range, so it may loose the symmetry...

You cannot loose the symmetry.

Are you sure that the algorithm goes outside the range so often? I don't think so, with this kind of jump (back and forth), I would use longer jumps, because you in sqrt(n) steps shouldn't go outside of the interval (on average) like the classic version.

I suppose the main problem is the loops (a single kangaroo with itself)


469  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 06:34:15 AM
OK i will try this.
But if you don't have a translation of -(k2-k1)/2 on the wilds (or (k2-k1)/2 on the tames), you get a worst case when the private key of P is at the end of the range.


I think there's a paper about this already:
https://www.iacr.org/archive/pkc2010/60560372/60560372.pdf

You probably need to detect frutiless cycles with this method (stuck kangaroos in a loop without distinguished points).


Many thanks!!!  I didn't know it !

EDIT:

from the article:

Quote
Average number of group operations performed by our algorithm: 1.46 * sqrt(2^n)

The cost of searching the list of previous group elements is not included in our experimental results, but our count of group operations does include the “wasted” steps from being in a cycle.
470  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 06:26:01 AM
OK i will try this.
But if you don't have a translation of -(k2-k1)/2 on the wilds (or (k2-k1)/2 on the tames), you get a worst case when the private key of P is at the end of the range.


Now:

tamei = rand(0..(k2-k1)) # Scalar operation
wildi = rand(0..(k2-k1)) - (k2-k1)/2 # Scalar operation
wildPosi = P + wildi.G # Group operation


My proposal (assuming that private key of P is for sure in [-(k2-k1)/2, (k2-k1)/2])

tamei = rand(0,..(k2-k1)/2) # Scalar operation (you can avoid negative numbers for tame)
wildi = rand(-(k2-k1)/4,...(k2-k1)/4) # Scalar operation
wildPosi = P + wildi.G # Group operation
471  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 01, 2020, 05:47:01 AM
It is enough to modify slightly the way we generate the next jump:

+ jP[tamePosi.x % n]*G if y > p/2,  - jP[tamePosi.x % n]*G is y <p/2

(then I will indicate 'y' if y > p/2, '-y' if y < p/2)


in this way when a tame T reaches a point Q = (x,y) and a wild W reaches a point Q' = -Q = (x,-y), this become a collision

The tame and the wild will go on with 2 specular paths:

Q -> Q + k*G -> Q + k*G -r*G ->  ... -> DP
(x,y)    (x1,-y1)          (x2,y2)              (x0, y0)

-Q -> -Q -k*G -> -Q - k*G +r*G -> ... -> DP
(x,-y)  (x1,y1)         (x2, -y2)              (x0, -y0)

until they reach 2 symetric DP, for both of which we know the private key.


May be a brownian motion can be interesting (having positive and negative jump).

I have created a sort of "brownian motion", my kangaroos keep jumping back and forth.


I'm not sure to fully understand your idea.
You want to add a condition on the y parity to determine the jump ?
You let the starting positions as they are or you translate them ?



The start interval must be: [-(b-a)/2, +(b-a)/2]

and yes, I want to add a condition on the y parity to determine the jump's direction.

In this way a wild and a tame collide if they reach:

1) the same point
2) two symetric points

In the interval [-(b-a)/2, +(b-a)/2], the x-coordinates of [1, +(b-a)/2] are equal to the x-coordinates of [-(b-a)/2, -1]; we should get more collisions, because we work in a space of 2^(n-1) points instead of 2^n.

We introduce a equivalence class [P], where P ~ Q if Q = -P and the jump function goes from [P] to [P1], i.e. it is defined between 2 equivalence classes instead of between 2 points.


A problem could be that many paths could enter in a loop before they reach a DP, because each kangaroo jumps back and forth and then a single kangaroo can collide with itself.
472  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 30, 2020, 07:50:08 PM
Another idea:
do you use the symetrie?
If you shift the range from [a,b] to [-(b-a)/2, (b-a)/2] and you generate tame in this range, for each point you create actually a couple of opposite points in the same interval (same x), in this way you probably should have more collisions.

The tame points starting from the negative part of the interval create a couple of points that move towards the center of the interval, while the tame points starting from the positive part create a couple of points that move towards the extreme of the interval. In this way, each tame walks across the double of the points in the interval (with the same computational cost). Same for the wild ones.

In other words a tame kangaroo and a wild kangaroo collide if they fall in the same position or if they fall in 2 different positions but symetric respect of the center of the interval.

In other words : an interval of this type has only 2**(n-1) different x coordinates.

I am not following the logic here. What is missing is, how will the paths converge after both the tame and the wild reach the same x-coordinate, assuming that it is the symmetry point?

Good point!


It is enough to modify slightly the way we generate the next jump:

+ jP[tamePosi.x % n]*G if y > p/2,  - jP[tamePosi.x % n]*G is y <p/2

(then I will indicate 'y' if y > p/2, '-y' if y < p/2)


in this way when a tame T reaches a point Q = (x,y) and a wild W reaches a point Q' = -Q = (x,-y), this become a collision

The tame and the wild will go on with 2 specular paths:

Q -> Q + k*G -> Q + k*G -r*G ->  ... -> DP
(x,y)    (x1,-y1)          (x2,y2)              (x0, y0)

-Q -> -Q -k*G -> -Q - k*G +r*G -> ... -> DP
(x,-y)  (x1,y1)         (x2, -y2)              (x0, -y0)

until they reach 2 symetric DP, for both of which we know the private key.


May be a brownian motion can be interesting (having positive and negative jump).

I have created a sort of "brownian motion", my kangaroos keep jumping back and forth.
473  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 30, 2020, 04:46:36 PM
Another idea:
do you use the symetrie?
If you shift the range from [a,b] to [-(b-a)/2, (b-a)/2] and you generate tame in this range, for each point you create actually a couple of opposite points in the same interval (same x), in this way you probably should have more collisions.

The tame points starting from the negative part of the interval create a couple of points that move towards the center of the interval, while the tame points starting from the positive part create a couple of points that move towards the extreme of the interval. In this way, each tame walks across the double of the points in the interval (with the same computational cost). Same for the wild ones.

Yes i have to investigate, I already tested several things without improving things.
Translating tame is like translating wild in the opposite direction.

No. I meant: translate tame and wild. Not only tame. In a interval with 2^n points but only 2^(n-1) coordinates 'x' (instead of 2^n) to increase the probability to have a collision. If you do the same number of steps in a half space (from coordinates x point of view), the chance should be higher. Half number of x coordinates, half DP, same number of steps, more chance.

Like I said before, a tame kangaroo and a wild kangaroo in this scenario collide not only if they fall in the same position but if they fall in 2 different positions (but symetric respect of the center of the interval) as well.

If you instead translate this interval in any other position of the curve, when a tame kangaroo and a wild kangaroo fall in 2 positions symetric respect of the center of the interval, your current algorithm doesn't detect a collision, simply because it can't know (without more computation) the x coordinate of the symetric point (respect of (a+b)/2 * G) of any DP that lies in the hashtable (and a symetric point of a DP generally is not a DP)

May be a brownian motion can be interesting (having positive and negative jump).

My idea goes a little in that direction too, cause the jumps are always positive but the points generated go in both direction, exploiting the symetrie of the curve.

Example:

when a sequence starts from -k*G (negative part):

-k*G, (-k + 2^17)*G, (-k +2^17 + 2^3)*G, ....  forth -->

but in this way you have too (for free) the x coordinates of :

+k*G, (+k - 2^17)*G, (+k- 2^17 - 2^3)*G, ....       <-- back

the movement is like this:

             zero point
(-->                            <--)         extreme:  -k*G, k*G
   (-->                    <--)              extreme:   (-k+2^17)*G,  -(-k+2^17)*G
          (-->   <--)                        extreme:   (-k+2^17+2^3)*G,  -(-k+2^17+2^3)*G



when a sequence starts/arrives in the positive part:

k*G, (k + 2^8)*G, (k +2^8 + 2^31)*G, ....  forth -->
-k*G, (-k - 2^8)*G, (-k -2^8 - 2^31)*G, ....   <-- back

                zero point
           <-- (        )-->                        extreme:  -k*G, k*G
       <--(                  )-->                   extreme:   -(k+2^8)*G,  (k+2^8)*G
  <--(                            )-->              extreme:   -(k+2^8+2^31)*G,  (k+2^8+2^31)*G

474  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 30, 2020, 04:08:59 PM
Another idea:
do you use the symetrie?
If you shift the range from [a,b] to [-(b-a)/2, (b-a)/2] and you generate tame in this range, for each point you create actually a couple of opposite points in the same interval (same x), in this way you probably should have more collisions.

The tame points starting from the negative part of the interval create a couple of points that move towards the center of the interval, while the tame points starting from the positive part create a couple of points that move towards the extreme of the interval. In this way, each tame walks across the double of the points in the interval (with the same computational cost). Same for the wild ones.

In other words a tame kangaroo and a wild kangaroo collide if they fall in the same position or if they fall in 2 different positions but symetric respect of the center of the interval.

In other words : an interval of this type has only 2**(n-1) different x coordinates.
475  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 30, 2020, 12:16:22 PM
Yes the random walk with kangaroo is particular as the path cannot be truncated easily modulo n (n=range size). So the kangaroos can go outside of the range. This is not a problem as the 2 herds travel at the same average speed. The jumpDistane table has an average of sqrt(n) so after sqrt(n) jumps the kangaroos reach the end of the range.

Ok.

I think that it would be faster if you used a hashtable with precomputed distinguished points (the tame points).

The speed should double.
476  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 29, 2020, 08:02:09 PM
-snip-
But can you treat these points like if they were random? Can you apply in this case the birthday paradox?

The DP method (distinguished points) with a hashtable is used. That means that every subsequent jump is dependent from the x-coordinate of the current location. That means that pseudorandom walks are used for the kangaroos. No need to store all the visited points for this case.

Yes, this is clear, but these points seem to me not to be really (pseudo)random. There is a order. You can move only forward (from private key's point of view). Therefor many collisions are just impossible to get (instead in the birthday paradox, each new distinguished point has the chance to produce a collision with any previous distinguished point, for example that happens in BTCCollider, because in that case you can jump in any position, you go back and forth across the entire space)

Example with only 2 sequences:

If we suppose that W_100 is = (2^37)*G and T_100 is (2^38)*G, than between T_101, T_102, .... , T_2**32 it is no longer possible to find a single distinguished point with the same coordinate of any distinguished point that lies in W_0, W_1, W_2, ....., W_100. For sure.

Then how do you apply in this case birthday paradox?

It is impossible to get a collision in the path of the same tame kangaroo too, because the same kangaroo cannot turn back, then this is a pseudorandom sequence very particular ...
477  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 29, 2020, 06:59:34 PM
I did a test, wanting to know the average time of the birthday paradox when searching collision between 2 tables (like the kangaroo problem).

The kangaroo method is announced to be 2.sqrt(n) but this is for a simple 2 stages algorithm where:
 - you first travel a single tame kangaroo sqrt(n) steps to setup a trap
 - then you make steps with the wild until a collision occurs (it falls in the trap), this second stage is expected to end in sqrt(n) steps.
The factor 2 comes from that. There no need of a hashtable there.

Hi,

let's see if I have understood this Kangaroo algorithm:

P=k*G, you know P and you know that a < k < b, for semplicity :  0 < k < a, for example: 0 < k < 2^64 (starting interval)

you generate many sequence of 2 type of points:

1) tame: each sequence starts from a random point T0 that lies in the starting interval, then

T0, T1, T2, ….     the difference between 2 consecutive points is: G, or 2*G, or 4*G, or 8*G, …, or 2^32*G

2) wild: each sequence starts from P + r*G, where r*G is a random point with a random r private key between 0 < k < 2^31), then:

W0, W1, W2, ….. the difference between 2 consecutive points is: G, or 2*G, or 4*G, …, or 2^32*G

each jump towards the next point depends on the x coordinate (mod 33) of the current point; in this way if a tame kangaroo reach a points already reached from a wild kangaroo (or viceversa), you have a collision and then same path from there.  

In that case T = W ->  t*G = w*G ->  t*G = P + w*G  ->  t*G = k*G + w*G -> k = (t-w) mod n

Besides you use distinguished points to detect this collision.


In this example you generate about 2^32 points  (T points) in the interval [1*G, (2^64+(2^32)(2^32))*G]
and about 2^32 points (W points) in the interval [P+r*G, ((k+r)+(2^32*2^32))*G]

let's say that both type of points have for sure their private keys in [1, 2^65] interval

But can you treat these points like if they were random? Can you apply in this case the birthday paradox?
478  Local / Italiano (Italian) / Re: BITCOIN PUMP! on: April 27, 2020, 10:48:12 PM
Nuovo modello di PlanB per la previsione del prezzo di btc:

https://medium.com/@100trillionUSD/bitcoin-stock-to-flow-cross-asset-model-50d260feed12
479  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 27, 2020, 08:57:41 PM

warning: #warning "GCC lass than 7.3 detected, upgrade gcc to get best perfromance" [-Wcpp]
   #warning "GCC lass than 7.3 detected, upgrade gcc to get best perfromance"


Yes, do you remenber this ?
We have fighting with a f.ck.ng bug when you have implemented the ModSqr function, i had to add a volatile to prevent gcc to perform optimization !
This volatile is not necessary for gcc > 7.3

Ok, I tried with "unsigned char c" (I removed the check):

from
2**(33.42) keys / (13*60+44)s = 13.947.463 = 14 MKeys/s  your program with volatile

to
2**(32.18) keys / (4*60+12.0)s = 19.308.330 = 19,3 MKeys/s with unsigned char

and the bug is still there, with unsigned char I get this error:

./kangaroo -d 8 input
Kangaroo v1.3
ParsePublicKeyHex: Error invalid public key specified (Not lie on elliptic curve)
input, error line 2: 0459A3BFDAD718C9D3FAC7C187F1139F0815AC5D923910D516E186AFDA28B221DC994327554CED8 87AAE5D211A2407CDD025CFC3779ECB9C9D7F2F1A1DDF3E9FF8
Start:49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5E0000000000000000
Stop :49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5EFFFFFFFFFFFFFFFF

it's weird that the program doesn't stop, I think it should terminate in this case.
480  Bitcoin / Development & Technical Discussion / Re: brute-forcing public keys at amazing speed 2.2 PH/s on CPU [malware warning] on: April 27, 2020, 08:09:46 PM
I presume the main differences between your ModMul function (if it is still the same you give me) and mine are in:
imm_umul() where I use intrinsic functions and where you have used inline assembly.
On windows it is not possible to do inline assembly, gcc support intrinsic functions so it should generate a good code.
I really don't want to fight with inline assembly on Linux and this horrible AT&T syntax, i did few ones where no intrinsic exists, this was a nightmare...


Yes, you're right.
Besides when I compile I get this message:

warning: #warning "GCC lass than 7.3 detected, upgrade gcc to get best perfromance" [-Wcpp]
   #warning "GCC lass than 7.3 detected, upgrade gcc to get best perfromance"

Maybe with a new version of gcc the performance of your function would be better on my system.



I replaced ModSquareK1(Int *a) too:

./kangaroo -d 8 input
Kangaroo v1.3
Start:49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5E0000000000000000
Stop :49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5EFFFFFFFFFFFFFFFF
Keys :1
Number of CPU thread: 8
Range width: 2^64
Number of random walk: 2^13.00 (Max DP=17)
DP size: 8 [0xff00000000000000]
SolveKeyCPU Thread 0: 1024 kangaroos
SolveKeyCPU Thread 2: 1024 kangaroos
SolveKeyCPU Thread 3: 1024 kangaroos
SolveKeyCPU Thread 1: 1024 kangaroos
SolveKeyCPU Thread 7: 1024 kangaroos
SolveKeyCPU Thread 4: 1024 kangaroos
SolveKeyCPU Thread 6: 1024 kangaroos
SolveKeyCPU Thread 5: 1024 kangaroos
[24.33 MKey/s][GPU 0.00 MKey/s][Count 2^33.42][Dead 2][08:56][3440.8MB]  
Key# 0 Pub:  0x0259A3BFDAD718C9D3FAC7C187F1139F0815AC5D923910D516E186AFDA28B221DC
       Priv: 0x49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5EBB3EF3883C1866D4

Done: Total time 09:15


from 16 to 24 MKeys/s, +50% ...




EDIT:

2**(33.42) keys / (13*60+44)s = 13.947.463 = 14 MKeys/s  your program

2**(32.47) keys / (5*60+26)s = 18.248.465 = 18,2 MKeys/s  ModMul replaced

2**(33.42) keys / (9*60+15)s = 20707585 = 20,7 MKeys/s  ModMul+ModSqr replaced

2**(33.24) keys / (7*60+58)s = 21223116 = 21,2 MKeys/s  ModMul+ModSqr+ModSub replaced


from 14 to 21,2 MKeys/s: +50%

Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 ... 96 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!