Лекции по криптологии / Y23_M02_L13
.doc
Лекция 13. Алгоритм вычисления квадратного корня в простом поле.
13.1. Зависимость алгоритма от свойств модуля.
Данный алгоритм предназначен для решения относительно сравнения вида по простому модулю .
Перед тем как приступить к вычислениям, необходимо убедиться в разрешимости сравнения, т.е. в том, что .
Далее. Алгоритм разбивается на 3 случая, в зависимости от представления в виде , , (можно убедиться, что любое нечетное простое число представляется одним из указанных способов).
В алгоритме существенно используется критерий Эйлера, который для разрешимого сравнения дает: .
Случай . Имеем . Умножим на левую и правую часть сравнения, получим: . Поскольку показатель справа четный, то можно непосредственно извлечь квадратный корень из правой части, следовательно, одно из решений . Поскольку решений не может быть более двух, то окончательный ответ: .
Случай . Поскольку , то .
Таким образом, верно одно из двух соотношений . Поскольку и известны, то с помощью вычислений можно проверить, какое из соотношений выполняется. В итоге, возможны следующие два подслучая.
Если верно , то, очевидно, .
Иначе, .
Воспользуемся тем, что если обе части последнего сравнения умножить на число в известной четной степени, то квадратный корень из его левой части легко записать явно. Мы подберем указанный множитель так, чтобы, кроме того, изменился знак у правой части сравнения.
Таким множителем может быть число , поскольку . Следовательно,
Последний случай, , наиболее сложный. Прежде всего, для работы алгоритма необходимо наличие (любого) квадратичного невычета по модулю .
Чтобы его найти, приходится выбирать наугад число, скажем, и проверять соотношение . Предположим, что некоторый квадратичный невычет нам известен.
Уточним представление числа : , где - нечетно и, очевидно, .
Основная идея алгоритма – построить соотношение вида .
В случае успеха, достаточно умножить обе части сравнения на и извлечь корень из обеих частей (учитывая, что число четно).
Исходя из сравнения , мы будем строить соотношения, в которых показатель при будет снижаться вдвое, пока не станет равным .
Деление показателей на двойки это - последовательное извлечение квадратных корней, в нашем случае – квадратных корней из единицы. Будем снижать показатели так, чтобы правая часть некоторого сравнения все время была равна единице.
На каждом шаге может получиться лишь один из корней: 1 или . При этом у нас будет достаточно данных, чтобы выяснить, какой случай реально имеет место. Изменять знак у мы будем с помощью умножения частей сравнения на степени числа , причем так, чтобы показатель степени в произведении таких дополнительных множителей всегда оставался четным.
Перейдем к алгоритму.
Очевидно, . Более того, т.к. квадратичный вычет, то и мы можем снизить показатель в два раза: .
Если мы второй раз разделим показатель на два, то нам известно лишь, что в правой части получится . Однако все необходимые числа даны и мы можем выбрать истинный вариант, проверяя варианты сравнения непосредственно.
Если в правой части получается 1, то двигаемся дальше. Заметим, что в правой части может получиться не ранее чем на втором шаге, т.е. при показателе и ниже. Предположим, что в правой части при указанном показателе получилась : .
Поскольку - квадратичный невычет, то и, кроме того, показатель при больше показателя при . (Последнее означает, что когда показатель при станет равным , показатель при все еще будет четным).
Умножим обе части сравнения на , получим .
Из левой части сравнения легко выражается квадратный корень, т.е. .
Как и ранее, легко уточнить, какой из вариантов имеет место на самом деле и, при необходимости, умножить сравнение на и т.д., пока показатель при не окажется равным . После последнего шага, показатель при будет известным и четным, как сумма четных чисел.
В итоге, получим сравнение вида , откуда, умножив обе части на , получим: .
13.2. Методика применения алгоритма.
Пример. Решить сравнение .
Выясним, прежде всего, является ли сравнение разрешимым. Это действительно так, поскольку .
Далее выясним, какой из трех случаев представления имеет место. Очевидно, имеет место случай . Записав, получим , .
Найдем квадратичный невычет по модулю . Можно выбрать , поскольку . Приступим к извлечению корня, учитывая, что .
По теореме Эйлера, имеем . Можно извлечь квадратный корень, разделив показатель на два. При этом значение корня равно 1, т.к. - квадратичный вычет и, следовательно, . Показатель можно разделить на два снова, но необходимо выяснить какому числу (1 или –1) равно значение квадратного корня. Итак, . Поскольку , то .
Нам необходимо добиться значения 1 в правой части сравнения. Умножим обе части на , получим . Как и следовало ожидать, показатель при тройке четный.
Нам остался один шаг, чтобы снизить показатель при восьмерке до . Делим показатели на два и вычисляем значение левой части: , , т.е. .
Нам вновь необходимо умножить обе части сравнения на , что дает .
Показатель при восьмерке равен . Переходим к выписке результата. Умножив обе части сравнения на 8, получим , что позволяет записать квадратный корень из 8 в виде . Проверка: .
Задачу извлечения квадратного корня в кольце вычетов для случая составного модуля , факторизация которого известна, можно решить с помощью китайской теоремы об остатках. Для этого достаточно знать решения сравнения по модулям делителей числа вида , которые, как мы знаем, можно находить, исходя из решений по модулю .
Если факторизация модуля не известна, задача нахождения квадратного корня является алгоритмической проблемой, сложность которой, например, не менее сложности дешифрования криптосистемы RSA.
.