Ajout sur les courbes elliptiques
Avertissement: cela ne rend pas justice au sujet riche des courbes elliptiques. C'est beaucoup simplifié. Comme les courbes elliptiques ont récemment attiré beaucoup d'attention des médias dans le contexte du chiffrement, je voulais donner un petit aperçu du fonctionnement réel du "calcul" sur une courbe elliptique.
introduction
Les courbes elliptiques sont des ensembles de points (x,y)
dans le plan de la forme y^2 = x^3+Ax+B
. (De plus, 4A^3+27B^2 ≠ 0
pour éviter les singularités désagréables.) Vous pouvez considérer ces courbes dans n'importe quel domaine. Si vous utilisez le champ des nombres réels, les courbes peuvent être visualisées et elles ressemblent à ceci:
La particularité de ces courbes est qu'elles ont une opération arithmétique intégrée qui est l'analogue de l'addition. Vous pouvez ajouter et soustraire des points, et cette opération est à la fois associative et commutative (un groupe abélien).
Comment fonctionne l'addition?
Remarque: l'ajout de points sur les courbes elliptiques n'est pas intuitif. Ce type d'ajout est défini tel qu'il est car il possède certaines propriétés intéressantes. C'est bizarre, mais ça marche.
Comme les courbes elliptiques forment un groupe, il existe une identité additive équivalente à 0. Autrement dit, l'ajout 0
à n'importe quel point ne changera pas le résultat. Cette identité additive est le «point» à l'infini. Toutes les lignes de l'avion incluent ce point à l'infini, donc l'ajouter ne fait aucune différence.
Disons que toute ligne donnée coupe la courbe en trois points, ce qui peut être le cas 0
, et que la somme de ces trois points est 0
. Gardant cela à l'esprit, regardez cette image.
Maintenant, la question naturelle est, qu'est-ce que c'est P+Q
? Eh bien, si P+Q+R = 0
, alors P+Q = -R
(également écrit comme R'
). O is est -R
? Il est là R + (-R) = 0
, ce qui est de l'autre côté de l'axe x de R
sorte que la ligne à travers eux est vertical, coupant uniquement R
, -R
et 0
. Vous pouvez le voir dans la première partie de cette image:
Une autre chose que vous pouvez voir dans ces images est que la somme d'un point avec lui-même signifie que la ligne est tangente à la courbe.
Comment trouver des intersections de lignes et de courbes elliptiques
Dans le cas de deux points distincts
Généralement, il y a exactement une ligne passant par deux points P=(x0,y0), Q=(x1,y1)
. En supposant qu'il n'est pas vertical et que les deux points sont distincts, nous pouvons l'écrire comme y = m*x+q
. Lorsque nous voulons trouver les points d'intersection avec la courbe elliptique, nous pouvons simplement écrire
0 = x^3+Ax+B-y^2 = x^3+Ax+B-(m*x+q)^2
qui est un polynôme du troisième degré. Ceux-ci ne sont généralement pas faciles à résoudre, mais nous connaissons déjà deux zéros de ce polynôme: les deux x
coordonnées x0, x1
des deux points que nous voulons ajouter!
De cette façon, nous factorisons les facteurs linéaires (x-x0)
et nous nous retrouvons (x-x1)
avec un troisième facteur linéaire dont la racine est la x
coordonnée du point R
. ( -R
aussi à cause de la symétrie. Notez que si R = (x2,y2)
alors -R = (x2,-y2)
. Le -
est du groupe; ce n'est pas un moins vectoriel.)
Dans le cas de l'ajout d'un point P
à lui-même
Dans ce cas, nous devons calculer la tangente de la courbe à P=(x0,y0)
. Nous pouvons écrire directement m
et q
en termes de A,B,x0,y0
:
3*x0^2 + A
m = ------------
2*y0
-x0^3 + A*x0 + 2*B
q = --------------------
2*y0
Nous obtenons l'équation y = m*x+q
et pouvons procéder de la même manière que dans le paragraphe ci-dessus.
Un arbre de cas complet
Voici une liste complète de la façon de gérer tous ces cas:
Soit des P,Q
points sur la courbe elliptique (y compris le point "infini" 0
)
- Si
P = 0
ouQ = 0
, alorsP+Q = Q
ouP+Q = P
, respectivement - Sinon
P ≠ 0
etQ ≠ 0
, alors laissezP = (x0,y0)
etQ = (x1,y1)
:- Si
P = -Q
(cela signifiex0 = x1
ety0 = -y1
) alorsP+Q = 0
- Autre
P ≠ -Q
- Si
x0 = x1
alors nous avonsP=Q
et nous calculons la tangente (voir section ci-dessus) pour obtenirR
. ensuiteP+Q = P+P = 2P = -R
- Sinon: Nous pouvons construire une ligne du formulaire à
y = m*x+y
travers ces deux points (voir la section ci-dessus) afin de calculerR
. ensuiteP+Q=-R
- Si
- Si
Champs finis
Pour ce défi, nous ne considérerons que les champs de taille p
où p
est premier (et à cause de certains détails p ≠ 2, p ≠ 3
). Cela a l'avantage que vous pouvez simplement calculer mod p
. L'arithmétique dans d'autres domaines est beaucoup plus compliquée.
Dans cet exemple, nous définissons p = 5
et toutes les égalités ici sont des congruences mod 5
.
2+4 ≡ 6 ≡ 1
2-4 ≡ -2 ≡ 3
2*4 ≡ 8 ≡ 3
2/4 ≡ 2*4 ≡ 3 because 4*4 ≡ 16 ≡ 1, therefore 1/4 ≡ 4
Défi
Étant donné les paramètres A,B
d'une courbe elliptique, une caractéristique de champ premier p
et deux points P,Q
sur la courbe elliptique, renvoient leur somme.
- Vous pouvez supposer que les paramètres
A,B
décrivent réellement une courbe elliptique, cela signifie que4A^3+27B^2 ≠ 0
. - Vous pouvez supposer qu'il
P,Q
s'agit en fait de points sur la courbe elliptique ou le0
point. - Vous pouvez supposer que
p ≠ 2,3
c'est primordial.
Cas de test
J'ai fait une implémentation (pas très élégante) dans MATLAB / Octave, que vous pouvez utiliser pour vos propres cas de test: ideone.com J'espère que c'est correct. Il reproduit au moins quelques calculs que j'ai faits à la main.
Notez les cas de test triviaux qui fonctionnent pour toutes les courbes que nous considérons ici:
Ajout de zéro: P+0 = P
Ajout de l'inverse:(x,y) + (x,-y) = 0
Pour p = 7, A = 0, B = 5
les deux points P = (3,2)
et Q = (6,2)
sont sur la courbe elliptique. Ensuite, les prises suivantes:
2*Q = Q+Q = P
2*P = P+P = (5,2)
3*P = P+P+P = (5,2)+P = (6,5)
4*P = P+P+P+P = (5,2)+(5,2) = (6,5)+(5,2) = Q
Tous les poins de la courbe elliptique sont (3,2),(5,2),(6,2),(3,5),(5,5),(6,5),0
Car p = 13, A = 3, B = 8
nous obtenons
(1,8)+(9,7) = (2,10)
(2,3)+(12,11) = (9,7)
2*(9,6) = (9,7)
3*(9,6) = 0
Pour p = 17, A = 2, B = 2
et P=(5,1)
nous obtenons
2*P = (6,3)
3*P = (10,6)
4*P = (3,1)
5*P = (9,16)
6*P = (16,13)
7*P = (0,6)
8*P = (13,7)
9*P = (7,6)
10*P = (7,11)
Si vous êtes vraiment ambitieux, prenez
p = 1550031797834347859248576414813139942411
A = 1009296542191532464076260367525816293976
x0 = 1317953763239595888465524145589872695690
y0 = 434829348619031278460656303481105428081
x1 = 1247392211317907151303247721489640699240
y1 = 207534858442090452193999571026315995117
et essayez de trouver un nombre naturel n
tel que n*(x0,y0) = (x1,y1)
. Plus d'informations ici.
appendice
Tout d'abord un grand MERCI à @ El'endiaStarman pour avoir révisé et édité mon brouillon!
Pourquoi des courbes elliptiques?
Eh bien, cela peut apparaître comme une sorte d'équation arbitraire, mais ce n'est pas le cas, c'est assez général: en général, nous considérons ces «formes» géométriques dans le plan projectif (c'est de là que vient «l'infini». Là, nous considérons toutes homogènes polynômes de troisième degré (ceux de degré inférieur ou supérieur seraient trop difficiles ou simplement triviaux à examiner). ) on se retrouve avec des équations commey^2+a*x*y+b*y = x^3+c*x^2+d*x+e
Il s'agit d'une courbe elliptique sous la forme longue de Weierstrass. Ce sont essentiellement les mêmes courbes que nous avons considérées, mais juste un peu asymétriques. Avec une transformation de coordonnées linéaire, vous pouvez facilement en faire une courte équation de Weierstras. exemple , qui détiennent toujours toutes les propriétés intéressantes.
Pourquoi avons-nous exclu p=2,3
?
Cela a à voir avec le fait que pour la forme courte de Weierstrass, nous avons besoin de la restriction 4A^3+27B^2 ≠ 0
afin d'éviter les singularités (plus de détails ci-dessous). Dans un champ de la caractéristique 2 que nous avons 4 = 0
et dans un champ de la caractéristique 3 que nous avons 27 = 0
, cela rend impossible d'avoir des courbes sous forme de weierstrass courtes pour ces types de champs.
Quelles sont les singularités?
Si l'équation 4A^3+27B^2=0
est vraie, nous avons des singularités comme celles-ci: Comme vous le voyez à ces points, vous ne pouvez pas trouver de dérivée et donc pas de tangente, ce qui "tue" l'opération. Vous pourriez regarder les équations y^2 = x^3
ouy^2 = x^3-3*x+2
Pourquoi sont-ils appelés des courbes elliptiques de toute façon?
La raison en est que les équations de cette forme apparaissent dans les intégrales elliptiques, par exemple, ce que vous obtenez lorsque vous voulez calculer par exemple la longueur d'arc d'une ellipse. Un petit diaporama sur l'origine du nom.
Qu'est-ce qu'ils ont à voir avec la cryptographie?
Il existe des moyens de calculer nP = P+P+...+P
très efficacement. Cela peut être utilisé par exemple dans l' échange de clés Diffie Hellman . L'arithmétique modulaire peut être remplacée par l'addition sur les sous-groupes de torsion, ce ne sont que les points de la courbe qui ont un ordre fini. (Cela signifie que mP = 0
pour certains m
, ce qui est essentiellement juste du calcul mod m
).
y^2 = x^3 + x
s'agit d'une courbe elliptique valide et d'(0,0) ≠ 0
un point sur la courbe!)B = 0
et me demandant comment0
cela fonctionnerait ... et puis j'ai oublié. Je pense que j'ai supposéB
ne pas pouvoir être 0 à un moment donné hier soir. Avez-vous des suggestions sur ce que l’entrée devrait aimer pour cela? Peut-être que siB = 0
, alors définir0 = (-1, -1)
? Je suis heureux d'ajuster mon code pour le gérer, je pense juste que ce serait bien qu'il soit standardisé pour d'autres soumissions aussi ...[0]
(une seule coordonnée) est le point infini, ou quelque chose de similaire!nP
? Pourriez-vous me signaler des ressources sur le sujet pour faire circuler les pensées? J'ai du mal à trouver quelque chose sur Google. Merci!Python 3,
193191 octetsUne solution basée sur la réponse Python de Rhyzomatic et leur logique Python. En particulier. J'ai aimé comment ils ont trouvé la troisième racine d'un polynôme cubique monique
x^3 + bx^2 + cx + d
lorsque vous avez deux racinesx_1
etx_2
en notant celab == x_1 + x_2 + x_3
et en soustrayant en conséquence. Je prévois d'ajouter une explication, de jouer au golf, et peut-être de la transpiler en Ruby, si Ruby s'avère plus court.Ungolfing:
la source