CryptoSh1va
Jr. Member
Offline
Activity: 33
Merit: 7
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 09:15:12 AM |
|
Also dont forget: The Problem we have is, that we don't know if the last bit is even or odd. If you know if the last bit is even or odd, you can crack any public key in no time.
How does this affect? Please explain in more detail..
|
|
|
|
studyroom1
Jr. Member
Offline
Activity: 40
Merit: 7
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 09:19:05 AM |
|
Also dont forget: The Problem we have is, that we don't know if the last bit is even or odd. If you know if the last bit is even or odd, you can crack any public key in no time.
How does this affect? Please explain in more detail.. maybe SSXB can explain this
|
|
|
|
a.a
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 126
Merit: 36
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 09:32:18 AM |
|
Also dont forget: The Problem we have is, that we don't know if the last bit is even or odd. If you know if the last bit is even or odd, you can crack any public key in no time.
How does this affect? Please explain in more detail.. You can always shift down a public key, aka halving a public key. You get two new public keys. But one is really halving and the other one is moving to the key middle range. E.g. You have the public key of 4 (binary represantation is 100). You halve it, and get the public key of 2 (10) and the public key of midrange - 2. You have the public key of 5 (binary representation is 101). You halve it, and get the public key of public key of midrange - 2 or 3 and 2 (binary 10). As you dont know the lowest bit, you can not determine which one of the pubkeys is the one you need. So you you have to take both and check them for the correct result.
|
|
|
|
a.a
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 126
Merit: 36
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 09:43:45 AM |
|
from fastecdsa import curve from fastecdsa.point import Point import bit
G = curve.secp256k1.G N = curve.secp256k1.q
def pub2point(pub_hex): x = int(pub_hex[2:66], 16) if len(pub_hex) < 70: y = bit.format.x_to_y(x, int(pub_hex[:2], 16) % 2) else: y = int(pub_hex[66:], 16) return Point(x, y, curve=curve.secp256k1)
# This function makes all the downscaled pubkeys obtained from subtracting # numbers between 0 and divisor, before dividing the pubkeys by divisor. def shiftdown(pubkey, divisor, file, convert=True): Q = pub2point(pubkey) if convert else pubkey # k = 1/divisor k = pow(divisor, N - 2, N) for i in range(divisor): P = Q - (i * G) P = k * P if (P.y % 2 == 0): prefix = "02" else: prefix = "03" hx = hex(P.x)[2:].zfill(64) hy = hex(P.y)[2:].zfill(64) file.write(prefix+ " " + hx+"\n") # Writes compressed key to file file.write("\n") # Writes compressed key to file
with open("input.txt", "r") as f, open("output.txt", "w") as outf: line = f.readline().strip() while line != '': outf.write("original: " +line + "\n") shiftdown(line, pow(2,1), outf) line = f.readline().strip() input: 02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13 022f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4 ..d13 is 4 and ...fe4 is 5 output: original: 02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13 02 c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5 02 c62c910e502cb615a27c58512b6cc2c94f5742f76cb3d12ec993400a3695d413
original: 022f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4 03 5699b93fc6e1bd29e09a328d657a607b4155b61a6b5fcbedd7c12df7c67df8f5 02 c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5
02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5 is 2 Because i know 4 is even, i know it has to be the first pubkey. Because i know 5 is odd, I know it has to be the second key. The problem is, that in bigger numbers, you can not determine if it is odd or even. See,if I add the pubkey of 3 original: 02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 -> pubkey of 3 02 c62c910e502cb615a27c58512b6cc2c94f5742f76cb3d12ec993400a3695d413 -> not the halve 02 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 -> pubkey of 1
original: 02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13 -> pubkey of 4 02 c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5 -> odd pubkey of 5 02 c62c910e502cb615a27c58512b6cc2c94f5742f76cb3d12ec993400a3695d413 -> even pubkey of 3
original: 022f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4 -> pubkey of 5 03 5699b93fc6e1bd29e09a328d657a607b4155b61a6b5fcbedd7c12df7c67df8f5 -> not the halve 02 c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5-> pubkey of 2
You see... You can not determine from the halve if it is the correct one.
|
|
|
|
ssxb
Jr. Member
Offline
Activity: 81
Merit: 2
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 10:03:14 AM |
|
ssxb
Your post makes not so much sense to me?!
How does brainless approach reduce the amount of public keys? Did you understand what he meant? Can you elaborate it further?
ok which part doesn't make sense , if you asking about 1/720 keys part ~ that what brainless said in his previous posts. check his last posts and you will find these comments. and if you ask me this is possible or not? , yes this is possible but not the way he explained. but there is one problem with my yes. it is very difficult to guess specific range where you can start searching your calculated keys. perhaps you will guess 10 keys are in 110 range but they are not there. ![Kiss](https://bitcointalk.org/Smileys/default/kiss.gif) is that right ssxb? this is possible but not the way he explained.which way you got? it is very difficult to guess specific range where you can start searching your calculated keys. perhaps you will guess 10 keys are in 110 range but they are not therecorrect
|
|
|
|
a.a
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 126
Merit: 36
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 10:22:36 AM |
|
Can somebody please explain what the "brainless"-method is?
What is he adding and subtracting? WTF. Can somebody provide an example?
|
|
|
|
ssxb
Jr. Member
Offline
Activity: 81
Merit: 2
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 10:28:31 AM |
|
Can somebody please explain what the "brainless"-method is?
What is he adding and subtracting? WTF.
chit chat he is adding and subtracting ~ dont worry he got no working method and by knowing private key and than start doing addition or subtraction is bad idea as you will know each stage where keys are going and you can modify the values to get the desire output to say wooowww to your self "i did it" is some high level shit ![Roll Eyes](https://bitcointalk.org/Smileys/default/rolleyes.gif) as i told you working blindly on public key is real skill but you will never know where you will land even if you know where you landed still range number will stab you in back so chill and drink soda while BSGS are running hahahaha ![Kiss](https://bitcointalk.org/Smileys/default/kiss.gif)
|
|
|
|
Etar
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 11:36:58 AM Merited by NotATether (5) |
|
Here is no magic, here is script to shiftdown pubkey: import random import math import hashlib import base58 def inverse(x, p): """ Calculate the modular inverse of x ( mod p ) """ inv1 = 1 inv2 = 0 n=1 while p != 1 and p!=0: quotient = x // p inv1, inv2 = inv2, inv1 - inv2 * quotient x, p = p, x % p n = n+1 return inv2
def dblpt(pt, p): """ Calculate pt+pt = 2*pt """ if pt is None: return None (x,y)= pt if y==0: return None slope= 3*pow(x,2,p)*pow(2*y,p-2,p) xsum= pow(slope,2,p)-2*x ysum= slope*(x-xsum)-y return (xsum%p, ysum%p)
def addpt(p1,p2, p): """ Calculate p1+p2 """ if p1 is None or p2 is None: return None (x1,y1)= p1 (x2,y2)= p2 if x1==x2: return dblpt(p1, p) # calculate (y1-y2)/(x1-x2) modulus p slope=(y1-y2)*pow(x1-x2,p-2,p) xsum= pow(slope,2,p)-(x1+x2) ysum= slope*(x1-xsum)-y1 return (xsum%p, ysum%p)
def ptmul(pt,a, p): """ Calculate pt*a """ scale= pt acc=None while a: if a&1: if acc is None: acc= scale else: acc= addpt(acc,scale, p) scale= dblpt(scale, p) a >>= 1 return acc
def ptdiv(pt,a,p,n): """ Calculate pt/a """ divpt=inverse(a, n)%n return ptmul(pt, divpt, p)
def isoncurve(pt,p): """ returns True when pt is on the secp256k1 curve """ (x,y)= pt return (y**2 - x**3 - 7)%p == 0
def getuncompressedpub(compressed_key): """ returns uncompressed public key """ y_parity = int(compressed_key[:2]) - 2 x = int(compressed_key[2:], 16) a = (pow(x, 3, p) + 7) % p y = pow(a, (p+1)//4, p) if y % 2 != y_parity: y = -y % p return (x,y)
def compresspub(uncompressed_key): """ returns uncompressed public key """ (x,y)=uncompressed_key y_parity = y&1 head='02' if y_parity ==1: head='03' compressed_key = head+'{:064x}'.format(x) return compressed_key
def hash160(hex_str): sha = hashlib.sha256() rip = hashlib.new('ripemd160') sha.update(hex_str) rip.update( sha.digest() ) return rip.hexdigest() # .hexdigest() is hex ASCII def getbtcaddr(pubkeyst): hex_str = bytearray.fromhex(pubkeyst) # Obtain key: key_hash = '00' + hash160(hex_str)
# Obtain signature:
sha = hashlib.sha256() sha.update( bytearray.fromhex(key_hash) ) checksum = sha.digest() sha = hashlib.sha256() sha.update(checksum) checksum = sha.hexdigest()[0:8]
return (base58.b58encode( bytes(bytearray.fromhex(key_hash + checksum)) )).decode('utf-8')
def checkpub(realpub, temppub, id): localpt = ptmul(temppub, 1024, p) localaddpt = ptmul(g, id, p) respub= addpt(localpt,localaddpt, p) print ("respub-> ", compresspub(respub)) #secp256k1 constants Gx=0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 Gy=0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 p = 2**256 - 2**32 - 977 g= (Gx,Gy)
compressed_key='0234c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf' point=getuncompressedpub(compressed_key)
print(getbtcaddr("04%064x%064x"%point)) print(getbtcaddr(compressed_key)) divisor = 2**3 newpub=ptdiv(point,divisor,p,n)
(partGx,partGy)=ptdiv(g,divisor,p,n) print ("1 Fraction part-> (%x,%064x)" % (partGx,partGy))
with open('pub.txt', 'w') as f: f.write("04%064x%064x"%newpub) f.write('\n') print ("Compressed NewPUB (",0,")-> ", compresspub(newpub),"addr",getbtcaddr(compresspub(newpub))) i=1 (pointx,pointy)=(partGx,partGy) while i<divisor: (newpubtempx,newpubtempy) = addpt(newpub,(pointx,p-pointy), p) f.write("04%064x%064x"%(newpubtempx,newpubtempy)) f.write('\n') print ("Compressed NewPUB (",i,")-> ", compresspub((newpubtempx,newpubtempy)),"addr",getbtcaddr(compresspub((newpubtempx,newpubtempy)))) (pointx,pointy) = addpt((pointx,pointy),(partGx,partGy), p) i=i+1
In this example i use pubkey 0234c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf, privkey is 0x67 and upper range is 2^7 Divisor is 2^3, so new upper range is 2^7-2^3=2^4 In file pub.txt you will find all pubkeys and their number is equil to divisor. if you try to find all this keys in range 0x1:0xf you will see that only one pubkey will be lie in range And this pubkey is 03d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a with privkey 0xC To produce real privkey need multiply privkey by divisor 0xC*0x8 = 0x60 After this need add to result founded public key number (7) Totaly privekey = 0x60 +0x7=0x67
|
|
|
|
brainless
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 318
Merit: 34
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 12:17:44 PM |
|
guys big lol here plus some explanation from my side. the script shared by NotATether is just doing opposite of divisor it is increasing 5 bit and giving you last key 5 bit uper range. only difference is while doing divisor you will get 1 key from down 5 bit and other all from defined uper bits range on exact same distance from reference value of this formula N=115792089237316195423570985008687907852837564279074904382605163141518161494337 for i in range(32): print(i, hex((((N-1)//32)*i+1)%N))
lets say we have key 10 and we do divisor of 10 so what we get is like this (just example) upper reference range 210 , 200 , 190 , 180 .................. until 10 assume after divisor each key will have 5 bit down from reference ranges based of exact same distance 205 , 195 , 185 , 175 ................. until 5 here is problem , position in 32 keys list is not always same so you cant guess which key is in which range at which position. but if you guess one key correctly which range that key is then you can find easily which is correct 5 bit down key at what position as all other keys ranges are always in sequence. if you do increment of one key all the keys will get increment as well and perhaps they will switch position also in divisor output. now talk about NotATether script,the script he posted is doing mod inverses and it is just multiplying value until reach 5 uper bit. (no one can get 120 how can they will get 125 lolololo) exapmle key is in 120 range and you used his script output will be 120, 121 , 122, 123, 124, 125 thats it . all 32 keys will be from 120 to 125 range and some range will have 2 or more keys. but guaranteed all keys will be between 120 ~ 125 range at known position as 125 bit will be at 32 position and divisor will have only one key from lower 5 bit guaranteed (not known position) and all other keys from exact same distance with upper reference range. hope you get the point. now talk about brainless theory - NotATether and brainless are misunderstanding each other brainless maybe joked that he reduced keys 720 by doing multiplication , addition and subtraction bla bla bla until 90 or 100 bit but NotATether is insisting what he explained inside his posts is not a way & there is also no way to achieve that and perhaps he never achieved that one and just keep lying. now what i think is brainless have to explain this to community " I got it down to 104 bits today, but with 32,000 pubkeys; better than the normal 2^16 normally required, but I can't figure out a way to shrink it down to one key... " for 10 bit down = 1024 pubkeys for 20 bit down = 1024*1024 = 1048576 pubkeys for 30 bit down = 1024*1024*1024 = 1073741824 pubkeys 1048576 and 1073741824 pubkeys with each other addition and mutiplication will return you 260 pubkeys apear where 16 pubkeys sure inside 10 bit down from main pubkey these 260 pubkeys again played for get 30 bit down for 1/720 pubkeys now you can start to find with above tip as how he claimed this one and plus dont forget he claimed before that he found the 120 key but no plan to cash it but same time he asked .75 bitcoin to provide 115 range one key to buy 3090 (WTF) well i think i got headache now time to drink coffee ![Roll Eyes](https://bitcointalk.org/Smileys/default/rolleyes.gif) .75 bitcoin to provide 115 range one key to buy 3090 this statment is about 4july2021 to 5july2021 and claim for have key could be very next minut, but not same time ![Smiley](https://bitcointalk.org/Smileys/default/smiley.gif) btw you are writing a very interesting topics, and defiantly not boring and same time you are getting headache and need coffee, you are writing seems upset read your above post, and if you feel more headache, then next time dont try coffee, try some wine, special red wine, dont mind stay happy and healthy and wealthy
|
13sXkWqtivcMtNGQpskD78iqsgVy9hcHLF
|
|
|
a.a
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 126
Merit: 36
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 12:27:36 PM |
|
How about I give you a 120 bit public key and you give me exactly one 115 bit public key.
|
|
|
|
brainless
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 318
Merit: 34
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 12:38:51 PM |
|
How about I give you a 120 bit public key and you give me exactly one 115 bit public key.
read back my post i need for process that required 3090 gpu's, i dont have, for base on cpu its required multiple days, and i am systems are busy already to process some other projects btw for all you 1 Q, do you know those digits which can be divide without floating point in results from 1 to 10 thos digit multiplywhat ever, result also could be div without float from 1 to 10 remember i am brainless but my talks are not useless, in past i post magic numbers for division and multiply you all never make any tests on use of those magic numbers, and talking like higly math experts about div/mul above all my post have lot of clue for your new thinking levels, but i see you all still bound in basics waiting your research for those numbers who div from 1 to 10 without float in results
|
13sXkWqtivcMtNGQpskD78iqsgVy9hcHLF
|
|
|
ssxb
Jr. Member
Offline
Activity: 81
Merit: 2
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 12:40:58 PM |
|
guys big lol here plus some explanation from my side. the script shared by NotATether is just doing opposite of divisor it is increasing 5 bit and giving you last key 5 bit uper range. only difference is while doing divisor you will get 1 key from down 5 bit and other all from defined uper bits range on exact same distance from reference value of this formula N=115792089237316195423570985008687907852837564279074904382605163141518161494337 for i in range(32): print(i, hex((((N-1)//32)*i+1)%N))
lets say we have key 10 and we do divisor of 10 so what we get is like this (just example) upper reference range 210 , 200 , 190 , 180 .................. until 10 assume after divisor each key will have 5 bit down from reference ranges based of exact same distance 205 , 195 , 185 , 175 ................. until 5 here is problem , position in 32 keys list is not always same so you cant guess which key is in which range at which position. but if you guess one key correctly which range that key is then you can find easily which is correct 5 bit down key at what position as all other keys ranges are always in sequence. if you do increment of one key all the keys will get increment as well and perhaps they will switch position also in divisor output. now talk about NotATether script,the script he posted is doing mod inverses and it is just multiplying value until reach 5 uper bit. (no one can get 120 how can they will get 125 lolololo) exapmle key is in 120 range and you used his script output will be 120, 121 , 122, 123, 124, 125 thats it . all 32 keys will be from 120 to 125 range and some range will have 2 or more keys. but guaranteed all keys will be between 120 ~ 125 range at known position as 125 bit will be at 32 position and divisor will have only one key from lower 5 bit guaranteed (not known position) and all other keys from exact same distance with upper reference range. hope you get the point. now talk about brainless theory - NotATether and brainless are misunderstanding each other brainless maybe joked that he reduced keys 720 by doing multiplication , addition and subtraction bla bla bla until 90 or 100 bit but NotATether is insisting what he explained inside his posts is not a way & there is also no way to achieve that and perhaps he never achieved that one and just keep lying. now what i think is brainless have to explain this to community " I got it down to 104 bits today, but with 32,000 pubkeys; better than the normal 2^16 normally required, but I can't figure out a way to shrink it down to one key... " for 10 bit down = 1024 pubkeys for 20 bit down = 1024*1024 = 1048576 pubkeys for 30 bit down = 1024*1024*1024 = 1073741824 pubkeys 1048576 and 1073741824 pubkeys with each other addition and mutiplication will return you 260 pubkeys apear where 16 pubkeys sure inside 10 bit down from main pubkey these 260 pubkeys again played for get 30 bit down for 1/720 pubkeys now you can start to find with above tip as how he claimed this one and plus dont forget he claimed before that he found the 120 key but no plan to cash it but same time he asked .75 bitcoin to provide 115 range one key to buy 3090 (WTF) well i think i got headache now time to drink coffee ![Roll Eyes](https://bitcointalk.org/Smileys/default/rolleyes.gif) .75 bitcoin to provide 115 range one key to buy 3090 this statment is about 4july2021 to 5july2021 and claim for have key could be very next minut, but not same time ![Smiley](https://bitcointalk.org/Smileys/default/smiley.gif) btw you are writing a very interesting topics, and defiantly not boring and same time you are getting headache and need coffee, you are writing seems upset read your above post, and if you feel more headache, then next time dont try coffee, try some wine, special red wine, dont mind stay happy and healthy and wealthy brainless ![Kiss](https://bitcointalk.org/Smileys/default/kiss.gif)
|
|
|
|
ssxb
Jr. Member
Offline
Activity: 81
Merit: 2
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 12:44:08 PM |
|
Here is no magic, here is script to shiftdown pubkey: import random import math import hashlib import base58 def inverse(x, p): """ Calculate the modular inverse of x ( mod p ) """ inv1 = 1 inv2 = 0 n=1 while p != 1 and p!=0: quotient = x // p inv1, inv2 = inv2, inv1 - inv2 * quotient x, p = p, x % p n = n+1 return inv2
def dblpt(pt, p): """ Calculate pt+pt = 2*pt """ if pt is None: return None (x,y)= pt if y==0: return None slope= 3*pow(x,2,p)*pow(2*y,p-2,p) xsum= pow(slope,2,p)-2*x ysum= slope*(x-xsum)-y return (xsum%p, ysum%p)
def addpt(p1,p2, p): """ Calculate p1+p2 """ if p1 is None or p2 is None: return None (x1,y1)= p1 (x2,y2)= p2 if x1==x2: return dblpt(p1, p) # calculate (y1-y2)/(x1-x2) modulus p slope=(y1-y2)*pow(x1-x2,p-2,p) xsum= pow(slope,2,p)-(x1+x2) ysum= slope*(x1-xsum)-y1 return (xsum%p, ysum%p)
def ptmul(pt,a, p): """ Calculate pt*a """ scale= pt acc=None while a: if a&1: if acc is None: acc= scale else: acc= addpt(acc,scale, p) scale= dblpt(scale, p) a >>= 1 return acc
def ptdiv(pt,a,p,n): """ Calculate pt/a """ divpt=inverse(a, n)%n return ptmul(pt, divpt, p)
def isoncurve(pt,p): """ returns True when pt is on the secp256k1 curve """ (x,y)= pt return (y**2 - x**3 - 7)%p == 0
def getuncompressedpub(compressed_key): """ returns uncompressed public key """ y_parity = int(compressed_key[:2]) - 2 x = int(compressed_key[2:], 16) a = (pow(x, 3, p) + 7) % p y = pow(a, (p+1)//4, p) if y % 2 != y_parity: y = -y % p return (x,y)
def compresspub(uncompressed_key): """ returns uncompressed public key """ (x,y)=uncompressed_key y_parity = y&1 head='02' if y_parity ==1: head='03' compressed_key = head+'{:064x}'.format(x) return compressed_key
def hash160(hex_str): sha = hashlib.sha256() rip = hashlib.new('ripemd160') sha.update(hex_str) rip.update( sha.digest() ) return rip.hexdigest() # .hexdigest() is hex ASCII def getbtcaddr(pubkeyst): hex_str = bytearray.fromhex(pubkeyst) # Obtain key: key_hash = '00' + hash160(hex_str)
# Obtain signature:
sha = hashlib.sha256() sha.update( bytearray.fromhex(key_hash) ) checksum = sha.digest() sha = hashlib.sha256() sha.update(checksum) checksum = sha.hexdigest()[0:8]
return (base58.b58encode( bytes(bytearray.fromhex(key_hash + checksum)) )).decode('utf-8')
def checkpub(realpub, temppub, id): localpt = ptmul(temppub, 1024, p) localaddpt = ptmul(g, id, p) respub= addpt(localpt,localaddpt, p) print ("respub-> ", compresspub(respub)) #secp256k1 constants Gx=0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 Gy=0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 p = 2**256 - 2**32 - 977 g= (Gx,Gy)
compressed_key='0234c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf' point=getuncompressedpub(compressed_key)
print(getbtcaddr("04%064x%064x"%point)) print(getbtcaddr(compressed_key)) divisor = 2**3 newpub=ptdiv(point,divisor,p,n)
(partGx,partGy)=ptdiv(g,divisor,p,n) print ("1 Fraction part-> (%x,%064x)" % (partGx,partGy))
with open('pub.txt', 'w') as f: f.write("04%064x%064x"%newpub) f.write('\n') print ("Compressed NewPUB (",0,")-> ", compresspub(newpub),"addr",getbtcaddr(compresspub(newpub))) i=1 (pointx,pointy)=(partGx,partGy) while i<divisor: (newpubtempx,newpubtempy) = addpt(newpub,(pointx,p-pointy), p) f.write("04%064x%064x"%(newpubtempx,newpubtempy)) f.write('\n') print ("Compressed NewPUB (",i,")-> ", compresspub((newpubtempx,newpubtempy)),"addr",getbtcaddr(compresspub((newpubtempx,newpubtempy)))) (pointx,pointy) = addpt((pointx,pointy),(partGx,partGy), p) i=i+1
In this example i use pubkey 0234c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf, privkey is 0x67 and upper range is 2^7 Divisor is 2^3, so new upper range is 2^7-2^3=2^4 In file pub.txt you will find all pubkeys and their number is equil to divisor. if you try to find all this keys in range 0x1:0xf you will see that only one pubkey will be lie in range And this pubkey is 03d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a with privkey 0xC To produce real privkey need multiply privkey by divisor 0xC*0x8 = 0x60 After this need add to result founded public key number (7) Totaly privekey = 0x60 +0x7=0x67 same old stuff with different script :p
|
|
|
|
ssxb
Jr. Member
Offline
Activity: 81
Merit: 2
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 12:51:32 PM |
|
How about I give you a 120 bit public key and you give me exactly one 115 bit public key.
read back my post i need for process that required 3090 gpu's, i dont have, for base on cpu its required multiple days, and i am systems are busy already to process some other projects btw for all you 1 Q, do you know those digits which can be divide without floating point in results from 1 to 10 thos digit multiplywhat ever, result also could be div without float from 1 to 10 remember i am brainless but my talks are not useless, in past i post magic numbers for division and multiply you all never make any tests on use of those magic numbers, and talking like higly math experts about div/mul above all my post have lot of clue for your new thinking levels, but i see you all still bound in basics waiting your research for those numbers who div from 1 to 10 without float in results i can give you access to one of my rig , 10850k oc , 128gb 3600 OC , 3080 OC for 24/7 ![Grin](https://bitcointalk.org/Smileys/default/grin.gif)
|
|
|
|
a.a
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 126
Merit: 36
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 01:13:18 PM |
|
Is there any mathematical argument for this reduction? And what magic numbers are we talking about ![Cheesy](https://bitcointalk.org/Smileys/default/cheesy.gif) .
|
|
|
|
|
a.a
Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 126
Merit: 36
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 01:26:39 PM |
|
Guys fyi 1024 is not div point in ecc, posting here, divideable magic digits for ecc, these will help you to decide bitrange to divide, use these magic ecc div numbers, for pollard kanagroo or other manual div
2 447 7572 564114 3 596 9536 752152 4 631 10096 1128228 6 894 14304 1504304 8 1192 15144 2256456 12 1262 20192 3008608 16 1788 28608 4512912 24 1893 30288 6017216 32 2384 40384 9025824 48 2524 60576 18051648 64 3576 94019 96 3786 121152 149 4768 188038 192 5048 282057 298 7152 376076
What the hell is a div point?
|
|
|
|
ssxb
Jr. Member
Offline
Activity: 81
Merit: 2
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 01:43:37 PM |
|
Guys fyi 1024 is not div point in ecc, posting here, divideable magic digits for ecc, these will help you to decide bitrange to divide, use these magic ecc div numbers, for pollard kanagroo or other manual div
2 447 7572 564114 3 596 9536 752152 4 631 10096 1128228 6 894 14304 1504304 8 1192 15144 2256456 12 1262 20192 3008608 16 1788 28608 4512912 24 1893 30288 6017216 32 2384 40384 9025824 48 2524 60576 18051648 64 3576 94019 96 3786 121152 149 4768 188038 192 5048 282057 298 7152 376076
What the hell is a div point? ok i dont want to go more in details but i think he is saying that you use these number to generate divisor keys ~~ instead of using 32 in script use one of magic number ( ![Grin](https://bitcointalk.org/Smileys/default/grin.gif) & 32 is already there) lets say you use magic number 1262 and get 1262 keys , now again use divisor to to get 1262x1262 = 1592644 now do again divisor of 1592644 keys with 1262 each and you will get = 2009916728 now one file with 1592644 keys and one file with 2009916728 and here the real shit will come these 2 files each other addition and multiplication will return you some lower number of keys lets say 500 than again you pick one so call magic number and start doing same process until you faint and they will take you to the hospital and when you will get up from coma you will know ssxb got 120 by calculating other side shit right brainless ![Roll Eyes](https://bitcointalk.org/Smileys/default/rolleyes.gif)
|
|
|
|
ssxb
Jr. Member
Offline
Activity: 81
Merit: 2
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 01:52:30 PM Merited by studyroom1 (1) |
|
by the way dont brain (mind) brainless but you got me man~ now before die i really want to see script which you are using to reduce number of keys . consider it as my last wish ![Grin](https://bitcointalk.org/Smileys/default/grin.gif)
|
|
|
|
wedom
Jr. Member
Offline
Activity: 48
Merit: 11
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 28, 2021, 02:32:33 PM Last edit: September 28, 2021, 03:15:42 PM by wedom |
|
How about I give you a 120 bit public key and you give me exactly one 115 bit public key.
read back my post i need for process that required 3090 gpu's, i dont have, for base on cpu its required multiple days, and i am systems are busy already to process some other projects btw for all you 1 Q, do you know those digits which can be divide without floating point in results from 1 to 10 thos digit multiplywhat ever, result also could be div without float from 1 to 10 remember i am brainless but my talks are not useless, in past i post magic numbers for division and multiply you all never make any tests on use of those magic numbers, and talking like higly math experts about div/mul above all my post have lot of clue for your new thinking levels, but i see you all still bound in basics waiting your research for those numbers who div from 1 to 10 without float in results I have been working hard on this question for several months now, as you know. Since this topic has stuck with me a lot and I want to get to the bottom of it, including from a mathematical point of view. I have done and am doing a lot of different experiments with these numbers and other divisors at 10 and 20 bit levels. So far I still can not understand how to reduce the number of keys, while preserving the bits, but I'm working on it! What I found out: as we know, these numbers are divisors of numbers N-1. When dividing by these numbers, the results are consecutively "on a circle of N". The numbers that are not divisors do not go sequentially on the circle, but they can also be placed sequentially, in this case we should use a step that depends on the remainder. For your question. I am afraid of misunderstanding the problem because of the translation problem. If you can, give an example of what we have and what we need to get using these numbers. Regards. Thank you
|
|
|
|
|