Description de l'étiquette epub
En gros, lors de la création d'une clé publique à partir d'une clé privée, ce que vous êtes en train de faire est de multiplier un nombre par un point sur la courbe. Dans la plupart des cas, vous serez en multipliant certains très grand nombre par ce qu'on appelle un Générateur de point. C'est juste un certain point tout le monde le sait et l'accepte lors de l'.
La multiplication d'un nombre d mod n
par un point G
, ou, parfois, la dG
est défini de manière intuitive, comme :
G + G + G + G...
et ainsi de suite d
fois.
Si vous vous souvenez de la façon de faire le point outre, le processus est sensiblement le même.
Pour ajouter deux points A
et B
, de coordonnées (A_x, A_y), (B_x, B_y)
, pour un faire un troisième point C
de coordonnées(C_x, C_y)
,
point plus est définie comme :
- Trouver la pente (que nous appellerons
slp
) entre les deux pointsA
etB
C_x = slp^2 - A_x - B_x mod p
C_y = slp * (A_x - C_x) - A_y mod p
Et lors de l'ajout du même point pour lui-même, Un + Un
(ou 2*A
quand d == 2
), point de doubler est défini comme:
- Trouver la tangente (nous allons l'appeler
tgt (ticket granting ticket
) à la courbe au point d'Un
C_x = tgt^2 - 2*A_x mod p
C_y = tgt * (A_x - C_x) - A_y mod p
Maintenant, nous avons seulement besoin de définir comment trouver slp
et tgt
, et nous pouvons commencer à créer des clés publiques.
Une pente entre deux points doit vous être familier :
B_y - A_y
--------- mod p
B_x - A_x
Et une tangente à la courbe en un point est :
3 * (A_x)^2 + a
--------------- mod p
2 * A_y
* le nombre a
est un paramètre de la courbe. comme n
et p
.
Vous pouvez déjà voir le problème ici, c'est que la division ne fait pas beaucoup de sens dans l'arithmétique modulaire. Au lieu de cela, nous sorte de multiplier le numérateur par le modulaire inverse du dénominateur, ce qui est logique. Pour diviser deux nombres, on utilise le mod inverse de la fonction (qui à son tour peut utiliser l'algorithme d'euclide étendu, par exemple), donc, ce que nous finirions le calcul serait :
(B_y - A_y) * modinv(B_x - A_x) mod p
pour la pente slp
et :
(3 * (A_x)^2 + a) * modinv(2 * A_y) mod p
pour la ligne tangente tgt
.
Et c'est là que nous utilisons le mod inverse lors de la création de clés publiques, ou bien lors de l'ajout de points.