Pages:
Author

Topic: Pollard's kangaroo ECDLP solver - page 23. (Read 60381 times)

member
Activity: 406
Merit: 47
January 03, 2022, 10:11:39 AM

Can possible do calculate kangaroo by do manual ?
puzzle120 I would like to try my range by do manual made kangaroo

tame and wild is public key (point) and do multiply to number right?
I will try do python script  generate tame and wide each one a million line of set
and compare it both by manual too
newbie
Activity: 9
Merit: 0
December 30, 2021, 04:38:17 AM
Hi all, i've started up a dedicated kangaroo box, and i was trying all different combinations, i was just wondering what would be a good random combination to just leave running for a year, i'm looking to strike it lucky, not looking to solve specific puzzles.

Throw some ideas at me.
jr. member
Activity: 82
Merit: 8
December 26, 2021, 11:09:16 AM
Hi,
One question regarding the performance of the algorithm.
It's stated that for puzzle #120, the :
Quote
Expected time: ~2 months on 256 Tesla V100.
This is really mind boggling  Shocked. But does someone know how long it took  (or a time approximation) to solve puzzle #115 using 4 Tesla V100 ?
To me it took (60/2^5)*(256/4)= 4 months, which is surely not reasonnable.

#110 about  2  days on 256 Tesla V100
#115 about 11 days on 256 Tesla V100

4 Tesla V100 ~~ should be 256/4=64
It takes 64 times ~~~
about 1 day (very lucky) ~ 704 days ( maybe it will take longer )



i need two point use div Point5 = div(Point1,Point2) #remove Scalar option
i need two point use mul Point6 = mul(Point1,Point2) # remove Scalar option
eny method Point1,Point2 use div and mul get therd point #mybadenglish
read my top 2 link modify please..
its posible remove scalar

Code:

python 3


