Научная литература
booksshare.net -> Добавить материал -> Криптография -> Венбо Мао -> "Современная криптография" -> 88

Современная криптография - Венбо Мао

Венбо Мао Современная криптография. Под редакцией Клюшиной Д.А. — М. : Издательский дом Вильямс, 2005. — 768 c.
ISBN 5-8459-0847-7
Скачать (прямая ссылка): sovremennaya_kriptografiya.djvu
Предыдущая << 1 .. 82 83 84 85 86 87 < 88 > 89 90 91 92 93 94 .. 311 >> Следующая

Следует однако заметить, что, упрощая описание алгоритма, мы пожертвовал* эффективностью!
При эффективной реализации на выполнение всех операций на шагах 3 и можно затратить OB((logn)2) единиц времени. Эта ситуация совершенно аналогична эффективному вычислению наибольшего общего делителя, основанному
Глава 6. Теория чисел
233
Алгоритм 6.2. Символ Якоби
ВВОД: нечетное целое число п > 2, целое число х € Ъ*п ВЫВОД:
Jacobi(a;,n)
1. if (х == 1) return (1);
2. if (2
а) if (2 I (n2 - l)/8) return (JacoU(x/2,n));
б) return (—Jacobi(a;/2,n));
(* Далее число x считается нечетным *)
3. if (2 I (x — l)(n— l)/4) return (Jacobi(nmoda;,a;));
4. return (— Jacobi(nmodx, x)).
на формуле (4.3.12). Следовательно, для х € Z* символ Якоби (^) можно вычислить за OB((logn)2) единиц времени. Эффективная модификация алгоритма 6.2 описана в части I книги [79].
В сравнении со сложностью критерия Эйлера (5.4.5), имеющего временную сложность OB((logp)3), сложность распознавания квадратичного вычета по простому модулю р в logp раз меньше.
Пример 6.5. Покажем, что 384 6 QNR443.
Отслеживая алгоритм 6.2 шаг за шагом, получаем следующее.
Jacobi(384,443) = - Jacobi(192,443) = = - ,Tacobi(96,443) = = - Jacobi(48,443) = = - Jacobi(24,443) = = - Jacobi(12,443) = = - Jacobi(6,443) = = - Jacobi(3,443) = = Jacobi(2,3) = = — Jacobi(l,3) = - -1.
Следовательно, 384 6 QNR443. ?
В заключение необходимо заметить, что для вычисления символа Якоби с помощью алгоритма 6.2 не обязательно знать разложение числа п. Это очень важ-
234
Часть II. Математические основы
ное свойство, которое широко применяется в криптографии с открытым ключом, например, в криптосистеме Голдвассера-Микали (14.3.3) и протоколе подбрасывания монеты Блюма (глава 19).
6.6 Квадратные корни по целочисленному модулю
В примере 6.2 мы вычислили квадратный корень по целочисленному модулю. Однако процедуру, которая там описана, нельзя считать алгоритмом, поскольку она использовала изоморфизм между группой и полем, позволивший свести сложную задачу к тривиальной: вычислению квадратных корней единицы и четырех, которые оказались квадратами в поле Z. Эта задача вполне по силам даже школьникам начальных классов. Как правило, такой изоморфизм неизвестен, и существует громадное количество случаев, когда образ числа при изоморфизме не является квадратом в поле Z.
Рассмотрим алгоритмы вычисления квадратных корней по целочисленному модулю. Начнем с простых модулей. По следствию 6.2 два корня квадратичных вычетов являются взаимно дополнительными по простому модулю. Значит, достаточно рассмотреть проблему вычисления одного из квадратных корней квадратичного вычета.
Для большинства нечетных чисел задача очень проста. В частности, к ним относятся простые числа р, такие как р = 3,5,7(mod8).
6.6.1 Вычисление квадратных корней по простому модулю
Вариант р = 3,7(mod8).
В данном случае число р + 1 делится на 4. Введем следующее обозначение для числа a G QRp.
def ?±i, , ч х = а * (modp).
Затем, поскольку а^р_1^2 = l(modp),
х2 = а^'2 = а("-1>/2а = a(mod р).
Итак, действительно, число х является квадратным корнем числа а по модулю р.
Вариант р = 5 (mod 8).
В данном случае число р + 3 делится на 8. Поскольку число (р — 1)/2 является четным, число —1 удовлетворяет критерию Эйлера и является квадратичным
Глава 6. Теория чисел
235
вычетом. Введем следующее обозначение для числа а € QRp-
х ^ а2^- (modp) (6.6.1)
Из условия а(р-1)/2 = l(modp) следует, что а^-1^/4 ее ±l(modp), поскольку в поле Z* число 1 имеет два квадратных корня: 1 и —1. Следовательно,
х2 = а(р+3)/4 ее аЬ-^а = ±a(modp).
Иначе говоря, мы доказали, что число х, определенное по формуле (6.6.1), является квадратным корнем либо числа а, либо числа —а. Если число положительное, алгоритм завершен. Если число отрицательное, то
—х2 = (л/—1х)2 ее a(modp).
Следовательно, число
х *f у/^Ла^ (modp) (6.6.2)
является искомым. Итак, задача сводится к вычислению у7- l(modp). Пусть число Ъ — произвольный квадратичный невычет по модулю р. Тогда по критерию Эйлера
(Ь(р-1)/4)2 = ь(р-1)/2 = _1(modp)j
следовательно, вместо числа можно применять число o(p-1)/4(modp). Кстати, поскольку
р2 - 1 = (р + 1 )(р - 1) = (8А; + 6)(8Jfc + 4) = 8(4Jt' + 3)(2к" + 1),
правая часть равенства является результатом умножения нечетного числа на 8. Следовательно, по теореме 6.16.6 выполняется условие 2 € QNRp. Иначе говоря, если р ее 5(mod8), вместо числа можно использовать число г^-1^4. Тогда формула (6.6.2) преобразуется в следующую.
2(p-D/4a(p+3)/8 _ (4a)(P+3)/8/2(modр) (6 6 3)
Используя правую часть формулы (6.6.3), мы можем сэкономить одну операцию возведения в степень по модулю.
Временная сложность алгоритма 6.3 имеет порядок C>B((logp)3).
236
Часть II. Математические основы
Алгоритм 6.3. Квадратный корень по модулю р ее 3,5,7(mod 8)
ВВОД: простое число р, удовлетворяющее условию р = 3,5,7(mod 8); целое число a G QRp.
ВЫВОД: квадратный корень числа а по модулю р.
1. if (р = 3,7(mod8)) return (a(P+1)/4(modp)); (* Далее считаем, что р ее 5(mod8). *)
Предыдущая << 1 .. 82 83 84 85 86 87 < 88 > 89 90 91 92 93 94 .. 311 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed