Алгоритм Ленстры — Ленстры — Ловаса

Материал из testwiki
Версия от 21:31, 25 февраля 2025; imported>Sldst-bot (Замена редиректа ш:Заготовка раздела на актуальный ш:Дополнить раздел с добавлением даты установки в разделе «Вариации и обобщения» (2019-12-27))
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску
Редукция базиса решетки в двумерном пространстве: решётка представлена синими точками, исходный базис — черные векторы, редуцированный базис — красные векторы.

Алгоритм Ленстры — Ленстры — Ловаса (ЛЛЛ-алгоритм, LLL-алгоритм) — алгоритм Шаблон:Iw, разработанный Арьеном Ленстрой, Хендриком Ленстрой и Ласло Ловасом в 1982 году[1]. За полиномиальное время алгоритм преобразует базис на решётке (подгруппе n) в кратчайший почти ортогональный базис на этой же решётке. По состоянию на 2019 год алгоритм Ленстры — Ленстры — Ловаса является одним из самых эффективных для вычисления редуцированного базиса в решётках больших размерностей. Он актуален прежде всего в задачах, сводящихся к поиску кратчайшего вектора решётки.

История

Алгоритм был разработан голландскими математиками Арьеном Ленстрой и Хендриком Ленстрой совместно с венгерским математиком Ласло Ловасом в 1982 году[1]Шаблон:Sfn.

Основной предпосылкой для создания ЛЛЛ-алгоритма послужило то, что процесс Грама ― Шмидта работает только с векторами, компоненты которых являются вещественными числами. Для векторного пространства n процесс Грама ― Шмидта позволяет преобразовать произвольный базис в ортонормированный («идеал», к которому стремится ЛЛЛ-алгоритм). Но процесс Грама ― Шмидта не гарантирует того, что на выходе каждый из векторов будет целочисленной линейной комбинацией исходного базиса. Таким образом, полученный в результате набор векторов может и не являться базисом исходной решётки. Это привело к необходимости создания специального алгоритма для работы с решётками[2].

Изначально алгоритм использовался для факторизации многочленов с целыми коэффициентами, вычисления диофантовых приближений вещественных чисел и для решения задач линейного программирования в пространствах фиксированной размерности, а впоследствии и для криптоанализа[3][4].

Редукция базиса

Решётка в евклидовом пространстве — это подгруппа группы (n,+), порожденная d линейно независимыми векторами из n, называемыми базисом решётки. Любой вектор решётки может быть представлен целочисленной линейной комбинацией базисных векторов[5]. Базис решётки определяется неоднозначно: на рисункеШаблон:Переход изображены два различных базиса одной и той же решётки.

Редукция базиса заключается в приведении базиса решётки к особому виду, удовлетворяющему некоторым свойствам. Редуцированный базис должен быть, по возможности, наиболее коротким среди всех базисов решётки и близким к ортогональному (что выражается в том, что итоговые коэффициенты Грама — Шмидта должны быть не больше 1/2)[2].

Пусть в результате преобразования базиса 𝐁={𝐛1,𝐛2,,𝐛d} с помощью процесса Грама ― Шмидта получен базис 𝐁*={𝐛1*,𝐛2*,,𝐛d*}, с коэффициентами Грама — Шмидта, определяемыми следующим образом:

μi,j=𝐛i,𝐛j*𝐛j*,𝐛j*, для всех j,i таких, что 1j<id.

Тогда (упорядоченный) базис 𝐁 называется δ-ЛЛЛ-редуцированным базисом (где параметр δ находится в промежутке (0.25,1]), если он удовлетворяет следующим свойствам[2]:

  1. Для всех i,j таких, что 1j<id:|μi,j|0,5. (условие уменьшения размера)
  2. Для k=1,2,,d имеет место: (δμk,k12)𝐛k1*2𝐛k*2. (условие Ловаса)

Здесь 𝐛норма вектора, 𝐛i,𝐛j*cкалярное произведение векторов.

Изначально Ленстра, Ленстра и Ловас в своей статье продемонстрировали работу алгоритма для параметра δ=34. Несмотря на то что алгоритм остаётся корректным и для δ=1, его работа за полиномиальное время гарантируется только для δ в промежутке (0.25,1)[1].

Свойства редуцированного базиса

Пусть 𝐁={𝐛1,𝐛2,,𝐛d} — сокращённый алгоритмом ЛЛЛ с параметром δ базис на решётке . Из определения такого базиса можно получить несколько свойств 𝐁. Пусть λ1() — норма кратчайшего вектора решётки, тогда:

  1. Первый вектор базиса не может быть значительно длиннее кратчайшего ненулевого вектора:Шаблон:Pb𝐛1(24δ1)d1λ1(). В частности, для δ=3/4 получается 𝐛12(d1)/2λ1()[6].
  2. Первый вектор базиса ограничен определителем решётки:Шаблон:Pb𝐛1(24δ1)(d1)/2det()1/d. В частности, для δ=3/4 получается 𝐛12(d1)/4(det)1/d[2].
  3. Произведение норм векторов не может быть сильно больше определителя решётки:Шаблон:Pbi=1d𝐛i(24δ1)d(d1)/2det(). В частности, i=1d𝐛i2d(d1)/4det() для δ=3/4[2].