Gx = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
PG = Point(Gx, Gy)
P1 = Point(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
P2 = Point(0xc6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5,0x1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a)
P3 = Point(0xf9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9,0x388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672)
P4 = Point(0xe493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13,0x51ed993ea0d455b75642e2098ea51448d967ae33bfbdfe40cfe97bdc47739922)


# Puzzle 63  $$$  1NpYjtLira16LfGbGwZJ5JbDPh3ai9bjf4
Puzzle_63  = Point(0x65ec2994b8cc0a20d40dd69edfe55ca32a54bcbbaa6b0ddcff36049301a54579, 0x5a1b76ab01e9edd0de24157ceff77bcb0f615560b250b365a5d435873eaa4625 )    

# Puzzle 120 $$$  17s2b9ksz5y7abUm92cHwG8jEPCzK3dLnT
Puzzle_120 = Point(0xceb6cbbcdbdf5ef7150682150f4ce2c6f4807b349827dcdbdd1f2efa885a2630, 0x2b195386bea3f5f002dc033b92cfc2c9e71b586302b09cfe535e1ff290b1b5ac )

# Puzzle 115  $$$
Puzzle_115 = mulk( 0x60F4D11574F5DEEE49961D9609AC6, P1 )
print ("[#115]  %064x  %064x" % (Puzzle_115.x,Puzzle_115.y) )

P_add = add( P1 , P2 )
print ("[add ]  %064x  %064x" % (P_add.x,P_add.y) )

P_sub = sub( P3 , P1 )
print ("[sub ]  %064x  %064x" % (P_sub.x,P_sub.y) )

P_mul2 = mul2( P1 )
print ("[mul2]  %064x  %064x" % (P_mul2.x,P_mul2.y) )

P_mulk = mulk( 0x3, P1 )
print ("[mulk]  %064x  %064x" % (P_mulk.x,P_mulk.y) )

# 0x4 / 0x2 = 0x2
P_div = div( P4 , 0x2 )
print ("[div ]  %064x  %064x" % (P_div.x,P_div.y) )

# 0x4 / 0x4 = 0x1
P_div = div( P4 , 0x4 )
print ("[div ]  %064x  %064x" % (P_div.x,P_div.y) )

# 0x7CCE5EFDACCF6808 / 0x3E672F7ED667B404 = 0x2
P_div = div( Puzzle_63 , 0x3E672F7ED667B404 )
print ("[div ]  %064x  %064x" % (P_div.x,P_div.y) )

===========output============
[#115]  48d313b0398d4923cdca73b8cfa6532b91b96703902fc8b32fd438a3b7cd7f55  66f0742c24f5ff80c799d691d756ad8e5aa7f6d8f986abd9eeef45514637c0d4
[add ]  f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9  388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672
[sub ]  c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5  1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a
[mul2]  c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5  1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a
[mulk]  f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9  388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672
[div ]  c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5  1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a
[div ]  79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798  483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
[div ]  c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5  1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a


sr. member
Activity: 443
Merit: 350
December 26, 2021, 11:03:56 AM
https://github.com/ragestack/EC-Point-Operations/blob/master/EC_Math.py
https://bitcointalksearch.org/topic/m.58488513

-snip-
i need two point use div Point5 = div(Point1,Point2) #remove Scalar option
i need two point use mul Point6 = mul(Point1,Point2) # remove Scalar option
eny method Point1,Point2 use div and mul get therd point #mybadenglish
read my top 2 link modify please..
-snip-


Use the whole code from the post https://bitcointalksearch.org/topic/m.58488513

In order to add the division function, you can just use the same multiplication function with the inverse of the scalar.
However you can not divide one point by another point, You can divide only point by a scalar.
jr. member
Activity: 70
Merit: 1
December 26, 2021, 01:18:45 AM
https://github.com/ragestack/EC-Point-Operations/blob/master/EC_Math.py
https://bitcointalksearch.org/topic/m.58488513

Code:
Point1 = (x1,y1)
Point2 = (x2,y2)

Point3 = sub(Point1,Point2)
Point4 = add(Point1,Point2)
Point5 = div(Point1,2) # remove Scalar option, i need two point use div Point5 = div(Point1,Point2)
Point6 = mul(Point1,2) # remove Scalar option, i need two point use mul Point6 = mul(Point1,Point2)


i need two point use div Point5 = div(Point1,Point2) #remove Scalar option
i need two point use mul Point6 = mul(Point1,Point2) # remove Scalar option
eny method Point1,Point2 use div and mul get therd point #mybadenglish
read my top 2 link modify please..

its posible remove scalar
Code:
#modify please
def ECdiv(Qx,Qy,Scalar): # EC point division remove Scalar option
    A = (N-1)/Scalar
    Px,Py = ECmul(Qx,Qy,A)
    Py = P-Py
    return Px,Py
Dx,Dy = ECdiv(Cx,Cy,2)
print (Dx,Dy)
newbie
Activity: 25
Merit: 35
December 25, 2021, 07:43:28 PM
Hi,

One question regarding the performance of the algorithm.

It's stated that for puzzle #120, the :
Quote
Expected time: ~2 months on 256 Tesla V100.

This is really mind boggling  Shocked. But does someone know how long it took  (or a time approximation) to solve puzzle #115 using 4 Tesla V100 ?

To me it took (60/2^5)*(256/4)= 4 months, which is surely not reasonnable.



legendary
Activity: 1948
Merit: 2097
December 24, 2021, 07:48:51 AM
That's insane! Thank you for clarifying!
may i ask but, how is it possible to an same address to relate to another completely different public keys and private keys? how do they match to same address, if they're completely different?
Thanks again.


A: the set of 2^256 public keys
B: the set of 2^160 addresses (hashes of the public keys)

the hash function maps the set A into the set B

hash :  A -> B

when the # of keys > # of hashes, collisions are inevitable


source: https://en.wikipedia.org/wiki/Hash_function
jr. member
Activity: 37
Merit: 1
December 24, 2021, 06:51:38 AM
That's insane! Thank you for clarifying!
may i ask but, how is it possible to an same address to relate to another completely different public keys and private keys? how do they match to same address, if they're completely different?
Thanks again.
legendary
Activity: 1948
Merit: 2097
December 24, 2021, 06:34:47 AM
arulbero, i'm wondering, how does these 2^96 collisions happen? does the 2^96 addresses each address share all the same public key or how does 2^96 addresses can generate the same address?

The same address is related to 2^96 different public keys (and 2^96 different private keys)

An address is only the hash of a public key; different public keys (256 bit) have the same hash (160bit).
jr. member
Activity: 37
Merit: 1
December 24, 2021, 06:27:01 AM
arulbero, i'm wondering, how does these 2^96 collisions happen? does the 2^96 addresses each address share all the same public key or how does 2^96 addresses can generate the same address?
member
Activity: 111
Merit: 61
December 24, 2021, 06:18:27 AM
No, you have to check 2^(256-96) = 2^160 keys in average to find the private key to a specific address.
yeah, you're right here, I wrote it wrong.
legendary
Activity: 1948
Merit: 2097
December 24, 2021, 06:05:15 AM
If we talking about bruteforce like bitCrack, you have to check 2^97 keys in average to find specific address (not the specific public key)

No, you have to check 2^(256-96) = 2^160 keys in average to find the private key to a specific address.

Yes you are right, but one point i don't get it.
why would i scan 2^256 range? isn't it  scanning only 2^160 using for example BSGS to find any specific publickey with its private key? (since all publickeys and all private keys are in the range of 2^160.)

More or less. You don't know for sure that all addresses have a private key in range [1, ..., 2^160]
jr. member
Activity: 37
Merit: 1
December 24, 2021, 05:49:43 AM
Yes you are right, but one point i don't get it.
why would i scan 2^256 range? isn't it  scanning only 2^160 using for example BSGS to find any specific publickey with its private key? (since all publickeys and all private keys are in the range of 2^160.)
member
Activity: 111
Merit: 61
December 24, 2021, 05:37:04 AM
Ok, thank you so much, so let's say i want to bruteforce a specific publickey that has for example 1,000 bitcoins in it. so my questions are:
so does the publickey that i want to attack for example using Kangaroo exists only 1 TIME with its privatekey in the whole range of 2^160 is that right ?
so if i want to get that unique private key from its unique publickey, i need to bruteforce from 0 to 2^160 in order to get it, is that also correct?

Kangaroo works with specific public key only, not the address, so you have to check whole secp256k1 keyspace to find it - 2^256 (using symmetry and endomorphism this can be reduced to ~2^254)

If we talking about bruteforce like bitCrack, you have to check 2^97 keys in average to find specific address (not the specific public key)



jr. member
Activity: 37
Merit: 1
December 24, 2021, 04:55:07 AM
Ok, thank you so much, so let's say i want to bruteforce a specific publickey that has for example 1,000 bitcoins in it. so my questions are:
so does the publickey that i want to attack for example using Kangaroo exists only 1 TIME with its privatekey in the whole range of 2^160 is that right ?
so if i want to get that unique private key from its unique publickey, i need to bruteforce from 0 to 2^160 in order to get it, is that also correct?
member
Activity: 111
Merit: 61
December 24, 2021, 04:48:36 AM
guys dumb question, there are 2^256 private and public keys and total of 2^160 addresses, so 2^256/2^160 = 2^96 keys per address. but how can be 2^96 keys that connect to same address? so what changes then? does public key stay the same and only private key changes, or does both changes with 2^96 address each one..?
Every private key has it own unique public key, but hashing of different public keys may produce same hashes (addresses). Thus, in average, 2^96 different public/private keys have the same address.
jr. member
Activity: 37
Merit: 1
December 24, 2021, 04:31:39 AM
guys dumb question, there are 2^256 private and public keys and total of 2^160 addresses, so 2^256/2^160 = 2^96 keys per address. but how can be 2^96 keys that connect to same address? so what changes then? does public key stay the same and only private key changes, or does both changes with 2^96 address each one..?
jr. member
Activity: 70
Merit: 1
December 21, 2021, 01:10:06 AM

iknow r s1s2  value
i need z1z2 how to calculate
i read this post explain testnet ,i am not understad https://bitcointalksearch.org/topic/m.56686056
https://bitcointalksearch.org/topic/m.10669517 #read 1,3page

please explain stepy by step calulate z1z2  from bitcoin mainet or write code #mybadenglish

run this script https://github.com/FoxxD3V/btc-rsz/blob/master/RawTX_RSZ.py
output : show r s1s2 z1,z2
but i got error what my mistake

https://tbtc.bitaps.com/raw/transaction/ff948290ff332aed8f0e5d767118a02e8671578c6775a333bb4ee4d6ccfcf639
i am enter raw tx i got error https://github.com/FoxxD3V/btc-rsz/blob/master/RawTX_RSZ.py
Code:
Traceback (most recent call last):
File "RawTX_RSZ.py", line 13, in
s = keyUtils.derSigToHexSig(m[1][:-2])
File "/home/runner/btc-rsz/keyUtils.py", line 32, in derSigToHexSig
x, s = ecdsa.der.remove_integer(s)
File "/usr/local/lib/python2.7/dist-packages/ecdsa/der.py", line 218, in remove_integer
raise UnexpectedDER("Negative integers are not supported")
ecdsa.der.UnexpectedDER: Negative integers are not supported
i know r s1s2
i need z1z2 value please how to get z1z2 #mybadenglish
sr. member
Activity: 443
Merit: 350
December 20, 2021, 06:06:05 PM
MrFreeDragon,
where to substitute your values in this script? I write:
python script.py
the issue is empty.
Python 3.10.1, gmpy2 2.1.1.

Try the command:

Code:
python3 -i script.py

So you will enter the python console with the loaded script functions. You will be able to run commands like these:
Code:
>>> Point1 = Point(0xf9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9, 0x388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672)
>>> Point2 = Point(0xc6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5, 0x1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a)
>>> Point3 = sub(Point1,Point2)
>>> hex(Point3.x),hex(Point3.y)
('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8')
legendary
Activity: 1512
Merit: 7340
Farewell, Leo
December 15, 2021, 04:56:38 PM
Somebody could explain which variable means what?
Yes. In elliptic curves, when you want to find the public key given a certain private key, you construct two algorithms. Addition and doubling. The image you've inserted shows the addition of two points (P + Q) whose result can be seen by drawing a straight line in P and Q; the inverse of that point is R. Your image is a graphical representation of point addition.

In doubling, you draw a tangent line in P and where it'll intersect with the curve, its inverse will be 2P.


i know tow point add,multiple in python code, but subtracter not understand
Isn't subtraction just like addition? Instead of P + Q, you do P + (-Q). The only extra step is to get -Q. This may satisfy you: How to subtract two points on an elliptic curve?
Pages:
Jump to: