Методы случайных квадратов

Пусть n – нечетное составное число, не являющееся степенью целого числа. Методы случайных квадратов – это группа методов, основанная на следующей идее:

Пусть n – нечетное составное число, не являющееся степенью целого числа. Целые x, y – такие случайные числа, что x2≡y2(mod n), x Методы случайных квадратов - student2.ru ±y(mod n). Тогда n\(x2—y2), но n не делит ни (x+y), ни (x—y), а значит НОД(x—y,n) – нетривиальный делитель n.

Методы случайных квадратов ищут случайным образом числа x, y: x2≡y2(mod n), а затем проверяют, что x Методы случайных квадратов - student2.ru ±y(mod n).

Замечание: Если x, y – случайные числа, такие что x2≡y2(mod n), то P(x Методы случайных квадратов - student2.ru ±y(mod n)) ≤ 1/2. Действительно, сравнение a≡x2(mod n) имеет 2k различных корней, если n имеет k различных простых делителей, 2k—2 из которых подходят к вероятности.

Общий подход к поиску чисел x, y таков: выбирается факторная база S={p1, p2, … , pt}. Как правило, это t первых простых чисел.

Случайно выбирается несколько чисел ai, вычисляются числа bi=ai2 mod n и разлагается по факторной базе bi= Методы случайных квадратов - student2.ru . Те числа bi, которые разложить по базе S не удалось, из дальнейшего рассмотрения исключаются. Всего требуется t+1 пара (ai, bi).

Затем из чисел bi составляется такое произведение B= Методы случайных квадратов - student2.ru , ci Методы случайных квадратов - student2.ru {0,1}, что B оказывается полным квадратом (то есть Методы случайных квадратов - student2.ru mod 2=0 для всех j). Вектор c находится путем решения соответствующей системы сравнений. Тогда

x= Методы случайных квадратов - student2.ru , y= Методы случайных квадратов - student2.ru .

Очевидно, данная пара удовлетворяет сравнению x2≡y2(mod n). Если она удовлетворяет еще и условию x Методы случайных квадратов - student2.ru ±y(mod n), то НОД(x—y,n) есть нетривиальный делитель n. Иначе следует повторить данный метод, выбрав другие пары (ai, bi).

Алгоритмы дискретного логарифмирования.

Проблема дискретного логарифмирования в группе Zp* состоит в следующем: пусть p – простое число, g – порождающий элемент группы Zp* (или, иначе, примитивный корень по модулю p), a=gx (mod p). Пусть известны g, p, a, но неизвестно x. Требуется найти x, или, иначе, logga mod (p—1), то есть вычислить дискретный логарифм.

В отличие от логарифма непрерывного, дискретный логарифм не является дифференцируемой монотонной функцией, его нельзя найти приближенно, разложив в ряд Тейлора, и вообще никакого приближенного значения здесь не может быть, ведь x – целое число.

Дискретное логарифмирование считается сложной проблемой. С этой проблемой связаны и другие теоретико-числовые проблемы, такие как проблема Диффи-Хеллмана, логарифмирование в Zn. Если удастся решить проблему дискретного логарифма, то приведенные задачи решаются за полиномиальное время.

Метод прямого поиска.

Этот наивный метод является самым трудоемким, он требует O(n) умножений, то есть обладает экспоненциальной сложностью. Состоит он в следующем: вычисляются g0, g1, g2,…, gp—1 пока не попадется gi≡a(mod p). Полученное i будет искомым дискретным логарифмом i=logga (mod p—1).

Пример

p=23, g=5, a=19.

i
gi mod p 19

Ответ: log519 mod 22 = 15.

Наши рекомендации