Сверхвозрастающая последовательность (Vfyj]fk[jgvmgZpgx hkvly;kfgmyl,ukvm,)
Сверхвозрастающей называется последовательность, каждый член которой больше суммы всех предыдущих членов. Более формально, последовательность положительных целых чисел — сверхвозрастающая, если выполнено условие[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].
Получаем следующие случаи:
- Последовательность удовлетворяет условию сверхвозрастаемости при .
- Последовательность не является сверхвозрастающей при .
- При последовательность начинает удовлетворять условию сверхвозрастаемости после нескольких итераций.
- При последовательность остаётся сверхвозрастающей.
Для примера возьмём . Первые элементы полученной сверхвозрастающей последовательности: .
Построение по имеющейся сверхвозрастающей последовательности
[править | править код]Условию сверхроста удовлетворяет ряд степеней числа . Зная сверхвозрастающую последовательность , можно построить новую с помощью набора . Для реализации необходимо применить к набор следующих операций[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. Наконец, получили секретную двоичную последовательность, которую можно преобразовать в десятичную, чтобы получить секрет .
Примечания
[править | править код]- ↑ Richard A. Mollin, An Introduction to Cryptography (Discrete Mathematical & Applications), Chapman & Hall/CRC; 1 edition (August 10, 2000), ISBN 1-58488-127-5
- ↑ 1 2 3 4 Schneier, 1993.
- ↑ Merkle, Hellman, 1978.
- ↑ Salomaa, 1995.
- ↑ Merzouga, Ali-Pachab, Hadj-Saidb, Ali-Pachab, 2019.
- ↑ Мурин, 2011.
- ↑ Basit, Chanakya, Venkaiah, Abdul Moiz, 2020.
- ↑ 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.