Базис, преобразованный методом ЛЛЛ, почти самый короткий из всех возможных, в том смысле, что существуют абсолютные границы ci>1 такие, что первый базисный вектор не более чем в c1 раз длиннее самого короткого вектора решётки, аналогично, второй вектор базиса не более чем в c2 раз превосходит второй кратчайший вектор решётки и так далее (что прямо следует из свойства 1)[6].

Алгоритм

Входные данные[7]:

базис решётки 𝐛1,𝐛2,,𝐛d3 (состоит из линейно независимых векторов),
параметр δ c 14<δ<1, чаще всего δ=34 (выбор параметра зависит от конкретной задачи).

Последовательность действий[3]: Шаблон:Ordered list В алгоритме μk,j — округление по правилам математики. Процесс алгоритма, описанный на псевдокоде[7]:

  Шаблон:Nowrap 
  (выполнить процесс Грама — Шмидта без нормировки);
  Шаблон:Nowrap всегда подразумевая Шаблон:Nowrap
  Шаблон:Nowrap
  Шаблон:Nowrap
    для Шаблон:Mvar Шаблон:Nowrap
       если |μk,j|>12, то:
          Шаблон:Nowrap
          Обновить значения |μk,j| для j<k;
       конец условия;
    конец цикла;
    Шаблон:Nowrap
       Шаблон:Nowrap
    иначе:
       Шаблон:Nowrap
       Обновить значения 𝐛k*,𝐛k1*,𝐛k*,𝐛k*,𝐛k1*,𝐛k1* для k>1; μk1,j,μk,j для j<k;
       k=max(k1,1);
    конец условия;
  конец цикла.

Выходные данные: редуцированный базис: 𝐛1,𝐛2,,𝐛d.

Вычислительная сложность

На входе имеется базис n-мерных векторов 𝐁={𝐛1,𝐛2,,𝐛d} с  dn.

Если вектора базиса состоят из целочисленных компонент, алгоритм приближает кратчайший почти ортогональный базис за полиномиальное время O(d5nlog3B), где B — максимальная длина 𝐛i по евклидовой норме, то есть B=max(𝐛12,𝐛22,...,𝐛d2). Основной цикл алгоритма ЛЛЛ требует O(d2logB) итераций и работает с числами длины O(dlogB). Так как на каждой итерации происходит обработка d векторов длины n, в итоге алгоритм требует O(d3nlog3B) арифметических операций. Применение наивных алгоритмов сложения и умножения целых чисел даёт в итоге O(d5nlog3B) битовых операций[2].

В случае, когда у решётки задан базис с рациональными компонентами, эти рациональные числа сначала необходимо преобразовать в целые путем умножения базисных векторов на знаменатели их компонент (множество знаменателей ограничено некоторым целым числом X). Но тогда операции будут производиться уже над целыми числами, не превышающими Xnd. В итоге будет максимум O(d8n4log3X) битовых операций. Для случая, когда решётка задана в n, сложность алгоритма остается такой же, но увеличивается количество битовых операций. Так как в компьютерном представлении любое вещественное число заменяется рациональным в силу ограниченности битового представления, полученная оценка верна и для вещественных решёток[2].

В то же время для размерностей меньше чем 4 задача редукции базиса более эффективно решается алгоритмом Лагранжа[8].

Пример

Пример, приводимый Вибом Босмой[9].

Пусть базис решётки 𝐛1,𝐛2,𝐛33 (как подгруппа (n,+)), задан столбцами матрицы:

[113105126]

По ходу алгоритма получается следующее: Шаблон:Ordered list Выходные данные: базис, редуцированный методом Ленстры — Ленстры — Ловаса:

[011100012]

Применение

Алгоритм часто применяется в рамках метода MIMO (пространственное кодирования сигнала) для декодирования сигналов, полученных несколькими антеннами[10], и в криптосистемах с открытым ключом: Шаблон:Iw, RSA с конкретными настройками, NTRUEncrypt и так далее. Алгоритм может быть использован для нахождения целых решений в разных задачах теории чисел, в частности для поиска корней многочлена в целых числах[11].

В процессе атак на криптосистемы с открытым ключом (NTRU) алгоритм используется для поиска кратчайшего вектора решётки, так как алгоритм в результате находит целый набор кратчайших векторов[12].

В криптоанализе Шаблон:Iw задача, так же как в случае с NTRU, сводится к поиску кратчайшего вектора базиса решётки, который находится за полиномиальное (от размерности базиса) время[13].

В задачах о ранце, в частности, для атаки на криптосистемe Меркла — Хеллмана алгоритм ЛЛЛ ищет редуцированный базис решётки[14].

Вариации и обобщения

Шаблон:Дополнить раздел Использование арифметики на числах с плавающей запятой вместо точного представления рациональных чисел может значительно ускорить работу ЛЛЛ-алгоритма ценой совсем небольших численных ошибокШаблон:Sfn.

Реализации алгоритма

Программно алгоритм реализован в следующем программном обеспечении:

Примечания

Шаблон:Примечания

Литература

Шаблон:Теоретико-числовые алгоритмы