Обратное по модулю число

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Обратное по модулю целого a — это такое целое число x, что произведение ax сравнимо с 1 по модулю m[1]. В стандартных обозначениях модульной арифметики эта эквивалентность записывается как:

что является сокращённым способом записи утверждения, что m делит (без остатка) величину ax − 1, или, выражаясь другим способом, остаток от деления ax на целое m равен 1. Если a имеет обратный по модулю m, то имеется бесконечное количество решений этой эквивалентности, которые образуют класс вычетов для этого модуля. Более того, любое целое, которое эквивалентно a (то есть из класса эквивалентности a) будет иметь любой элемент класса эквивалентности x в качестве обратного элемента. Используя обозначения для класса эквивалентности, содержащего , утверждение выше может быть записано следующим образом: обратный элемент по модулю класса эквивалентности есть класс эквивалентности , такой что

где символ означает умножение классов эквивалентности по модулю m[2]. Такой вид записи представляет аналог обычной концепции обратного числа в множестве рациональных или вещественных чисел, если заменить числа классами эквивалентности и должным образом определения бинарных операций.

Фундаментальное использование этой операции — решение линейной эквивалентности вида:

Нахождение модульного обратного имеет практическое приложение в области криптографии, например, криптосистема с открытым ключом и алгоритм RSA [3][4][5]. Преимущество для реализации этих приложений в том, что существует очень быстрый алгоритм (расширенный алгоритм Евклида), который может быть использован для вычисления модульных обратных.

Модульная арифметика[править | править код]

Говорят, что для данного положительного числа m два целых числа a и b сравнимы по модулю m, если m делит их разность. Это бинарное отношение обозначается как

Это является отношением эквивалентности на множестве целых чисел , и классы эквивалентности называются классами вычетов по модулю m. Пусть означает класс эквивалентности, содержащий целое число a[6], тогда

Линейное сравнение — это сравнение по модулю вида

В отличие от линейных уравнений в целых числах, линейное сравнение может иметь нуль, одно или несколько решений. Если x является решением линейного сравнения, то любой элемент из также является решением, так что, если говорится о количестве решений линейного сравнения, подразумевается количество различных классов эквивалентности, которые содержат эти решения.

Если d является наибольшим общим делителем чисел a и m, то линейное сравнение имеет решения тогда и только тогда, когда d делит b. Если d делит b, то существует ровно d решений[7].

Модульное обратное целого числа a по модулю m — это решение линейного сравнения

Ранее говорилось, что решение существует тогда и только тогда, когда наибольший общий делитель a и m равен 1, то есть a и m должны быть взаимно простыми числами. Более того, если это условие выполняется, существует ровно одно решение, то есть, если решение существует, модульное обратное единственно[8].

Если имеет решение, оно обозначается часто следующим образом

однако это можно считать злоупотреблением[en], поскольку может неверно интерпретироваться как обычное обратное числа (которое, в отличие от модульного обратного, не является целым за исключением случаев, когда a равно 1 или -1). Обозначение было бы приемлемым, если бы a интерпретировался как обозначение для класса вычетов , поскольку обратный элемент класса вычетов снова является классом вычетов с операцией умножения, определённой в следующем разделе.

Целые по модулю m[править | править код]

Отношение эквивалентности по модулю m разбивает множество целых чисел на m классов эквивалентности. Операции сложения и умножения можно определить на этих объектах следующим образом: для сложения или умножения классов эквивалентности сначала любым способом выбираются представители этих классов, затем осуществляется обычная операция над отобранными целыми числами и, наконец, результат операции лежит в классе вычетов, являющемся результатом операции над классами. В символической форме, с и представляющими операции над классами вычетов, эти определения можно записать как

и

Эти операции вполне определены (что означает, что конечный результат не зависит от выбора представителей).

