Skip to content
This repository was archived by the owner on Nov 16, 2023. It is now read-only.

hse-malloc/adleman

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

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

$ git clone https://github.com/hse-malloc/adleman.git

$ cd adleman

$ docker-compose up

Задача дискретного логарифмирования

Пусть заданы простое число p и вычет a, показатель которого по модулю p равен q, то есть ordp a = q и q | p-1. Пусть задан вычет b, удовлетворяющий сравнению

ax ≡ b (mod p)

Задача определения вычета x (mod q) называется задачей вычисления дискретного логарифма элемента b по основанию a.

Принято использовать обозначение

x ≡ loga b (mod q)

Сравнение разрешимо только в том случае, когда вычет b принадлежит множеству A = {1, a, a2, ..., aq-1}

Свойства дискретного логарифма аналогичны свойствам обычного логарифма. Так, например, если верно, что

b ≡ b1α1 * ... * bkαk (mod p)

то выполняется равенство

loga b ≡ α1 loga b1 + ... + αk loga bk (mod q)

Это свойство будет использоваться дальше в методе Адельмана.

Метод Адельмана

Базовая идея

Допустим, что у нас есть таблица простых чисел меньших B

F = {p1, p2, ..., ps}, ∀p∈F p<B

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

x1 ≡ loga p1 (mod q)

x2 ≡ loga p2 (mod q)

...

xs ≡ loga ps (mod q)

Тогда, если мы нашли вычет ξFq* такой, что

bξ ≡ p1α1 * ... * psαs (mod p),

где αi ≥ 0 и piFi=0,...,s, то воспользовавшись свойством логарифма, описанным выше, получаем искомое решение поставленной задачи

loga b ≡ ξ-1 * (α1 loga p1 + ... + αs loga ps) (mod q)

Таким образом метод Адельмана сводится к двум последовательным шагам:

  1. Построение факторной базы и нахождение логарифмов элементов этой базы
  2. Подсчёт значения искомого логарифма.

Нахождение логарифмов элементов факторной базы.

При случайном выборе ξFq может возникнуть ситуация, когда вычет aξ полностью раскладывается по элементам факторной базы, то есть

aξ ≡ p1α1 * ... * psαs (mod p)

в таком случае можно утверждать, что было получено уравнение на неизвестные нам x1 ≡ loga p1 (mod q), ..., xs ≡ loga ps (mod q) :

ξ ≡ α1 x1 + ... + αs xs (mod q)

Задача нахождения искомых x1, ..., xs сводится к генерации s линейно независимых уравнений и нахождении их решения. Итоговая система линейных урванений будет выглядеть как:

ξ1 ≡ α11 x1 + ... + αs1 xs (mod q)

ξ2 ≡ α12 x1 + ... + αs2 xs (mod q)

...

ξs ≡ α1s x1 + ... + αss xs (mod q)

Или в матричном виде, как

ξA x

В реализации до получения искомой матрицы A мы генерируем по s новых уравнений за один проход цикла, добавлям их к уже найденым и ищем среди них линейнонезависимые. Для получения разложения числа aξ на множители мы используем встроенную в Sage функцию factor, предаврительно запустив тест Миллера-Рабина.

Для упрощения работы учебного примера в настоящее время работа поддерживается только для простых q.

Для демонтарции работы алгоритма были сгенерированы простые числа p Софи Жермен порядков 216, 232, 264 и выбраны соответсвующие элементы a с мультипликативным порядком равным q = (p-1)/2

Сложность алгоритма и выбор границы факторной базы.

Обозначим за π(B) число простых чисел, непревосходящих B ( π(B) ~ B / ln B ).

Тогда сложность составления системы линейных уравнений будет O(π2(B) / pa), где pa - вероятность того, что aξ будет разлагаться на множители по факторной базе.

Сложность решениея системы линейных уравнений будет O(π3(B))

Сложность нахождения значения логарифма по известным логарифмам факторной базы будет O(π(B) / pb), где pb - вероятность того, что bξ будет разлагаться на множители по факторной базе.

Итоговая сложность будет O(π3(B) + π2(B) / pa + π(B) / pb).

Стоит заметить, что все величины: π(B), pa и pb существенно зависят от B.

Так, например, если выбрать большое число B, то итоговая сложность будет упираться в решение системы линейных уравнений, т.к. π(B) так же возрастёт (несмотря на то, что вероятности разложения по факторной базе не будут давать большой вклад).

Если же выбрать B достаточно маленьким, то и влад сложности решения системы линейных урванений будет невелик, однако тогда при случайном выборе ξ мы будем достаточно редко получать исходы при которых aξ и bξ будут разладться по факторной базе. То есть большой влкад в сложность будут играть маленькие вероятности pa и pb.

Для баланса между этими крайностями была выбрана теоретическая оценка B ~ L(1/2 , 1/2, q),

где L(1, 1/2, q) = eln1/2q * (ln ln q)1/2 - субэкспоненциальная функция

About

Discrete logarithm action

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •