<div dir="ltr">Mike, I'm saving this forever, this is gold. Thank you!<br><br><div class="gmail_quote"><div dir="ltr">On Wed, Nov 9, 2016 at 3:35 AM Mike Hamburg <<a href="mailto:mike@shiftleft.org">mike@shiftleft.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
> On Nov 8, 2016, at 5:23 PM, Ron Garret <<a href="mailto:ron@flownet.com" class="gmail_msg" target="_blank">ron@flownet.com</a>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
><br class="gmail_msg">
> On Nov 8, 2016, at 4:00 PM, Trevor Perrin <<a href="mailto:trevp@trevp.net" class="gmail_msg" target="_blank">trevp@trevp.net</a>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
>> On Mon, Nov 7, 2016 at 12:51 AM, Ben Smith <<a href="mailto:hyperelliptic@gmail.com" class="gmail_msg" target="_blank">hyperelliptic@gmail.com</a>> wrote:<br class="gmail_msg">
>>><br class="gmail_msg">
>>> Here's a rather longish explanation that might be helpful (I hope).<br class="gmail_msg">
>>> It's sort of a geometric complement to Mike's reply on curve shapes.<br class="gmail_msg">
>>> It should really be a link to a blog post, I suppose---but in the<br class="gmail_msg">
>>> absence of a blog, I'm posting it here.<br class="gmail_msg">
>>><br class="gmail_msg">
>>> What I'm aiming to do here is<br class="gmail_msg">
>>> * Connect the Edwards equation with a Weierstrass equation (actually a<br class="gmail_msg">
>>> Montgomery curve);<br class="gmail_msg">
>>> * Show how the usual magic birational map appears in a more natural way;<br class="gmail_msg">
>>> * Resolve Ron's apparent degree-3-vs-degree-4 incompatibility; and<br class="gmail_msg">
>>> * Explain how we can ignore the whole resolution-of-singularities<br class="gmail_msg">
>>> issue by simply never having singularities in the first place.<br class="gmail_msg">
>>><br class="gmail_msg">
>>> (If the geometric language goes over your head, don't worry; there<br class="gmail_msg">
>>> will be variables and equations the whole time to to show what I mean.<br class="gmail_msg">
>><br class="gmail_msg">
>><br class="gmail_msg">
>> Thanks to you and Mike, that's awesome!<br class="gmail_msg">
>><br class="gmail_msg">
>> I wonder what the easiest path is to *learn* the geometric language<br class="gmail_msg">
>> that you and Mike are using, to the point of following along here?<br class="gmail_msg">
>><br class="gmail_msg">
>> A lot of crypto-interested people can roughly understand RSA and DH,<br class="gmail_msg">
>> and would like to understand ECC, but get lost with terms like<br class="gmail_msg">
>> (skimming recent mails):<br class="gmail_msg">
<br class="gmail_msg">
I honestly don’t know!  But, glossary:<br class="gmail_msg">
<br class="gmail_msg">
>> twist<br class="gmail_msg">
<br class="gmail_msg">
A twist TC of some curve C looks different over whatever field F you’re working with, but the same over an algebraically closed field.  That is, C and TC are equivalent under a change of variables, but that change of variables uses a value like sqrt(-1) that’s not actually in the field (but is in some extension field).<br class="gmail_msg">
<br class="gmail_msg">
Therefore TC and C (considered over F) have different sizes and different cryptographic properties.<br class="gmail_msg">
<br class="gmail_msg">
>> torsion<br class="gmail_msg">
<br class="gmail_msg">
An n-torsion point is a point P where nP = 0.  For example, Curve25519 has a 2-torsion point at (0,0).<br class="gmail_msg">
<br class="gmail_msg">
>> homogenous<br class="gmail_msg">
<br class="gmail_msg">
A polynomial or equation is homogeneous if every term has the same degree.  So x^2+1 isn’t homogeneous, but x^2+z^2 is.<br class="gmail_msg">
<br class="gmail_msg">
>> birational<br class="gmail_msg">
<br class="gmail_msg">
A birational map is a 1:1 change of variables.  More specifically it’s a rational function f :: (x,y) -> (x’,y’) where both f and its inverse are (pairs of) ratios of polynomials in x and y.<br class="gmail_msg">
<br class="gmail_msg">
>> isogenies<br class="gmail_msg">
<br class="gmail_msg">
Isogenies are substitutions or changes of variables that aren’t 1:1, but are still defined by ratios of polynomials.<br class="gmail_msg">
<br class="gmail_msg">
For example, if you take any point P on Curve25519, then the x-coordinate of 2P is necessarily square.  Call its square root “s”.  Then there is a curve (a Jacobi quartic)<br class="gmail_msg">
<br class="gmail_msg">
J : t^2 = s^4 + As^2 + 1,<br class="gmail_msg">
<br class="gmail_msg">
where (s,t) -> (x,y) by the map (x=s^2, y=ts).  This is almost an isogeny from J to Curve25519, but not quite, because (at least as traditionally defined) J would have its neutral point at (0,1), and that doesn’t map to Curve25519’s neutral point.  The actual isogeny is basically the same but with an inversion somewhere.<br class="gmail_msg">
<br class="gmail_msg">
Every isogeny \phi has a “dual isogeny” \psi, such that \phi(\psi(P)) = n*P for some fixed n.  Roughly, that n is the “degree" of the isogeny.  The above isogeny is a 2-isogeny, once you fix up the problem with the base point.<br class="gmail_msg">
<br class="gmail_msg">
>> singularities / nonsingular<br class="gmail_msg">
<br class="gmail_msg">
A singularity is a point where the derivative of the curve is not defined.  For example, the graph y^2 = x^3 has a “cusp" at (0,0).  This is why that curve is not considered elliptic.<br class="gmail_msg">
<br class="gmail_msg">
>> affine<br class="gmail_msg">
<br class="gmail_msg">
Not projective.<br class="gmail_msg">
<br class="gmail_msg">
Affine function: a linear function with an offset, eg x,y -> x+3y+7.<br class="gmail_msg">
<br class="gmail_msg">
>> projective (plane, closure, line)<br class="gmail_msg">
<br class="gmail_msg">
Projective line: say you’re talking about the slope of a line.  It could be a real number, or it could be infinity (and +infinity and -infinity are the same: they both mean a vertical line).  The set of possible slopes is the projective line.  More formally, it’s ratios x:z where x and z aren’t both zero, and x:z = x’:z’ if and only if xz’ = x’z.  That is, scaling x and z by the same value gives the same ratio.<br class="gmail_msg">
<br class="gmail_msg">
Projective plane: x:y:z, not all zero, kind of like the projective line.<br class="gmail_msg">
<br class="gmail_msg">
Projective closure: given a curve, add a z-coordinate to make it homogeneous.  Eg y^2 = x^3 + ax + b ==> y^2 z = x^3 + axz^2 + bz^3.  This lets you extend the domain of the curve from the affine plane to the projective plane: it’s now the set of ratios x:y:z (not all zero) where y^2 z = x^3 + axz^2 + bz^3.  It’s important that you made it homogeneous, so that scaling x,y, and z by the same factor won’t change whether the equation holds (it will scale the LHS and RHS by the cube or whatever of the factor).<br class="gmail_msg">
<br class="gmail_msg">
It’s usually more natural to talk about geometric objects like elliptic curves in a projective setting.  Conveniently, it’s also faster to implement them this way.<br class="gmail_msg">
<br class="gmail_msg">
>> genus<br class="gmail_msg">
<br class="gmail_msg">
Ben can explain this one better than I can.  It’s sort of a measure of how complicated a curve is, with genus 0 being a circle or line, genus 1 an elliptic curve, genus 2+ hyperelliptic.<br class="gmail_msg">
<br class="gmail_msg">
Genus is pretty complicated to explain and compute.  For example, the not-quite-elliptic curve y^2 = x^3 has genus 0.<br class="gmail_msg">
<br class="gmail_msg">
>> embedding<br class="gmail_msg">
<br class="gmail_msg">
A function from a smaller object into a larger one that preserves the structure of the smaller object.  For example, a line can be embedded into a plane by mapping it to some line in that plane.<br class="gmail_msg">
<br class="gmail_msg">
> order<br class="gmail_msg">
<br class="gmail_msg">
For groups, and for elliptic curves, the order is the number of elements.<br class="gmail_msg">
<br class="gmail_msg">
But the order of a group element G is the least positive integer n such that nG = 0.  (Written as multiplication, such that G^n = 1.)  Blarg.<br class="gmail_msg">
<br class="gmail_msg">
> cofactor<br class="gmail_msg">
<br class="gmail_msg">
Usually we want to use a group with large prime order q.  If it instead has a composite order h*q, where q is the part we’re using for crypto, then h is the cofactor.<br class="gmail_msg">
<br class="gmail_msg">
> characteristic<br class="gmail_msg">
<br class="gmail_msg">
Of a field: the number of times you have to add 1 to itself to get 0.  For F(p) where p is prime, this is just p.  But there are also eg binary fields GF(2^n), which have characteristic 2, and GF(3^n) etc.  (GF stands for Galois Field; sometimes just written F(2^n).)<br class="gmail_msg">
<br class="gmail_msg">
> trace of frobenius<br class="gmail_msg">
<br class="gmail_msg">
This is just p+1-#E, where #E is the order of the curve and p is the order of the underlying field.  It’s called that because in algebraic geometry it’s the “trace" of a map called the Frobenius map.  The reason behind the name isn’t important for most purposes, but it becomes clear when you try to compute #E.<br class="gmail_msg">
<br class="gmail_msg">
> Another thing that has been driving me nuts for years is Theorem 2.1 in the Curve25519 paper.  I understand what it *says* but I still don’t understand what it *means*.<br class="gmail_msg">
<br class="gmail_msg">
It means that Curve25519 is symmetric with a reflection across the x-axis.  The scalarmul map P -> nP preserves the symmetry.  Also, the trick of representing infinity by 0 works, because any scalar times either of those points is still 0 or infinity.  This means that x-only scalar multiplication is well-defined.<br class="gmail_msg">
<br class="gmail_msg">
> rg<br class="gmail_msg">
<br class="gmail_msg">
Cheers,<br class="gmail_msg">
— Mike_______________________________________________<br class="gmail_msg">
Curves mailing list<br class="gmail_msg">
<a href="mailto:Curves@moderncrypto.org" class="gmail_msg" target="_blank">Curves@moderncrypto.org</a><br class="gmail_msg">
<a href="https://moderncrypto.org/mailman/listinfo/curves" rel="noreferrer" class="gmail_msg" target="_blank">https://moderncrypto.org/mailman/listinfo/curves</a><br class="gmail_msg">
</blockquote></div></div>