Классы вычетов по m с этими двумя операциями образуют кольцо, называемое кольцом целых чисел по модулю m. Имеется несколько обозначений, используемых для этих алгебраических объектов, наиболее часто используется или , однако некоторые элементарные учебники и приложения используют упрощённое обозначение , если не возникает противоречие с другими алгебраическими объектами.

Классы вычетов целых чисел по модулю m были традиционно известны как классы остатков по модулю m, что отражает факт, что все элементы класса эквивалентности имеют один и тот же остаток от деления на m. Любое множество из m целых, выбранных из разных классов вычетов по модулю m называется полной системой вычетов по модулю m[9]. Деление столбиком показывает, что множество целых чисел {0, 1, 2, ..., m − 1} образуют полную систему вычетов по модулю m, известную как наименьшая система вычетов по модулю m. При работе с арифметическими задачами иногда удобнее работать с полной системой вычетов и использовать язык эквивалентности, в то время как в других случаях более удобен взгляд с точки зрения классов эквивалентности кольца [10].

Мультипликативная группа кольца вычетов[править | править код]

Не всякий элемент полной системы вычетов по модулю m имеет обратный элемент, например, нуль обратного не имеет. После удаления элементов полной системы вычетов, что не взаимно просты с m, оставшиеся элементы, которые называются приведённой системой вычетов, все имеют обратные. Число элементов в приведённой системе вычетов равно , где есть функция Эйлера, то есть количество положительных целых чисел меньших m, которые взаимно просты с m.

В кольце с единицей общего вида не всякий элемент имеет обратный, а те, что имеют, называются обратимыми. Поскольку произведение обратимых элементов обратимо, обратимые элементы кольца образуют группу, группу обратимых элементов кольца, и эта группа часто обозначается как , если R является названием кольца. Группа обратимых элементов кольца целых чисел по модулю m называется мультипликативной группой целых по модулю m, и она изоморфна приведённой системе вычетов. В частности, её порядок (размер) равен .

Когда m является простым, скажем p, то и все ненулевые элементы имеют обратные, а тогда является конечным полем. В этом случае мультипликативная группа целых чисел по модулю p образует циклическую группу порядка p − 1.

Пример[править | править код]

Для иллюстрации вышеприведённых определений рассмотрим пример чисел по модулю 10.

Два числа эквивалентны по 10 тогда и только тогда, когда их разность делится на 10, например

поскольку 10 делит 32 − 12 = 20,
поскольку 10 делит 111 − 1 = 110.

Некоторые из классов вычетов по этому модулю:

Линейное сравнение не имеет решений, поскольку целые, конгруэнтные 5 (то есть, входящие в ) все нечётные, в то время как 4x все чётные. Однако линейное сравнение имеет два решения, а именно, и . НОД(4, 10) = 2 и 2 не делит 5, но делит 6.

Поскольку НОД(3, 10) = 1, линейное сравнение будет иметь решения, то есть, модульное обратное числа 3 по модулю 10 будет существовать. 7 удовлетворяет этому уравнению (21 − 1 = 20). Однако и другие целые удовлетворяют этому уравнению, например 17 и −3 (поскольку 3(17) − 1 = 50 и 3(−3) − 1 = −10). В частности, любое целое число из будет удовлетворять уравнению, поскольку эти числа имеют вид 7 + 10r для некоторого r и ясно, что

делится на 10. Это уравнение имеет только один класс вычетов в качестве решений. Решение в этом случае может быть получено просто перебором возможных классов, но для получения решения для больших модулей нужны систематические алгоритмы, и они будут представлены в следующих разделах.

Произведение классов вычетов и может быть получено путём выбора элемента из , скажем 25, и элемента из , скажем −2, и их произведение (25)(−2) = −50 находится в классе эквивалентности . Таким образом, . Сложение определяется аналогично. Десять классов вычетов вместе с этими операциями сложения и умножения классов вычетов образует кольцо целых чисел по модулю 10, то есть .

