Дискретное логарифмирование в конечных полях и кольцах. 1. Постановка задачи дискретного логарифмирования. Пусть G – мультипликативная группа, а b и y – некоторые элементы группы G, связанные равенством y b n при некотором целом n. Любое целое x, удовлетворяющее уравнению b x y (1), называется дискретным логарифмом элемента y по основанию b. Задача дискретного логарифмирования в группе G состоит в отыскании по данным y и b некоторого дискретного логарифма y по основанию b. Задача определения дискретного логарифма элемента конечной группы может быть легко решена, если порядок группы не слишком велик и для этой группы составлена таблица индексов. При отыскании дискретного логарифма положительного действительного числа, если нет таблицы индексов, можно воспользоваться методом последовательного приближения. Но в конечном поле нельзя построить метод вычисления дискретного логарифма, подобный данному методу. Действительно, в конечном поле нельзя определить антисимметричное, транзитивное, связное, бинарное отношение, согласованное с какой-нибудь операцией. Если b имеет бесконечный порядок, то дискретный логарифм любого элемента по основанию b определен однозначно. В противном случае все дискретные логарифмы y по основанию b можно получить из некоторого такого дискретного логарифма x 0 по формуле x x 0 km , где m- порядок элемента b, а параметр k пробегает Z. Для криптографических приложений наиболее важна задача дискретного логарифмирования в мультипликативных группах конечных полей GF(q), и колец Z n . Эти группы обозначим через 140 GF (q) * и Z n* . Как известно группа GF (q) * циклическая и имеет порядок q-1, поэтому если в качестве b берется некоторый пораждающий этой группы, то дискретный логарифм любого элемента GF (q) * по основанию b существует и определен однозначно по модулю q-1. Отметим, что если мы умеем логарифмировать по фиксированному основанию, которое является порождающим g группы GF (q) * , то можно находить дискретные логарифмы по произвольному основанию. В самом деле, чтобы найти дискретный логарифм x элемента y по основанию b, достаточно вычислить дискретные логарифмы z и w элементов b и y соответственно по основанию g и решить уравнение xz w(mod q 1) относительно x. 2. Логарифмирование в конечном поле (в GF (q) * ). Здесь рассмотрим задачу дискретного логарифмирования в группе GF (q) * , где q p n , p- простое число. Перечислим алгоритмы, которые применяют при вычислении дискретных логарифмов в GF (q) * : а) алгоритм Копперсмита, б) алгоритм Хеллмана-Рейнери, в) индексный алгоритм, г) алгоритм Гельфонда, д) алгоритм Сильвера-Поллига-Хеллмана. На последнем алгоритме остановимся долее подробно и рассмотрим пример. Данный алгоритм хорошо работает, когда все простые делители числа q-1 малы. Цель алгоритма – найти такой элемент x, Предположим, что 0 x <q-1, что b x y . x x 0 x1 p ... x 1 p 1 (mod p ) c 0 x i <p. Для того, чтобы найти x 0 ,мы вычислим y ( q 1) / p . Это корень p-й степени из единицы, т.к. y q 1 1 . Из равенства y ( q 1) / p b x ( q 1) / p b x0 ( q 1) / p r p, x0 . Сравниваем y bx y ( q 1) / p cледует, c что r p, j 0 j p ( r p , j b j ( q 1) / p при j=0,1,..,p-1). И полагаем x 0 равным тому значению j, при котором y ( q 1) / p = r p , j . 141 Далее, чтобы найти x1 , мы заменяем y на y1 y / b x0 и т.д. Чтобы продолжить процесс нахождения x 0 , x1 ,.., x 1 для каждого i=1,2,.., 1 полагаем i 1 y i y / b x0 x1 p ... xi 1 p . p Дискретный логарифм этого выражения сравним по модулю x i p i ... x 1 p 1 . Т.к. y i является p i -й степенью, то y i( q 1) / p y i( q 1) / p i 1 i 1 с 1 и b ( xi xi 1 p ...)( q 1) / p b xi ( q 1) / p r p, xi . Поэтому полагаем x i равным i 1 ( q 1) / p тому значению j, при котором y i = rp, j . Завершив этот процесс мы получим x(mod p ) . Повторив такие вычисления для каждого p|(q-1), воспользуемся китайской теоремой об остатках и найдем x. Пример. Найти дискретный логарифм 18 по основанию 2 в F19* , используя алгоритм Сильвера-Поллига-Хеллмана. Решение: y=18, b=2, 218 1(mod 19);218 / 2 1(mod 19). 218 1(mod 19) q=19. Имеем Получаем, 218 / 3 7(mod 19) ; ; 19-1= 2 3 2 . Вычислим r2, j 1;1. 2182 / 3 11(mod 19) . Далее, Получаем, r3, j 1,7,11. Пусть теперь 18 2 x (mod 19) . Сначала возьмем p=2 и найдем вычет x(mod2), который запишем как x0 . Имеем, 1818 / 2 1(mod 19) . Следовательно, x 0 =-1, т.е. x 1(mod 2). Теперь берем p=3 и находим вычет x(mod9), который запишем как x 0 3x1 . Найдем x 0 : вычислим 1818 / 3 1(mod 19) , т.е. x 0 0 . Затем вычисляем 1818 / 9 1(mod 19) и получаем x1 0 . Итак, x 0(mod 9) . Остается 142 найти единственный элемент при x(mod18), x 0(mod 9) , котором x 1(mod 2). Это x=9. Таким образом, 18 2 9 в F19* . Теорема. Если t r1 r2 ... rk , где t=ord b – есть произведение натуральных чисел, то решение уравнения (1) можно найти, выполнив не k k i i 1 i 2 j 1 более чем за 2 ri 6 log 2 r j 2 log 2 r1 1 операций. 3. Логарифмирование в Z n* . Для вычисления дискретных логарифмов в некоторых случаях могут быть полезны функции частные Ферма, которые в частности определяются соотношением а p 1 1 Ф1 (a) (mod p) p и обладают следующими свойствами : Ф1 (ab ) Ф1 (а) Ф1 (b) mod p и Ф1 (a cp ) Ф1 (a) c / a mod p . 4. Приложение вычисления дискретного логарифма в криптографии. Дискретный логарифм составляет основу целого ряда алгоритмов криптографии. Дискретный логарифм широко применяется в 1) криптосистеме с открытым ключом по Диффи-Хеллману; 2) DSA-алгоритме цифровой подписи; 3) криптосистеме Эль Гамаля. Криптосистему, предложенную Эль Гамалем, можно использовать как для цифровых подписей, так и для шифрования. Криптостойкость определяется трудоемкостью вычисления дискретного логарифма в конечном поле. Опишем параметры криптосистемы Эль (шифрование/дешифрование). Открытый ключ: p – простое число (может быть общим для группы абонентов) 143 Гамаля g p (может быть общим для группы абонентов) y g x mod p Секретный ключ: x p Шифрование: k выбирается случайным образом, взаимно простое с p 1 1-я часть шифротекста: a g k mod p 2-я часть шифротекста: b y k M mod p Дешифрование: M b ax mod p b y k M g xk M . M mod p x xk ax a g 144