2020-11-19 13:53:07 -08:00
|
|
|
Pallas/Vesta supporting evidence
|
|
|
|
--------------------------------
|
2019-09-08 08:23:57 -07:00
|
|
|
|
|
|
|
This repository contains supporting evidence that the amicable pair of
|
|
|
|
prime-order curves:
|
|
|
|
|
2020-11-19 13:53:07 -08:00
|
|
|
* Ep : y^2 = x^3 + 5 over GF(p) of order q, called Pallas;
|
|
|
|
* Eq : y^2 = x^3 + 5 over GF(q) of order p, called Vesta;
|
2019-09-08 08:23:57 -07:00
|
|
|
|
|
|
|
with
|
|
|
|
|
2020-11-19 13:53:07 -08:00
|
|
|
* p = 2^254 + 45560315531419706090280762371685220353
|
|
|
|
* q = 2^254 + 45560315531506369815346746415080538113
|
2019-09-08 08:23:57 -07:00
|
|
|
|
|
|
|
satisfy *some* of the [SafeCurves criteria](https://safecurves.cr.yp.to/index.html).
|
|
|
|
|
|
|
|
The criteria that are *not* satisfied are, in summary:
|
|
|
|
|
2020-02-18 00:43:20 -08:00
|
|
|
* large-magnitude CM discriminant (both curves have CM discriminant of absolute value 3,
|
|
|
|
as a consequence of how they were constructed);
|
2019-09-08 08:23:57 -07:00
|
|
|
* completeness (complete formulae are possible, but not according to the Safe curves
|
|
|
|
criterion);
|
|
|
|
* ladder support (not possible for prime-order curves);
|
|
|
|
* Elligator 2 support (indistinguishability is possible using
|
2020-11-19 13:53:07 -08:00
|
|
|
[Elligator Squared](https://ifca.ai/pub/fc14/paper_25.pdf), but not using Elligator 2);
|
|
|
|
* twist security above 100 bits for Pallas.
|
2017-11-01 22:52:36 -07:00
|
|
|
|
2020-11-19 13:53:07 -08:00
|
|
|
Pallas/Vesta is the first cycle output by
|
|
|
|
``sage amicable.sage --sequential --requireisos --sortpq --ignoretwist --nearpowerof2 255 32``.
|
2019-09-17 03:28:59 -07:00
|
|
|
|
|
|
|
(The `--sequential` option makes the output completely deterministic and so resolves
|
|
|
|
ambiguity about which result is "first". For exploratory searches it is faster not to
|
|
|
|
use `--sequential`.)
|
2019-09-12 08:01:16 -07:00
|
|
|
|
2017-11-01 22:52:36 -07:00
|
|
|
Prerequisites:
|
|
|
|
|
2020-11-27 01:35:53 -08:00
|
|
|
* ``apt-get install sagemath``
|
2017-11-01 22:52:36 -07:00
|
|
|
|
2019-09-08 08:23:57 -07:00
|
|
|
Run ``sage verify.sage Ep`` and ``sage verify.sage Eq``; or ``./run.sh`` to run both
|
|
|
|
and also print out the results.
|
2020-09-26 13:43:31 -07:00
|
|
|
|
2020-11-19 13:53:07 -08:00
|
|
|
The output of ``amicable.sage`` with the above options includes isogenies of degree 3,
|
|
|
|
suitable for use with the "simplified SWU" method for hashing to an elliptic curve.
|
|
|
|
This is based on code from Appendix A of [Wahby and Boneh 2019](https://eprint.iacr.org/2019/403.pdf).
|
2020-11-22 17:24:03 -08:00
|
|
|
|
|
|
|
To check the correctness of the endomorphism optimization described in the Halo paper, run
|
|
|
|
``python3 injectivitylemma.py`` and ``python3 checksumsets.py``. To also generate animations
|
|
|
|
showing the minimum distances between multiples of ζ used in the proof, run ``./animation.sh``.
|
|
|
|
|
|
|
|
``animation.sh`` has the following prerequisites:
|
|
|
|
|
2020-11-27 01:35:53 -08:00
|
|
|
* ``apt-get install ffmpeg ffcvt``
|
|
|
|
* ``pip3 install bintrees Pillow``
|
2020-11-22 17:24:03 -08:00
|
|
|
|
|
|
|
``checksumsets.py`` on its own only requires the ``bintrees`` Python package.
|