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

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

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 и pi ∈ F ∀ i=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

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages