Сверхвозрастающая последовательность

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 18 марта 2018 года; проверки требуют 18 правок.

Сверхвозрастающей называется последовательность, каждый член которой больше суммы всех предыдущих членов. Более формально, последовательность положительных целых чисел  — сверхвозрастающая, если выполнено условие[1][2]:

Данный класс последовательностей широко используется в ранцевой криптосистеме Меркля-Хеллмана.

Например, является сверхвозрастающей, а  — нет.

Способы построения сверхвозрастающей последовательности

править

Пусть перед нами стоит задача построить сверхвозрастающую последовательность   для некоторого количества объектов  . Элемент   выбирается случайным образом из равномерного распределения натуральных чисел по такому отрезку:  . Следующий элемент   выбирается равномерно из отрезка  , идущий за ним член последовательности выбирается из отрезка  , элемент   случайным образом выбирается из отрезка  . Очевидно, что при подобных распределениях членов последовательности условие сверхвозрастаемости будет выполняться, так как нижняя граница каждого отрезка в точности равна увеличенной на единицу сумме всех правых границ предыдущих отрезков[3]. Для примера построим таким способом несколько сверхвозрастающих последовательностей при  :

n Отрезок Пример 1 Пример 2 Пример 3
1   5 10 32
2   56 49 64
3   98 113 97
4   225 225 225
5   481 510 493

Построение со случайно выбранным шагом

править

Если   — случайно выбранные числа, то остальные элементы сверхвозрастающей последовательности можно найти из неравенства[4]:

 

Пусть  ,  . Тогда, для примера, последовательность   удовлетворяет условию и является сверхвозрастающей.

Построение на основе последовательности Фибоначчи

править

Каждый элемент последовательности Фибоначчи удовлетворяет соотношению:  , нулевой и первый члены которого:  . Из этого видно, что первые члены последовательности Фибоначчи:  . Иногда можно столкнуться с обобщенной последовательностью Фибоначчи. Это последовательность, члены которой выполняют условие уравнения:  . То есть обобщённая последовательность получается из классической путем изменения первых двух членов последовательности Фибоначчи и сохраняет принцип образования следующих членов. Для построения сверхвозрастающей последовательности используется форма именно обобщённой последовательности Фибоначчи. Для того, чтобы вычислить любой член сверхвозрастающей последовательности  , необходимо выбрать четыре элемента: два начальных (  и  ) и два положительных множителя (  и  )[5].

Получаем следующие случаи:

  1. Последовательность удовлетворяет условию сверхвозрастаемости при  .
  2. Последовательность не является сверхвозрастающей при  .
  3. При   последовательность начинает удовлетворять условию сверхвозрастаемости после нескольких итераций.
  4. При   последовательность остаётся сверхвозрастающей.

Для примера возьмём  . Первые элементы полученной сверхвозрастающей последовательности:  .

Построение по имеющейся сверхвозрастающей последовательности

править

Условию сверхроста удовлетворяет ряд степеней числа   . Зная сверхвозрастающую последовательность  , можно построить новую   с помощью набора  . Для реализации необходимо применить к   набор следующих операций[6]:

 

 

 

 

 

 

Подробный пример для выбранной сверхвозрастающей последовательности  :

           
           
             
             
             
             
             
             

Получили новую сверхвозрастающую последовательность  .

Использование сверхвозрастающей последовательности в криптографии

править

Сверхвозрастающие рюкзаки

править

Криптосистема Меркла-Хеллмана основан на «задаче о рюкзаке» — алгоритме шифрования с открытым ключом — описанном ниже. Задача выглядит следующим образом: задана последовательность   неповторяющихся положительных целых чисел. Пусть число   также принадлежит множеству натуральных чисел. Если такое возможно, необходимо найти набор псевдослучайной двоичной последовательности  , чтобы выполнялось условие:  [2].

Пусть   — сверхвозрастающая последовательность. В таком случае мы сталкиваемся с «лёгкой» проблемой рюкзака, которую не составляет труда решить. Для этого   сравнивается с элементом  . Если  , то  , значение   уменьшается на   и происходит переход к члену последовательности  . Действие повторяется, пока процесс не закончится. Если в итоге  , то решение задачи найдено в виде последовательности  , в противном случае — его не существует[2].

Если последовательность   не сверхвозрастающая (или нормальная), то рюкзаки представляют собой «трудную» проблему, решить которую можно только перебором всех возможных вариантов.

Закрытый ключ в алгоритме Меркла-Хеллмана — это последовательность весов проблемы сверхвозрастающего рюкзака, в свою очередь открытый ключ — это последовательность весов проблемы нормального рюкзака с тем же решением. Существует способ преобразования проблемы сверхвозрастающего рюкзака в проблему нормального рюкзака посредством модульной арифметики. Для того, чтобы получить нормальную последовательность рюкзака, будем использовать сверхвозрастающую последовательность рюкзака. Для примера возьмём последовательность чисел:  , и умножим по модулю   каждый элемент этой последовательности на число  . На   накладывается условие: значение модуля должно быть больше суммы всех элементов последовательности, например,  . А множитель   должен быть взаимно простым числом с модулем, например,  . В таком случае нормальной последовательностью рюкзака будет[2]:

 

 

 

 

 

 

