Pages:
Author

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

legendary
Activity: 1932
Merit: 2077
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: 1932
Merit: 2077
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: 110
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: 1932
Merit: 2077
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: 110
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: 110
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?
member
Activity: 174
Merit: 12
December 15, 2021, 03:16: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.
jr. member
Activity: 70
Merit: 1
November 26, 2021, 08:26:15 AM
Code:
>>> Point1 = Point(0xf9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9, 0x388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672)
>>> Point2 = Point(0xc6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5, 0x1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a)
>>> Point3 = sub(Point1,Point2)
>>> hex(Point3.x),hex(Point3.y)
('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8')

how to to point verify in python

example1:
        if Point1 == Point2:
             pass value
             #break or contine
example2:
        for Point1 =! Point2:
              pass vaue
              #break or contine
example3:
         while loop, or def function
my question how to same time x,y value check (==,=!,!=,etc....)form example 1,2,3

Code:
                      Point1.x                                                                       Point1.y
Point1 = ('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8')
Point2 = ('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '0xb7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777')
                       Point2.x                                                                        Point2.y

i know  :)
if Point1.x==Point2.x:
      pass value #go to some example step execute
      .......
       ......
else:
      .............
      ......

           
i know if Point1.x==Point2.x:
but :(same time x,y value how to cheak Point1.x.y==Point2.x.y
please some examle write here... Smiley

#mybadenglish
jr. member
Activity: 70
Merit: 1
November 24, 2021, 10:20:38 PM
guys any update small range big range write here....
jr. member
Activity: 82
Merit: 8
November 21, 2021, 12:05:02 AM
my question how to guess random public key
 even small range or big range
odd small range  or big range
thankyou your code near to my crack method:)
i am find some btc i will donate you in future Smiley        #i am not devolper but other people code change to finder # little bit speak and write englsh

NO ~~~
There is no way to know (private key is even/odd  )  from public key
There is no way to know (private key is small/big range what?? )  from public key

small range is  < 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0
big range is > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A1
Huh

if  A, B private key have same X value of public key
A + B = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

if you can know 1 private key (public key: 03ceb6cbbcdbdf5ef7150682150f4ce2c6f4807b349827dcdbdd1f2efa885a2630 )
#120 will solve right now  (public key:  02ceb6cbbcdbdf5ef7150682150f4ce2c6f4807b349827dcdbdd1f2efa885a2630 )

https://bitcointalksearch.org/topic/half-of-any-bitcoin-crypto-public-key-public-key-half-4455904

https://bitcointalksearch.org/topic/point-addition-point-concatenate-5332526

sr. member
Activity: 443
Merit: 350
November 20, 2021, 09:05:09 PM
mausuv, I made a post and found some gramma mistakes in my words. Not at the code, but in my message here. So I edited the post and made a remark that the edit was related to typo mistakes and not to the change of the content.

The code works 100%
jr. member
Activity: 70
Merit: 1
November 20, 2021, 08:35:36 PM
                       

If you do not have gmpy2 I recommend to install it (it is 50x faster than self implemented inverse), but you can just uncomment c calculation in mul2 and add functions and comment the formula with gmpy2.

EDIT: corrected typo mistakes

your code work fine but  what corrected typo mistakes explain
And youcan improve even or odd python Smiley
 ./keymath 03d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a  - 02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5
Result: 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

one last question your python code 100% tested own  Point3 = sub(Point1,Point2) work without error ??   #sorry my grammer mistake

because i am test some point, work  100% correct answer print Wink
Pages:
Jump to: