Алгоритм Теруи-Кашивабары-Ханаоки: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
(Новая страница: «=Свойства и структура алгоритма= ==Математическое описание алгоритма== Алгоритм Теру-Ка…»)
 
Строка 3: Строка 3:
 
==Математическое описание алгоритма==
 
==Математическое описание алгоритма==
  
Алгоритм Теру-Кашивабары-Ханаоки использует параллельные вычисления для решения задачи SVP.
+
Алгоритм Теруи-Кашивабары-Ханаоки <ref>Parallel</ref> использует параллельные вычисления для решения задачи SVP.
В основу алгоритма лег алгоритм Фукаши-Кашивабары.
+
В основу алгоритма лег алгоритм Фукаши-Кашивабары<ref>NNR</ref>.
  
 
===Глобальные хранилища векторов===
 
===Глобальные хранилища векторов===
Строка 44: Строка 44:
 
:<math>\| \vec{b_{j}^{*}} \|^2 - \| \pi_{B, i}(\vec{v_i}) \|^2 \rightarrow \max.</math>
 
:<math>\| \vec{b_{j}^{*}} \|^2 - \| \pi_{B, i}(\vec{v_i}) \|^2 \rightarrow \max.</math>
 
Если такой <math>\vec{v_i}</math> не найден, то алгоритм переходит к следующему шагу.
 
Если такой <math>\vec{v_i}</math> не найден, то алгоритм переходит к следующему шагу.
Иначе к <math>B</math> применяется <math>\delta</math>-LLL алгоритм по индексу <math>j</math> c вектором <math>\vec{v_i}</math>.
+
Иначе к <math>B</math> применяется <math>\delta</math>-LLL алгоритм<ref>LLL</ref> по индексу <math>j</math> c вектором <math>\vec{v_i}</math>.
 
Далее обновляются значения <math>\delta'_k, {k = \ell_{\mathrm{lc}} + 1, \ldots, n}</math> по следующим правилам:
 
Далее обновляются значения <math>\delta'_k, {k = \ell_{\mathrm{lc}} + 1, \ldots, n}</math> по следующим правилам:
 
:<math>\delta'_{k} = \delta'_{k} - \delta'' \text{ для всех }  k = \ell_{\mathrm{lc}} + 1, \ldots, j - 1,</math>
 
:<math>\delta'_{k} = \delta'_{k} - \delta'' \text{ для всех }  k = \ell_{\mathrm{lc}} + 1, \ldots, j - 1,</math>
Строка 74: Строка 74:
 
После чего базис <math>B</math> модифицируется так, чтобы функция <math>\mathrm{Eval}(B, \Theta)</math>
 
После чего базис <math>B</math> модифицируется так, чтобы функция <math>\mathrm{Eval}(B, \Theta)</math>
 
достигала на нем своего минимума.
 
достигала на нем своего минимума.
Чтобы этого достичь, к <math>B</math> применяется алгоритм <math>\delta</math>-LLL по индексу <math>i</math> с вектором <math>\vec{v}</math>,
+
Чтобы этого достичь, к <math>B</math> применяется алгоритм <math>\delta</math>-LLL<ref>LLL</ref>по индексу <math>i</math> с вектором <math>\vec{v}</math>,
 
где <math>\vec{v}</math> - вектор из глобального хранилища запасных векторов, для которого выполнено
 
где <math>\vec{v}</math> - вектор из глобального хранилища запасных векторов, для которого выполнено
 
<math>{h_{\delta_{\mathrm{stock}}}(\vec{v}) = i \le \ell_{\mathrm{fc}}}</math>.
 
<math>{h_{\delta_{\mathrm{stock}}}(\vec{v}) = i \le \ell_{\mathrm{fc}}}</math>.
Строка 89: Строка 89:
 
Если <math>B' = B</math>, то алгоритм возвращает базис <math>B</math>.
 
Если <math>B' = B</math>, то алгоритм возвращает базис <math>B</math>.
 
В противном случае алгоритм продолжает свою работу с шага 1.
 
В противном случае алгоритм продолжает свою работу с шага 1.
 +
 +
=Литература=
 +
 +
*{{статья
 +
  | автор = Tadanori Teruya and
 +
              Kenji Kashiwabara and
 +
              Goichiro Hanaoka
 +
  | заглавие = Fast Lattice Basis Reduction Suitable for Massive Parallelization
 +
              and Its Application to the Shortest Vector Problem
 +
  | оригинал = Public-Key Cryptography - {PKC} 2018 - 21st {IACR} International Conference
 +
              on Practice and Theory of Public-Key Cryptography, Rio de Janeiro,
 +
              Brazil, March 25-29, 2018, Proceedings, Part {I}
 +
  | страницы = 437--460
 +
  | год      = 2018
 +
  | ref = Parallel
 +
}}
 +
 +
*{{статья
 +
  | автор    = Masaharu Fukase and
 +
              Kenji Kashiwabara
 +
  | заглавие    = An Accelerated Algorithm for Solving {SVP} Based on Statistical Analysis
 +
  | том    = 23
 +
  | выпуск  = 1
 +
  | страницы    = 67--80
 +
  | год      = 2015
 +
  | ref = NNR
 +
 
 +
}}
 +
 +
*{{LLL,
 +
    | автор = A. K. Lenstra and H. W. Lenstra and L. Lovasz
 +
    | заглавие = Factoring polynomials with rational coefficients
 +
    | год = 1982
 +
    | том = 261
 +
    | страницы = 515--534
 +
    | ref = LLL
 +
}}

Версия 17:14, 19 октября 2019

1 Свойства и структура алгоритма

1.1 Математическое описание алгоритма

