В криптосистемах вопроса нет замены модульному умножению. Некоторые языки, такие как Python, упрощают это в образовательных целях. Только.
В RSA и DSA и, в меньшей степени, в криптографии ECC на secp256k1 или же секп256р1, нужно вычислить $b^e\bmod м$ для больших $е$. Самые быстрые алгоритмы (например, скользящее окно возведения в степень) выступать о $\log_2 е$ модульное возведение в квадрат и тому подобное $\приблизительно0.2\,\log_2 e$ модульные умножения. Однако существуют и другие алгоритмы, лишь незначительно более дорогостоящие (например, Лестница Монтгомери), что может быть лучше с точки зрения защиты от побочных каналов.
Каждое модульное умножение или возведение в квадрат по модулю $м$, для приведенного выше или (в ECC) сложения или умножения точек на скаляр, вычислительные затраты растут не более чем как $(\лог м)^2$ при использовании алгоритмов, изученных в начальной школе, адаптированных к компьютерным словам вместо цифр. Это может быть снижено до $ (\ журнал м) ^ {\ приблизительно1.6} $ с Карацуба или же $ (\ журнал м) ^ {\ приблизительно 1,5} $ с Тоом-3, но в ECC модуль $м$ не настолько велик, чтобы много платить ($м$ это «всего» несколько сотен бит в ECC, а не несколько тысяч в RSA/DSA).
При разработке подписи или шифрования с использованием secp256k1 или же секп256р1 с нуля в образовательных целях обычно есть этапы:
- Получение чего-то, что работает, путем создания сложение и удвоение точек в декартовых координатах поверх модульного умножения, затем точечное умножение, затем подпись и/или шифрование.
- Заставьте его работать намного быстрее, используя лучшее представление точки, например. проективные координаты (что позволяет отложить дорогостоящую модульную инверсию до конца умножения точек)
- Заставить его работать безопасно, что очень сложно и обычно требует переписывания многих вещей с нуля.
- Оптимизация производительности.Это можно делать на любом этапе, но задумайтесь над высказыванием «преждевременная оптимизация — корень всех зол».
Некоторые онлайн-ссылки на модульное умножение и возведение в степень (не ECC):