Для удвоения очков (ссылка вики) требуется Z^4
и при использовании с алгоритмом двойного сложения (необходимым для вычисления общедоступных точек, ECDH и подписей на основе EC) с использованием $Z=1$ упрощает расчет Z^4
в противном случае может потребоваться 3 удвоения. Метод двойного сложения, при котором разрешение
не фиксируется для экономии времени. Удвойте и добавьте Википедию версия;
let bits = bit_representation(s) # вектор битов (от MSB до LSB), представляющий s
let res = O # точка в бесконечности
для бит в битах:
res = res + res # двойной
если бит == 1:
res = res + P # добавить
я = я - 1
вернуть разрешение
Это начало длинной истории. "м-кратное двойное" (повторное удвоение) вычисляет $[2^м]P$ и только вычисляет Z^4
однажды. Когда ты нуждаешься $[к]П$, вам может потребоваться представить $к$ в двоичной форме, затем при необходимости используйте m-кратное удвоение. Чтобы извлечь из этого выгоду, нужно рассчитать стоимость, прежде чем решить, использовать m-fold double или нет.
Ответ не является простым и полным, поскольку Вот этот требует Z1=Z2
с 5М + 2С
для дополнения версия Wiki имеет 12М + 4С
Стоимость. 5М + 2С
все еще Z1
умножение и если Z1=1
что имеет нулевую стоимость.
Короче говоря, в общем, Z1=1
упрощает уравнения.
С $(X_1:Y_1:Z_1)$ представляет собой $(Z/Z^2,Y/Z^3)$ и $(X_1:Y_1:Z_1)$ является отношением эквивалентности, которое $$(X_1:Y_1:Z_1) \sim (\лямбда X_1:\лямбда Y_1:\лямбда Z_1)$$ можно просто преобразовать $Z_1 =1$ с $$(X_1/Z_1:Y_1/Z_1:1)$$
Имейте в виду, что 1/Z1
это не деление, а обратное Z1
на определяющем поле.
Z1
с другой стороны, не остается там с Z1=1
под операции. Чтобы воспользоваться этим, нужно найти обратное и выполнить два умножения. С другой стороны, поиск обратного — это то, чего мы не хотим, поскольку это дорого.
Итак, по крайней мере, есть преимущество в начале скалярного умножения.