clé privée : Quel est le calcul derrière la courbe elliptique de Bitcoin ?


Pour moi, la vidéo clé expliquant les mathématiques pour la courbe elliptique bitcoin secp256k1 était la suivante  : Bitcoin 101 – Cryptographie à courbe elliptique – Partie 4 – Génération de la clé publique (en Python)

Et si vous voulez vérifier avec un script python que j’ai extrait de la vidéo, vous pouvez utiliser ceci :

# ! /usr/bin/python3 # Présentation de courbe elliptique super simple. Pas de bibliothèques importées, d’emballages, rien. # À des fins éducatives seulement. # Vous trouverez ci-dessous les spécifications publiques de la courbe de Bitcoin – les secp256k1 # sites de vérification /services/cryptocurrency/cryptocurrency.html # données pour utiliser la courbe secp256k1 Pcurve = 2 ** 256 – 2 ** 32 – 2 ** 9 – 2 ** 8 – 2 ** 7 – 2 ** 6 – 2 ** 4 – 1 # Le nombre premier éprouvé N = # Nombre de points dans le champ Acourbe = 0 Bcourbe = 7 # Ces deux définissent la courbe elliptique. y ^ 2 = x ^ 3 + Acurve * x + = Bcurve Gx = Gy GPoint = (Gx, Gy) # Ceci est notre point de générateur. Des trillions de différents possibles # Transaction individuelle/Informations personnelles privKey = def modinv(a : int, n : int = Pcurve) : # MAXIMO COMUN DIVISOR : Extended Euclidean Algorithm/’division’ in elliptic curve resto = a % n high = n while resto > 1  : ratio = high // resto nm = hm – lm * ratio new = high – resto * ratio lm, resto, hm, high = nm, new, lm, resto return lm % n def ECadd(a, b) : # Addition fausse, inventée pour EC. On aurait pu appeler n’importe quoi. LamAdd = ((b – un) * modinv(b – unPcourbe)) % Pcourbe x = (LamAdd * LamAdd – a -b) % Pcourbe y = (LamAdd * (a – x) – un) % Pcurve return x, y def ECdouble(a) : # C’est ce qu’on appelle le doublement de points, également inventé pour EC. Lam = ((3 * a * un + Acourbe) * modinv((2 * a), Pcourbe)) % Pcourbe x = (Lam * Lam – 2 * a) % Pcourbe y = (Lam * (a – x) – un) % Pcurve return x,: tuple,: int) : # Double & add. lever une exception (« Invalid Scalar/, len(ScalarBin)) : Q = ECdouble(Q) if ScalarBin == « 1 » : Q = ECadd(Q. privKey) print(« la clé privée  : ») print(privKey) print() print(« la clé publique non compressée (pas l’adresse)  : ») print(PublicKey) print() x = hex(PublicKey).upper() y = hex(PublicKey).upper() print(f »Le x  ::. ») if PublicKey % 2 == 1 : # Si la valeur Y de la clé publique est impaire. print(« 03 » + str(hex(PublicKey)).zfill(64).upper()) else  : # Ou bien, si la valeur Y est paire. print(« 02 » + str(hex(PublicKey)).zfill(64).upper())

clé privée : Quel est le calcul derrière la courbe elliptique de Bitcoin ?

Enfin, vous pouvez voir comment obtenir l’ensemble du processus, y compris le format WIF et les adresses publiques, cochez ceci.