Думаю, что по модулям отличным от 2192-264-1 эллиптические кривые будут работать весьма не быстро. Хотя и быстрее RSA, где все то же самое, но числа длиннее.
в общем-то, это не сильно критично, так как всё равно мы работаем с 384 битами вместо 4096 — что означает отличие на несколько порядков в экспоненциальном смысле.
Колебался между G, которая фигурирует в американском стандарте и P, которую используют в описании ГОСТ, но потом подумал, что в битве за потенциального читателя все средства хороши:)
Может, я не до конца разобрался (признаюсь, код не запускал еще), но снова повторюсь. При просмотре кода я не заметил нейтрального элемента. Мы работаем в дискретном поле, и он нам нужен. Ведь существует ненулевая вероятность, что при какой-то итерации будет ситуация, в которой должно произойти сложение точек: P + (-P) =О
Исходя из теории, результатом должна стать как раз-таки особая точка. Аналогично для P + O = P.
Это, в принципе, можно было и не брать во внимание, если бы была оговорка, что секретный ключ d — это число меньше порядка подгруппы (n), образованной точкой G порождающим элементом G. Об этом, кстати говоря, в самом ГОСТе сказано. А в общем случае, ничто не мешает мне выбрать в качестве d случайное число и больше n, тогда подгруппа пробежит по всем элементам (включая О) и остановится где-то на «втором круге». Это не есть хорошо, так как секретный ключ будет небольшого порядка и может быть подвержен перебору. Так что ГОСТ рулит :)
:)
В коде у Вас он действительно меньше порядка подгруппы, образованной G. Но это ваш секретный ключ :)
Была бы это лаба студента, а я был бы проверяющим ее, то не удержался бы от того, чтобы попробовать ключик побольше))
А статья серия статей мне понравилась. Очень доступно излагаете, так держать, жду продолжения ;)
Эллиптическая криптография: практика