В свою очередь, сама кривая основана на схеме подписи Ed25519. Несмотря на то, что используется не изменённая версия кривой, в остальном Monero не совсем следует схеме Ed25519.
Кривая edwards25519 ирационально эквивалентна кривой Curve25519.
Это стандартное определение кривой edwards25519, и тут нет ничего специфичного для Monero, кроме согласованных названий. Согласованные названия взяты из документа CryptoNote и широко используются в литературе по Monero.
−x^2 + y^2 = 1 − (121665/121666) * x^2 * y^2
Примечание:
Кривая является двумерной (ничего особенного, как и все кривые, которые изучались в средней школе).
Кривая отражается ниже оси y из-за y^2
части уравнения (не является полиномом).
G
Базовой точкой является определённая точка на кривой, используемая в качестве основы для дальнейших вычислений. Она произвольно выбирается авторами кривой просто для стандартизации схемы.
Следует отметить, что в данном случае достаточно указать значение y и знак значения x, так как определённый x может быть вычислен при помощи уравнения кривой.
G = (x, 4/5) # берётся точка с положительным x
# Шестнадцатеричное представление базовой точки:
5866666666666666666666666666666666666666666666666666666666666666
l
С точки зрения расположения «полотно», на котором рисуется кривая, должно иметь конечное «разрешение», таким образом, координаты точки должны «обёртываться» в некоторой точке.
Это достигается за счёт значения по модулю l
(L в нижнем регистре). Другими словами, l
определяет максимальную скалярную величину, которую мы можем использовать.
l = 2^252 + 27742317777372353535851937790883648493
# => 7237005577332262213973186563042994240857116359379907606001950938285454250989
l
является простым числом, которое указывают авторы кривой.
На практике оно обозначает надёжность приватного ключа.
Общее количество точек на кривой также обозначается простым числом:
q = 2^255 - 19
На практике не все точки являются «полезными», поэтому надёжность приватного ключа ограничивается l
, как было указано выше.
Monero использует (очевидно, изменённый) вариант реализации Ref10, предложенный Дэниелом Дж. Бернштейном (Daniel J. Bernstein).