Реальная история.
Я изучаю использование Bitcoin в частных / открытых ключах и ECDSA, и я немного запутались в данный момент о том, когда использовать моды (р) по сравнению с модами (п).
Например, при выполнении умножения точки EC (то есть, чтобы вычислить Q = D * G), являются координаты точки по модулю р?
Все моды (р) при выполнении умножения точки, которая включает в себя дополнение, вычитание (отрицания), умножений, возведения в квадрат и деление (умножение на обратном) все мод (р). Инверсия особенно дорого, поэтому он является общим методом для проецирования точек в Якобиан координаты для устранения подразделений, необходимых в процессе промежуточной арифметики поля (моды (р) вещь) с последующей окончательной инверсией, чтобы преобразовать ответ обратно в аффинные координаты , Основная причиной я упомянуть, что является одним из наиболее популярных методов для выполнения инверсии мод (р) является использование расширенного алгоритма Евклида, который по существу повторно вычислений последовательно меньших остатков (т.е. модульного арифметическим с произвольными характеристиками). Таким образом, в то время как общий ответ при выполнении инверсии мод (р), фактические промежуточные этапы расчета мультипликативного обратного помощью расширенного алгоритма Евклида, по существу являются моддинг с другими номерами.
Что-нибудь когда-нибудь по модулю п?
Да, моды (п) используются при генерации подписи и верификации. В частности, проверка подписи включает вычисление мультипликативной инверсии составляющей «S» в моде подписи (п) и формирования подписи включает вычисление мультипликативной инверсии закрытого ключа мод (п). Имейте в виду, что само по себе частный ключ является полем элемент Fp (то есть это значение в диапазоне [1, по модулю (р) -1]).
И хотя на эту тему, может кто-то объяснить цель р (как в Fp) и п (как в "порядок п точки генератора G", Но это описание немного потерял на меня ...)? Если мы никогда не должны использовать моды (п), то р имеет смысл как число элементов в поле, но как только моды (п) используются, кажется, что существует целый ряд чисел в Fp, которые не являются используемый.
Как я указывал выше, все базовой арифметики, необходимой для выполнения умножения (точка и точка удвоения) является мод (р). Мод (п) происходит только при генерации подписи и верификации.
Цель р является обеспечение конечного поля. Например, давайте использовать некоторые маленькие цифры и модифицированную версию эллиптического уравнения кривой, чтобы проиллюстрировать концепцию. Давайте предположим, что простое составляет 11, базовая точка G представляет собой (4, 3) и эллиптическое уравнение кривой у ^ 2 = х ^ 3 + 0. Это порождает следующие моменты (по модулю 11):
(4, 3), (8, 6), (1, 9), (5, 1), (9, 4), (2, 7), (6, 10), (10, 2), (3 , 5), (7, 8), (0, 0)
Однако напомним, что эллиптическое уравнение кривой мы выбрали для этого примера: у ^ 2 = х ^ 3 + 0
Таким образом, только точки, которые на самом деле на кривой (по модулю 11) (4, 3) и (0, 0). Следовательно, "порядок п точки генератора G" в этом случае 2. Обратите внимание, что порядок не является простым в этом случае тоже, так что помимо того, что цифры настолько малы, что бы тривиален грубую силу, они не были бы хорошие параметры для выбора.
Если вы хотите, чтобы увидеть код, который реализует secp256k1 с комментариями, не стесняйтесь, чтобы взглянуть на
https://github.com/conformal/btcec/ который является одним из основных пакетов из
https://github.com/conformal/btcd.