Быстрое экспонирование для полей галуа
Я хочу быть в состоянии вычислить
g^x = g * g * g * ... * g (x times)
где g находится в конечном поле GF(2^m). Здесь m довольно большое, m = 256, 384, 512 и т. Д., Поэтому таблицы поиска не являются решением. Я знаю, что есть действительно быстрые алгоритмы для аналогичной идеи, modpow для Z/nZ (см. Страницу 619-620 HAC).
- Что такое быстрый, не основанный на таблицах способ вычисления циклов (т. Е. G ^x)?
- Это, безусловно, желательный вопрос, но здесь он возникает: может ли идея " умножения / возведения в степень Монтгомери" быть "переработана" на месторождения Галуа? Я хотел бы думать так из-за изоморфных свойств, но я действительно не знаю.
Замечание: это из моего поста на math.stackru.com. Полагаю, это лучшее сообщество, чтобы задать этот вопрос.
1 ответ
Из сообщества по обмену математическими стеками у меня было два человека, которые предложили Binary Exponentiaion. Википедия утверждает, что это рекурсивный алгоритм. Его можно изменить на итеративный алгоритм, как показано в псевдокоде вики.
Сначала я нахмурился над этой идеей, но я больше изучил ее и нашел две статьи ( 1, 2), которые могут помочь реализовать двоичное возведение в степень в полях Галуа, использующих умножение Монтгомери.
Кроме того, Per Hornshøj-Schierbeck предложил использовать нормальные основания (или когда m =/= 256,384, 512 и т. Д. Оптимальные нормальные основания) для ускорения умножения. Алгоритмы для этого метода умножения можно найти в этой статье.
Спасибо Сарнольду за его вклад.