Полной системой вычетов по модулю 10 может быть множество {10, −9, 2, 13, 24, −15, 26, 37, 8, 9}, где каждое целое лежит в своём классе вычетов по модулю 10. Минимальной системой вычетов по модулю 10 служит {0, 1, 2, …, 9}. Приведённой системой вычетов по модулю 10 может быть {1, 3, 7, 9}. Произведение любых двух классов вычетов, представленных этими числами, снова является один из этих четырёх классов. Из этого следует, что эти четыре класса вычетов образуют группу, в этом случае циклическую группу порядка 4, имеющую в качестве генератора 3 или 7. Представленные классы вычетов образуют группу обратимых элементов кольца . Эти классы вычетов в точности те, что имеют обратные по модулю.

Вычисление[править | править код]

Расширенный алгоритм Евклида[править | править код]

Модульное обратное для числа a по модулю m можно найти с помощью расширенного алгоритма Евклида.

Алгоритм Евклида определяет наибольший общий делитель (НОД) двух целых чисел, скажем a и m. Если a имеет обратное по модулю m число, этот НОД должен быть равен 1. Несколько последних равенств, получаемых в процессе работы алгоритма, могут быть решены для нахождения НОД. Затем, используя метод «обратной подстановки», может быть получено выражение, связывающее исходные параметры и НОД. Другими словами, могут быть найдены целые x и y, удовлетворяющие равенство Безу,

Перепишем это следующим образом

то есть,

и модульное обратное числа a вычислено. Более эффективной версией является расширенный алгоритм Евклида, который с помощью дополнительных равенств сокращает два прохода алгоритма (обратную подстановку можно понимать как прохождение алгоритма в обратном порядке) до одного.

В нотации O большое этот алгоритм работает за время в предположении, что , и считается очень быстрым. Он обычно более эффективен чем альтернативный экспоненциальный алгоритм.

Использование теоремы Эйлера[править | править код]

В качестве альтернативы расширенному алгоритму Евклида для вычисления модульного обратного элемента можно рассматривать использование теоремы Эйлера[11].

Согласно теореме Эйлера, если a взаимно просто с m, то есть НОД(a, m) = 1, то

где  — функция Эйлера. Это следует из факта, что a принадлежит мультипликативной группе тогда и только тогда, когда a взаимно просто с m. Таким образом, модульное обратное можно найти напрямую:

В специальном случае, когда m простое, и модульное обратное задаётся равенством

Этот метод, как правило, медленнее расширенного алгоритма Евклида, но иногда используется, если реализация для модульного возведения в степень уже доступна. Недостатки этого метода:

  • Значение должно быть известно, а наиболее эффективный метод вычисления требует m разложений. Разложение хорошо известно как задача, в которой вычисления занимают большую часть сложности решения. Однако вычислить можно непосредственно, если известно разложение на простые множители числа m.
  • Относительно высокая стоимость возведения в степень. Хотя это можно реализовать более эффективно с помощью модульного возведения, при больших значениях m наиболее эффективен метод алгоритма Монтгомери. Этот алгоритм сам по себе требует вычисления обратного по модулю m. Без алгоритма Монтгомери стандартный бинарный алгоритм возведения, который требует деления по модулю m на каждом шаге, является медленной операцией при большом m.

Замечательное преимущество этой техники в том, что нет условных ветвлений, которые зависят от значения a, а потому значение a, которое может быть важным секретом в криптосистемах с открытым ключом, может быть защищено от атак по сторонним каналам. По этой причине стандартная реализация Curve25519 использует технику вычисления обратного элемента.

Вычисление нескольких обратных[править | править код]

Можно вычислить обратные для нескольких чисел по общему модулю m используя один проход алгоритма Евклида и три умножения на каждое дополнительное входное число[12]. Основной идеей является образование всех , обращение его, а затем умножение на на для всех , чтобы остался только .

Алгоритм (вся арифметика осуществляется по модулю m):

  1. Вычисляем префиксные произведения для всех .
  2. Вычисляем с помощью любого доступного алгоритма.
  3. Для i от n до 2 вычисляем
    • и
    • .
  4. Наконец, .