Получаем нормальную последовательность чисел:  . Сверхвозрастающая последовательность рюкзака является закрытым ключом, а нормальная последовательность рюкзака — открытым.

Схема многостороннего разделение секрета

править

Схема многостороннего разделения секрета с использованием сверхвозрастающей последовательности была предложена в 2017 году. Уникальность схемы состоит в том, что она не только является многосторонней, но и реализует структуру последовательного доступа по уровням. В алгоритме используется схема Шамира, а точнее генерация долей секрета, за которой следует фаза восстановления секрета[7].

Приведём алгоритм реализации схемы многостороннего разделения секрета.

Генерация долей секрета [8]

править

Шаг 1.1. Выбирается секрет  , где   — некоторое простое число, которое известное всем сторонам и задаёт конечное поле размера  . Пусть  , где   — количество участников, между которыми нужно разделить секрет  .

Шаг 1.2. Преобразуем секрет   в  -битную псевдослучайную двоичную систему счисления и сформируем последовательность  .

Шаг 1.3. Составим двоичную последовательность длиной   из случайно подобранных элементов:  .

Шаг 1.4. Используем операцию исключающее «ИЛИ» между элементами последовательностей из Шага 1.2 и Шага 1.3. В результате получаем новую последовательность:  .

Шаг 1.5. Построим сверхвозрастающую последовательность случайных чисел длиной  :  .

Шаг 1.6. Вычисляем сумму  , которая будет известна всем участникам. Псевдокод функции:

   Function bugsum(a, b);
   Input:   и  .
   Output: sum.
   sum ;
   for i   r do
        sum   sum    ;
   end
   return sum;

Шаг 1.7. Выбираем простое число  , которое будет объявлено всем участникам, и такое, что:   и   для  , где  число уровней, а  общее количество участников на уровне  .

Шаг 1.8. Распределяем   среди всех участников уровня   с помощью  , где  определяет степень многочлена   схемы Шамира на уровне  . Далее необходимо перевести в десятичную систему элементы последовательности Шага 1.3 и также распределить их по уровню   с помощью  .

Фаза восстановления секрета[8]

править

Шаг 2.1. Как минимум,   участников восстанавливают секрет на уровне   и получают долю   для  .

Шаг 2.2. На первом уровне проверяется, действительно ли выполняется   для суммы, полученной на Шаге 1.6. Если неравенство верно, первый уровень выводит   и отправляет на второй уровень новое значение суммы:  . В противном случае он выводит   и отправляет на следующий уровень   и добавляет свой выходной бит   в пустую последовательность  . Необходимо пройти все уровни, постепенно заполняя последовательность  .

Шаг 2.3. На уровне   выполняется восстановление секрета и заполнение последовательности  . Повторяем вычисления, которые проводились на Шаге 1.4 с операцией исключающее «ИЛИ»:  .

Шаг 2.4. Наконец, получили секретную двоичную последовательность, которую можно преобразовать в десятичную, чтобы получить секрет  .

Примечания

править
  1. Richard A. Mollin, An Introduction to Cryptography (Discrete Mathematical & Applications), Chapman & Hall/CRC; 1 edition (August 10, 2000), ISBN 1-58488-127-5
  2. 1 2 3 4 Schneier, 1993.
  3. Merkle, Hellman, 1978.
  4. Salomaa, 1995.
  5. Merzouga, Ali-Pachab, Hadj-Saidb, Ali-Pachab, 2019.
  6. Мурин, 2011.
  7. Basit, Chanakya, Venkaiah, Abdul Moiz, 2020.
  8. 1 2 Harsha, Chanakya, Vadlamudi China Venkaiah, 2017.

Литература

править
  • Bruce Schneier. Applied Cryptography: Protocols, Algorithms, and Source Code in C. — 1993. — С. 463—465. — ISBN 978-0471117094.
  • Merkle R.C. and Hellman M.E. Trapdoor knapsack. — 1978. — С. 525—526.
  • Salomaa A. Public-Key Cryptography. — 1995.
  • A. Merzouga, A. Ali-Pachab, N. Hadj-Saidb, H. Ali-Pachab. Production of a Super-Increasing Sequence based on the Fibonaci Sequence. — 2019.
  • P. Harsha, P. Chanakya, and Vadlamudi China Venkaiah. A Reusable Multipartite Secret Sharing Scheme Based on Superincreasing Sequence. — 2017.
  • A. Basit, P. Chanakya, V. Ch. Venkaiah and S. Abdul Moiz. New multi-secret sharing scheme based on superincreasing sequence for level-ordered access structure. — 2020.
  • Мурин Д. М. О порядке роста числа инъективных и сверхрастущих рюкзачных векторов. — 2011.

Ссылки

править