Improvements to background section:

* describe groups in general, rather than via the example of F_p^*
* explain the isomorphism between group elements and scalars, and how it is useful
* corrections and pedantry :-)

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira Hopwood 2021-01-30 01:43:24 +00:00
parent 723ea8feac
commit cda768aa00
2 changed files with 95 additions and 32 deletions

View file

@ -1,6 +1,10 @@
# Elliptic curves # Elliptic curves
Elliptic curves constructed over finite fields are another important cryptographic tool. Elliptic curves constructed over finite fields are another important cryptographic tool.
We use elliptic curves because they provide a cryptographic [group](fields.md#Inverses_and_groups),
i.e. a group in which the [discrete logarithm problem](fields#) is hard.
There are several ways to define the curve equation, but for our purposes, let There are several ways to define the curve equation, but for our purposes, let
$\mathbb{F}_p$ be a large (255-bit) field, and then let the set of solutions $(x, y)$ to $\mathbb{F}_p$ be a large (255-bit) field, and then let the set of solutions $(x, y)$ to
$y^2 = x^3 + b$ for some constant $b$ define the $\mathbb{F}_p$-rational points on an $y^2 = x^3 + b$ for some constant $b$ define the $\mathbb{F}_p$-rational points on an
@ -19,10 +23,10 @@ handling: we find the line tangent to the point, and then find the single other
intersects this line and then negate. Otherwise, in the event that a point is being intersects this line and then negate. Otherwise, in the event that a point is being
"added" to its negation, the result is the point at infinity. "added" to its negation, the result is the point at infinity.
The ability to add and double points naturally gives us a way to scale them by integers. The ability to add and double points naturally gives us a way to scale them by integers,
The number of points on the curve is known as the "group order". If this number is prime called _scalars_. The number of points on the curve is the group order. If this number
$q$, we call the numbers that we scale curve points by "scalars" and consider that they is a prime $q$, then the scalars can be considered as elements of a _scalar field_,
are all elements of a scalar field $\mathbb{F}_q$. $\mathbb{F}_q$.
Elliptic curves, when properly designed, have an important security property. Given two Elliptic curves, when properly designed, have an important security property. Given two
random elements $G, H \in E(\mathbb{F}_p)$ finding $a$ such that $[a] G = H$, otherwise random elements $G, H \in E(\mathbb{F}_p)$ finding $a$ such that $[a] G = H$, otherwise
@ -30,6 +34,29 @@ known as the discrete log of $H$ with respect to $G$, is considered computationa
infeasible with classical computers. This is called the elliptic curve discrete log infeasible with classical computers. This is called the elliptic curve discrete log
assumption. assumption.
If an elliptic curve group $\mathbb{G}$ has prime order $q$ (like the ones used in Halo),
then it is a finite cyclic group. Recall from the section on [groups](fields.md#Groups)
that this implies it is isomorphic to $\mathbb{Z}/q\mathbb{Z}$, or equivalently, to the
scalar field $\mathbb{F}_q$. Each possible generator $G$ fixes the isomorphism; then
an element on the scalar side is precisely the discrete log of the corresponding group
element with respect to $G$. In the case of a cryptographically secure elliptic curve,
the isomorphism is hard to compute in the $\mathbb{G} \rightarrow \mathbb{F}_q$ direction
because the elliptic curve discrete log problem is hard.
> It is sometimes helpful to make use of this isomorphism by thinking of group-based
> cryptographic protocols and algorithms in terms of the scalars instead of in terms of
> the group elements. This can make proofs and notation simpler.
>
> For instance, it has become common in papers on proof systems to use the notation $[x]$
> to denote a group element with discrete log $x$, where the generator is implicit.
>
> We also used this idea in the
> "[distinct-x theorem](https://zips.z.cash/protocol/protocol.pdf#thmdistinctx)",
> in order to prove correctness of optimizations
> [for elliptic curve scalar multiplication](https://github.com/zcash/zcash/issues/3924)
> in Sapling, and an endomorphism-based optimization in Appendix C of the original
> [Halo paper](https://eprint.iacr.org/2019/1021.pdf).
## Curve arithmetic ## Curve arithmetic
### Point doubling ### Point doubling
@ -37,7 +64,7 @@ assumption.
The simplest situation is doubling a point $(x_0, y_0)$. Continuing with our example The simplest situation is doubling a point $(x_0, y_0)$. Continuing with our example
$y^2 = x^3 + b$, this is done first by computing the derivative $y^2 = x^3 + b$, this is done first by computing the derivative
$$ $$
\lambda = \frac{dy}{dx} = \frac{3x^2}{2y}. \lambda = \frac{\mathrm{d}y}{\mathrm{d}x} = \frac{3x^2}{2y}.
$$ $$
To obtain expressions for $(x_1, y_1) = (x_0, y_0) + (x_0, y_0),$ we consider To obtain expressions for $(x_1, y_1) = (x_0, y_0) + (x_0, y_0),$ we consider

View file

@ -37,22 +37,23 @@ Important notes:
versa. We could also use whether or not an element is larger than $(p - 1) / 2$ to give versa. We could also use whether or not an element is larger than $(p - 1) / 2$ to give
it a "sign." it a "sign."
## Inverses and groups Finite fields will be useful later for constructing [polynomials](polynomials.md) and
[elliptic curves](curves.md). Elliptic curves are examples of groups, which we discuss
next.
Any non-zero element $a \in \mathbb{F}_p$ has a _multiplicative inverse_ $b = a^{-1}$, ## Groups
which is the _unique_ element $b$ such that $ab = 1$.
A quick way of obtaining the inverse is $a^{-1} = a^{p - 2}$. The reason for this stems Groups are simpler and more limited than fields; they have only one binary operator $\cdot$
from [Fermat's little theorem][fermat-little], which states that $a^p = a \pmod p$ for any and fewer axioms. They also have an identity, which we'll denote as $1$.
integer $a$. If $a$ is nonzero, we can divide by $a$ twice to get $a^{p-2} = a^{-1}.$
[fermat-little]: https://en.wikipedia.org/wiki/Fermat%27s_little_theorem [group]: https://en.wikipedia.org/wiki/Group_(mathematics)
[group-axioms]: https://en.wikipedia.org/wiki/Group_(mathematics)#Definition
Any non-zero element $a$ in a group has an _inverse_ $b = a^{-1}$,
which is the _unique_ element $b$ such that $a \cdot b = 1$.
However, it may be more intuitive to understand the set of nonzero elements of For example, the set of nonzero elements of $\mathbb{F}_p$ forms a group, where the
$\mathbb{F}_p$ as a [group], where the group operation is given by multiplication on the group operation is given by multiplication on the field.
field. We use the notation $\mathbb{F}_p^\times$ for the multiplicative group over the set
$\mathbb{F}_p - \{0\}$. Groups are simpler and more limited than fields; they
have only _one_ operator $\cdot$ and fewer axioms.
[group]: https://en.wikipedia.org/wiki/Group_(mathematics) [group]: https://en.wikipedia.org/wiki/Group_(mathematics)
@ -60,9 +61,9 @@ have only _one_ operator $\cdot$ and fewer axioms.
> If $\cdot$ is written as $+$ and the identity as $0$ or $\mathcal{O}$, then we say the > If $\cdot$ is written as $+$ and the identity as $0$ or $\mathcal{O}$, then we say the
> group is "written additively". If $\cdot$ is written as $\times$ or omitted (i.e. > group is "written additively". If $\cdot$ is written as $\times$ or omitted (i.e.
> $a \cdot b$ written as $ab$) and the identity as $1$, then we say it is "written > $a \cdot b$ written as $ab$) and the identity as $1$, then we say it is "written
> multiplicatively". It's conventional to use additive notation for > multiplicatively". It's conventional to use additive notation for elliptic curve
> [elliptic curve groups](curves.md), and multiplicative notation when (as in this case) > groups, and multiplicative notation when the elements come from a finite field.
> the elements come from a finite field. When additive notation is used, we also write > When additive notation is used, we also write
> >
> $$[k] A = \underbrace{A + A + \cdots + A}_{k \text{ times}}$$ > $$[k] A = \underbrace{A + A + \cdots + A}_{k \text{ times}}$$
> >
@ -77,20 +78,53 @@ have only _one_ operator $\cdot$ and fewer axioms.
> scalars to negative integers by inversion, i.e. $[-k] A + [k] A = \mathcal{O}$ or > scalars to negative integers by inversion, i.e. $[-k] A + [k] A = \mathcal{O}$ or
> $a^{-k} \times a^k = 1$. > $a^{-k} \times a^k = 1$.
The _order_ of a group element $a$ is defined (in multiplicative notation) as the smallest The _order_ of an element $a$ of a finite group is defined (in multiplicative notation)
positive integer $k$ such that $a^k = 1$. as the smallest positive integer $k$ such that $a^k = 1$. The order _of the group_ is
the number of elements, which (for finite groups) is also the maximum order of any element.
Groups always have [generators] which are elements that, when the group operation is Groups always have [generators] which are elements that, when the group operation is
applied repeatedly with the same element some number of times, produce every other element applied repeatedly with the same element some number of times, produce every other element
of the group. That is, a generator has maximal order, which we also call the order of the of the group. That is, a generator has maximal order, which we also call the order of the
group. group. There can be many different generators.
[generators]: https://en.wikipedia.org/wiki/Generating_set_of_a_group [generators]: https://en.wikipedia.org/wiki/Generating_set_of_a_group
There can be many different generators. Let's assume that $\alpha$ is a generator of A group is called [cyclic] if the whole group can be generated by a (not necessarily
$\mathbb{F}_p^\times$, so it has order $p-1$ (equal to the number of elements in unique) single element.
$\mathbb{F}_p^\times$). Therefore, for any element in $a \in \mathbb{F}_p^\times$ there is
a unique integer $i \in \{0..p-2\}$ such that $a = \alpha^i$. Any finite cyclic group $\mathbb{G}$ of order $n$ is [isomorphic] to the integers
modulo $n$ (denoted $\mathbb{Z}/n\mathbb{Z}$), such that:
- the operation $\cdot$ in $\mathbb{G}$ corresponds to addition modulo $n$;
- the identity $\mathcal{O} \in \mathbb{G}$ corresponds to $0$;
- some generator $G \in \mathbb{G}$ corresponds to $1$.
Given a generator $G$, the isomorphism is always easy to compute in the
$\mathbb{Z}/n\mathbb{Z} \rightarrow \mathbb{G}$ direction; it is just $a \mapsto [a] G$.
It may be difficult in general to compute in the $\mathbb{G} \rightarrow \mathbb{Z}/n\mathbb{Z}$
direction; we'll discuss this further when we come to [elliptic curves](curves.md).
If the order $n$ of a finite group is prime, then the group is cyclic, and every
non-identity element is a generator.
[isomorphic]: https://en.wikipedia.org/wiki/Isomorphism
[cyclic]: https://en.wikipedia.org/wiki/Cyclic_group
### The multiplicative group of a finite field
We use the notation $\mathbb{F}_p^\times$ for the multiplicative group (i.e. the group
operation is multiplication in $\mathbb{F}_p$) over the set $\mathbb{F}_p - \{0\}$.
A quick way of obtaining the inverse in $\mathbb{F}_p^\times$ is $a^{-1} = a^{p - 2}$.
The reason for this stems from [Fermat's little theorem][fermat-little], which states
that $a^p = a \pmod p$ for any integer $a$. If $a$ is nonzero, we can divide by $a$ twice
to get $a^{p-2} = a^{-1}.$
[fermat-little]: https://en.wikipedia.org/wiki/Fermat%27s_little_theorem
Let's assume that $\alpha$ is a generator of $\mathbb{F}_p^\times$, so it has order $p-1$
(equal to the number of elements in $\mathbb{F}_p^\times$). Therefore, for any element in
$a \in \mathbb{F}_p^\times$ there is a unique integer $i \in \{0..p-2\}$ such that $a = \alpha^i$.
Notice that $a \times b$ where $a, b \in \mathbb{F}_p^\times$ can really be interpreted as Notice that $a \times b$ where $a, b \in \mathbb{F}_p^\times$ can really be interpreted as
$\alpha^i \times \alpha^j$ where $a = \alpha^i$ and $b = \alpha^j$. Indeed, it holds that $\alpha^i \times \alpha^j$ where $a = \alpha^i$ and $b = \alpha^j$. Indeed, it holds that
@ -107,17 +141,19 @@ so $a^{p - 2} = a^{-1}$.
### Montgomery's Trick ### Montgomery's Trick
Montgomery's trick, named after Peter Montgomery (RIP) is a way to compute many field Montgomery's trick, named after Peter Montgomery (RIP) is a way to compute many group
inversions at the same time. Imagine we need to compute the inverses of three nonzero inversions at the same time. It is commonly used to compute inversions in
elements $a, b, c \in \mathbb{F}_p$. Instead, we'll compute the products $x = ab$ and $\mathbb{F}_p^\times$, which are quite computationally expensive compared to multiplication.
$y = xc = abc$, and compute the inversion
Imagine we need to compute the inverses of three nonzero elements $a, b, c \in \mathbb{F}_p^\times$.
Instead, we'll compute the products $x = ab$ and $y = xc = abc$, and compute the inversion
$$z = y^{p - 2} = \frac{1}{abc}.$$ $$z = y^{p - 2} = \frac{1}{abc}.$$
We can now multiply $z$ by $x$ to obtain $\frac{1}{c}$ and multiply $z$ by $c$ to obtain We can now multiply $z$ by $x$ to obtain $\frac{1}{c}$ and multiply $z$ by $c$ to obtain
$\frac{1}{ab}$, which we can then multiply by $a, b$ to obtain their respective inverses. $\frac{1}{ab}$, which we can then multiply by $a, b$ to obtain their respective inverses.
This technique generalizes to arbitrary numbers of field elements with just a single This technique generalizes to arbitrary numbers of group elements with just a single
inversion necessary. inversion necessary.
## Multiplicative subgroups ## Multiplicative subgroups