Алгоритм Теруи-Кашивабары-Ханаоки [1] использует параллельные вычисления для решения задачи SVP. В основу алгоритма лег алгоритм Фукаши-Кашивабары[2].

1.1.1 Глобальные хранилища векторов

Для корректной работы алгоритма требуется два глобальных хранилища векторов, доступ к которым будут иметь все процессы. Первое из них назовем глобальным хранилищем запасных векторов, а второе - глобальным хранилищем соединительных векторов.

1.1.2 Генерация векторов решетки

На вход принимается базис решетки B и набор представлений в виде натуральных чисел векторов решетки. Далее генерируется набор векторов из данной решетки, которые соответствуют описанным выше представлениям. При этом понятно, что для разных базисов одной и той же решетки при одном и том же наборе представлений в виде натуральных чисел, будут сгенерированы разные вектора.

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

В алгоритме редукции базиса на вход поступают базис решетки B, набор S' представлений в виде натуральных чисел, целые числа \ell_{\mathrm{fc}}, \ell_{\mathrm{lc}} , вещественные значения \delta_{\mathrm{stock}}, \delta, \delta', \delta'' и целочисленное значение pui (process-unique information).

До начала работы алгоритма заводится массив переменных \delta'_i, i =\ell_{\mathrm{lc}} + 1, \ldots, n все элементы которого изначально равны \delta'.

На первом шаге генерируется набор векторов решетки V по набору S' и для каждого \vec{v} \in V вычисляется \delta_{\mathrm{stock}}-индекс вставки равный i. Если таковой удовлетворяет условию 1 \le i \le \ell_{\mathrm{fc}}, то вектор \vec{v} записывается в глобальное хранилище запасных векторов. Далее, по V строится набор V' = (\vec{v_1}, \ldots, \vec{v_N}), для всех векторов которого \delta-индекс вставки больше \ell_{\mathrm{lc}}.

На следующем шаге производится модификация исходного базиса решетки. Исходный базис B сохраняется в переменной B'. После чего ищется вектор \vec{v_i} \in V' для которого выполнены условия:

j = h_{\delta'_{j}}(\vec{v}) \text{ где }\ell_{\mathrm{lc}} \lt j \le n,
\| \vec{b_{j}^{*}} \|^2 - \| \pi_{B, i}(\vec{v_i}) \|^2 \rightarrow \max.

Если такой \vec{v_i} не найден, то алгоритм переходит к следующему шагу. Иначе к B применяется \delta-LLL алгоритм[3] по индексу j c вектором \vec{v_i}. Далее обновляются значения \delta'_k, {k = \ell_{\mathrm{lc}} + 1, \ldots, n} по следующим правилам:

\delta'_{k} = \delta'_{k} - \delta'' \text{ для всех } k = \ell_{\mathrm{lc}} + 1, \ldots, j - 1,
\delta'_{k} = \delta' \text{ для всех } k = j, \ldots, n.

Если (i + \text{pui}) \bmod N \equiv 0, то выполняется переход к шагу 3. В противном случае, к модифицированному базису B снова применяется шаг 2.

На третьем шаге проверяется условие B = B'. В случае успеха алгоритм завершает свою работу с результатом B. В противном случае алгоритм продолжает свою работу с шага 1.

1.1.4 Алгоритм Теруи-Кашивабары-Ханаоки

На вход алгшоритма поступют базис решетки B, наборы S и S' представлений в виде натуральных чисел, целые числа \ell_{\mathrm{fc}}, \ell_{\mathrm{lc}}, \ell_{\mathrm{link}}, вещественные значения \delta_{\mathrm{stock}}, \delta, \delta', \delta'', \Theta и целочисленное значение pui (process-unique information).

На первом шаге алгоритма в переменную B' сохраняется исходный базис B. После чего к B применяется алгоритм редукции базиса. Далее, генерируется набор векторов решетки V по базису B и набору представлений в виде натуральных чисел S. Для каждого \vec{v} \in V вычисляется \delta_{\mathrm{stock}}-индекс вставки равный i. Если таковой удовлетворяет условию 1 \le i \le \ell_{\mathrm{fc}}, то вектор \vec{v} записывается в глобальное хранилище запасных векторов.

На втором шаге вычисляется следующая оценочная функция:

\mathrm{Eval}(B, \Theta) = \sum_{i = 1}^{n} \Theta^{i} \| \vec{b_{i}^{*}} \|^2.

После чего базис B модифицируется так, чтобы функция \mathrm{Eval}(B, \Theta) достигала на нем своего минимума. Чтобы этого достичь, к B применяется алгоритм \delta-LLL[4]по индексу i с вектором \vec{v}, где \vec{v} - вектор из глобального хранилища запасных векторов, для которого выполнено {h_{\delta_{\mathrm{stock}}}(\vec{v}) = i \le \ell_{\mathrm{fc}}}.

На третьем шаге сохраняем базисные вектора с индексами от 1 до \ell_\mathrm{link} в глобальное хранилище соединительных векторов. Далее выгружаем все глобальное хранилище соединительных векторов. Из векторов хранилища и векторов базиса B собираем наименьший базис решетки B'' в лексикографическом порядке. Затем заменяем базис B базисом B''. Если существует вектор \vec{v} из глобального хранилища запасных векторов такой, что \| \vec{v} \| \lt 1.05 \cdot (\Gamma(n / 2 + 1) \cdot \det(\Lambda))^{1 / n} / \sqrt{\pi}, то алгоритм возвращает вектор \vec{v}. Если B' = B, то алгоритм возвращает базис B. В противном случае алгоритм продолжает свою работу с шага 1.

2 Литература

  • Parallel
  • NNR
  • LLL
  • LLL