Zmienne w implementacji Polard Kangaros

0

Witam,
Chciałbym zrozumieć coś na temat kwestii metody podanej w temacie na działaniach z elliptic curve.
Zacznę od kodu, a na końcu zadam konkretne pytanie o to co mnie boli:


p = 11470374874925275658116663507232161402086650258453896274534991676898999262641581519101074740642369848233294239851519212341844337347119899874391456329785623
q = 335062023296420808191071248367701059461
j = 34233586850807404623475048381328686211071196701374230492615844865929237417097514638999377942356150481334217896204702
g = 117483621780776948851322623152941329604983290852776470044816799968190986256316556722568523187517506040883960831402919848784195399671137064998190231834559
y = 10709965516783081490573356698184657992418098658871683731914897364288781862793359484228879297315128529085240057591857301471581217507082588896460650496983734
z = 224029434095732291724690823

a = 0
b = (q-1)/z

def f(y):
    return pow(2, (y % k))

print 'a',a
print 'b',b
global k 
k = 20
print 'k is set to %d' % k
"""
Tame Kangaroo
    xT := 0
    yT := g^b

    for i in 1..N:
        xT := xT + f(yT)
        yT := yT * g^f(yT)

"""

xT = 0
yT = pow(g, b, p)

N = ( f(0) + f(b)) / 2  * 2

for i in range(1, N):
    xT += f(yT)
    yT = (yT  * pow(g, f(yT), p)) % p

print xT, yT
"""
Wild Kangaroo
    xW := 0
    yW := y

    while xW < b - a + xT:
        xW := xW + f(yW)
        yW := yW * g^f(yW)

        if yW = yT:
            return b + xT - xW
"""

print "Setting wild kangaroo off"

def wildKangaroo(y, yT, xT, b, a, g, p):
    xW = 0
    yW = y
    while xW < (b - a + xT):
        xW = xW + f(yW)
        yW = yW * pow(g, f(yW), p) % p

        if yW == yT:
            print 'catch'
            return b + xT - xW


A = wildKangaroo(y, yT, xT, b, a, g, p)
print A
print " %s ^ %s = %s" % (g, A, y)
print pow(g, A, p)

To jest przykład implementacji tej metody. Pytania brzmią:

  1. Na podstawie powyższego przykładu - jak mam rozumieć CZYM SĄ p,q,j,g,y i z?

Na cel wypróbowania metody do uzyskania klucza prywatnego dla adresu Bitcoin - dysponuję adresem, dla którego posiadam klucz publiczny (x i y) w hex oraz wiedzę o tym w jakim zakresie mieści się ten klucz (2^65):
2.. Co zmienić mając wszelkie te dane, aby osiągnąć cel?
3. Czy mogę zastosować formę HEX zamiast tych DEC , czy po prostu muszę je przekształcić w jakiś sposób? Chodzi mi o klucz publiczny który jest hexowy

1

Zakładam, że znasz takie pojęcia jak ciało skończone, charakterystyka ciała, grupa Galois, generator grupy, krzywa eliptyczna i jedynie masz problem jak przemapować te parametry z kodu na teorię? ;-)
Zerknij na opis: https://tools.ietf.org/html/rfc5639

Z tego co czytałem to dla tego kangura Pollarda potrzeba C*sqrt(p) operacji by znaleźć rozwiązanie. U Ciebie p jest spore, dawałoby to:
c*1.0709983601726603791353400131257235460519488108606495... × 10^77 operacji do wykonania. Zakładając, że jesteś w stanie wykonać 10^37 operacji na sekundę (a co tam, może potrafisz ;-) ).

To potrzebowałbyś c*10^40 sekund... Niech to będzie szybka implementacja i np. c=10^-10 , to nadal 10^30 sekund. Nie wiem czy ilość kasy w takim portfelu bitcoinowym pokryje rachunek za prąd ;-)

0
yarel napisał(a):

Zakładam, że znasz takie pojęcia jak ciało skończone, charakterystyka ciała, grupa Galois, generator grupy, krzywa eliptyczna i jedynie masz problem jak przemapować te parametry z kodu na teorię? ;-)
Zerknij na opis: https://tools.ietf.org/html/rfc5639

Z tego co czytałem to dla tego kangura Pollarda potrzeba C*sqrt(p) operacji by znaleźć rozwiązanie. U Ciebie p jest spore, dawałoby to:
c*1.0709983601726603791353400131257235460519488108606495... × 10^77 operacji do wykonania. Zakładając, że jesteś w stanie wykonać 10^37 operacji na sekundę (a co tam, może potrafisz ;-) ).

To potrzebowałbyś c*10^40 sekund... Niech to będzie szybka implementacja i np. c=10^-10 , to nadal 10^30 sekund. Nie wiem czy ilość kasy w takim portfelu bitcoinowym pokryje rachunek za prąd ;-)

Dzięki za udzielenie odpowiedzi!
Te powyższe wartości nie są wartościami które zamierzam docelowo uruchamiać.
Ja kompletnie nie znam mechanizmu ustalania tych wartości... Matematyka to kiedyś był mało interesujący mnie przedmiot... nauczycielka miała racje, że będę żałował :-)
Mój cel jest znany... posiadam adres hex i wiem, że znajduje się w przestrzeni 2^65. Posiadam też w hex klucz publiczny (a więc i współrzędne X oraz Y). W jaki sposób mam to zaimplementować na powyższym przykładzie?
P.S. W powyższym linku są wartości grupy dla 2^256, które po przekonwertowaniu na DEC (taki jest w moim przykładzie?) daje kompletnie inne wartości.

0

Okej, już dzięki temu doszedłem DUŻO dalej, bo wiem, że te wartości odnoszą się do parametrów krzywej eliptycznej stosowanej w kryptografii klucza publicznego Bitcoin i są zdefiniowane w NORMACH dla wydajnej kryptografii. Tak więc po prostu posiadany przeze mnie przykład ma podstawione wartości które się nie zgadzają, ponieważ został stworzony do innej matrycy (nie BTC:-]).

To teraz pytanie za sto punktów.... Znając wartości do których dotarłem:
p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F (wartość stała)
a = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 (wartość stała )
b = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007 (wartość stała )
G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 (wartość stała / wariant skompresowany, bo wiem że chodzi o skompresowany adres)
n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 (wartość stała określająca maksymalną granicę )

oraz moje dane na temat celu do którego chcę znaleźć klucz, na które składa się:

  1. adres walletu - jest to adres skompresowany
  2. klucz publiczny / współrzędne x,y
  3. położenie klucza prywatnego - 2^65

jak skutecznie wprowadzić to do działania z powyższym przykładem?
Zdaje sobie sprawę, że mogę denerwować co niektórych i przepraszam jeśli to robię. Jeżeli ktoś kto to przeczytał wie, że potrafi stworzyć dla mnie odpowiednie rozwiązanie - jestem gotów zapłacić za poświęcony mi czas na realizację tego. Proszę o kontakt na PW w takim wypadku.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1