Можно осуществить умножение в виде древесной структуры, а не линейной, чтобы обеспечить параллельность вычислений.

Приложения[править | править код]

Поиск модульного обратного имеет много приложений в алгоритмах, опирающихся на теорию модульной арифметики. Например, в криптографии использование модульной арифметики позволяет осуществлять некоторые операции быстрее и с меньшими требованиями к памяти, в то время как другие операции становится выполнить труднее[13]. Оба этих свойства могут использоваться во благо. В частности, в алгоритме RSA шифрование и обратный этому процесс сообщения делается с помощью пары чисел, обратных друг другу по некоторому тщательно выбранному модулю. Один из этих чисел делается открытым, и он может быть использован в быстрой процедуре шифрования, в то время как другое число используется в процедуре расшифровки и не разглашается. Определение скрытого ключа по открытому считается невыполнимой задачей, так как вычислительной мощности на её решение требуется больше, чем есть на Земле, что и защищает от несанкционированного доступа[14].

В качестве другого использования в другом контексте рассмотрим задачу точного деления в компьютерах, когда дан список нечётных чисел размером в компьютерное слово, каждое из которых делится на k, и нужно разделить их на k. Одно из решений следующее:

  1. Используем расширенный алгоритм Евклида для вычисления , модульного обратного , где w равно числу бит в слове. Это обратное существует, поскольку все числа нечётные, а рассматриваются вычеты по модулю, не имеющему нечётных делителей.
  2. Каждое число в списке умножаем на и выбираем наименее значащие биты результата (то есть отбрасываем все биты за пределами компьютерного слова).

Во многих машинах, в частности тех, у которых нет аппаратной поддержки деления, деление является более медленной операцией, чем умножение, так что этот подход может повлечь существенное увеличение скорости. Первый шаг относительно медленный, но его нужно сделать всего один раз.

Модульные обратные числа используются для получения решения системы линейных сравнений, что гарантируется китайской теоремой об остатках.

Например, система

имеет общее решение, поскольку 5, 7 и 11 попарно взаимно просты. Решение даётся формулой

где

модульное обратное ,
модульное обратное ,
модульное обратное .

Тогда,

и в приведённом виде

поскольку 385 является наименьшим общим кратным чисел 5, 7 и 11.

Модульное обратное фигурирует на видном месте в определении сумм Клоостермана.

См. также[править | править код]

Примечания[править | править код]

  1. Rosen, 1993, с. 132.
  2. Schumacher, 1996, с. 88.
  3. Stinson, 1995, с. 124–128.
  4. Trappe, Washington, 2006, с. 164−169.
  5. Moriarty, K.; Kaliski, B.; Jonsson, J.; Rusch, A. PKCS #1: RSA Cryptography Specifications Version 2.2. Internet Engineering Task Force RFC 8017. Internet Engineering Task Force (2016). Дата обращения: 21 января 2017. Архивировано 12 декабря 2018 года.
  6. Other notations are often used, including [a] and [a]m.
  7. Ireland, Rosen, 1990, с. 32.
  8. Shoup, 2005, с. 15 Theorem 2.4.
  9. Rosen, 1993, с. 121.
  10. Ireland, Rosen, 1990, с. 31.
  11. Koshy, 2007, с. 346.
  12. Brent, Zimmermann, 2010, с. 67–68.
  13. Trappe, Washington, 2006, с. 167.
  14. Trappe, Washington, 2006, с. 165.

Литература[править | править код]

  • Kenneth Ireland, Michael Rosen. A Classical Introduction to Modern Number Theory. — 2nd. — Springer-Verlag, 1990. — ISBN 0-387-97329-X.
    • К. Айерлэнд, М. Роузен. Классическое введение в современную теорию чисел / Перевод с английского С. П. Демушкина. — Москва: «Мир», 1987.

Ссылки[править | править код]