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

Материал из testwiki
Версия от 10:32, 19 января 2025; 46.138.63.251 (обсуждение) (Сверхвозрастающие рюкзаки: исправление)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

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

n>1 : sn>j=1n1sj

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

Например, {1,3,6,13,27,52} является сверхвозрастающей, а {1,3,4,9,15,25} — нет.

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

Пусть перед нами стоит задача построить сверхвозрастающую последовательность {sn}1N для некоторого количества объектов N. Элемент s1 выбирается случайным образом из равномерного распределения натуральных чисел по такому отрезку: [1,2N]. Следующий элемент s2 выбирается равномерно из отрезка [12N+1,22N], идущий за ним член последовательности выбирается из отрезка [32N+1,42N], элемент sn случайным образом выбирается из отрезка [(2n11)2N+1,2n12N]. Очевидно, что при подобных распределениях членов последовательности условие сверхвозрастаемости будет выполняться, так как нижняя граница каждого отрезка в точности равна увеличенной на единицу сумме всех правых границ предыдущих отрезковШаблон:Sfn. Для примера построим таким способом несколько сверхвозрастающих последовательностей при N=5:

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

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

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

sn>h+j=1n1sj

Пусть h=10, s1=9. Тогда, для примера, последовательность {9,20,52,100,192} удовлетворяет условию и является сверхвозрастающей.

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

Шаблон:Основная статья Каждый элемент последовательности Фибоначчи удовлетворяет соотношению: un+1=un+un1, нулевой и первый члены которого: u0=0,u1=1. Из этого видно, что первые члены последовательности Фибоначчи: {0,1,1,2,3,5,8,13,21,34,55,89,...}. Иногда можно столкнуться с обобщенной последовательностью Фибоначчи. Это последовательность, члены которой выполняют условие уравнения: un+1=aun+bun1. То есть обобщённая последовательность получается из классической путем изменения первых двух членов последовательности Фибоначчи и сохраняет принцип образования следующих членов. Для построения сверхвозрастающей последовательности используется форма именно обобщённой последовательности Фибоначчи. Для того, чтобы вычислить любой член сверхвозрастающей последовательности {sn}1N, необходимо выбрать четыре элемента: два начальных (s1 и s2) и два положительных множителя (a и b)Шаблон:Sfn.

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

  1. Последовательность удовлетворяет условию сверхвозрастаемости при s1<s2,ab.
  2. Последовательность не является сверхвозрастающей при a>b.
  3. При s1>s2,ab последовательность начинает удовлетворять условию сверхвозрастаемости после нескольких итераций.
  4. При s1<s2,T=ab<0.669 последовательность остаётся сверхвозрастающей.

Для примера возьмём s1=2,s2=3,a=5,b=7. Первые элементы полученной сверхвозрастающей последовательности: {2,3,53+72,529+73,5166+729}={2,3,29,166}.

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

Условию сверхроста удовлетворяет ряд степеней числа 2 . Зная сверхвозрастающую последовательность {sn}1N, можно построить новую {sn'}1N с помощью набора {1,2,22,...,2N1}. Для реализации необходимо применить к {sn}1N набор следующих операцийШаблон:Sfn:

n=1:{s1+1,s2+1,s3+2,...,sN1+2N3,sN+2N2}

n=k:{s1,s2,s3,...,sk+1,sk+1+1,...,sN1+2Nk2,sN+2Nk1}

...

n=N1:{s1,s2,s3,...,sN1+1,sN+1}

n=N:{s1,s2,s3,...,sN1,sN+1}

Подробный пример для выбранной сверхвозрастающей последовательности {3,6,13,27,52,105}:

s1 s2 s3 s4 s5 s6
3 6 13 27 52 105
n=1 3+1=4 6+1=7 13+2=15 27+22=31 52+23=60 105+24=121
n=2 4 7+1=8 15+1=16 31+2=33 60+22=64 121+23=129
n=3 4 8 16+1=17 33+1=34 64+2=66 129+22=133
n=4 4 8 17 34+1=35 66+1=67 133+2=135
n=5 4 8 17 35 67+1=68 135+1=136
n=6 4 8 17 35 68 136+1=137

Получили новую сверхвозрастающую последовательность {sn'}1N={4,8,17,35,68,137}.

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

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

Шаблон:Основная статья Криптосистема Меркла-Хеллмана основана на «задаче о рюкзаке» — алгоритме шифрования с открытым ключом — описанном ниже. Задача выглядит следующим образом: задана последовательность {an}1N неповторяющихся положительных целых чисел. Пусть число k также принадлежит множеству натуральных чисел. Если такое возможно, необходимо найти набор псевдослучайной двоичной последовательности {bn}1N, чтобы выполнялось условие: k=b1a1+b2a2+...+bnanШаблон:Sfn.

Пусть {an}1N — сверхвозрастающая последовательность. В таком случае мы сталкиваемся с «лёгкой» проблемой рюкзака, которую не составляет труда решить. Для этого k сравнивается с элементом an. Если kan, то bn=1, значение k уменьшается на an и происходит переход к члену последовательности an1. Действие повторяется, пока процесс не закончится. Если в итоге k=0, то решение задачи найдено в виде последовательности {bn}1N, в противном случае — его не существуетШаблон:Sfn.

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

Закрытый ключ в алгоритме Меркла-Хеллмана — это последовательность весов проблемы сверхвозрастающего рюкзака, в свою очередь открытый ключ — это последовательность весов проблемы нормального рюкзака с тем же решением. Существует способ преобразования проблемы сверхвозрастающего рюкзака в проблему нормального рюкзака посредством модульной арифметики. Для того, чтобы получить нормальную последовательность рюкзака, будем использовать сверхвозрастающую последовательность рюкзака. Для примера возьмём последовательность чисел: {2,3,7,13,27,61}, и умножим по модулю m каждый элемент этой последовательности на число n. На m накладывается условие: значение модуля должно быть больше суммы всех элементов последовательности, например, m=115. А множитель n должен быть взаимно простым числом с модулем, например, n=31. В таком случае нормальной последовательностью рюкзака будетШаблон:Sfn:

231mod115=62;

331mod115=93;

731mod115=102;

1331mod115=58;

2731mod115=32;

6131mod115=51.

Получаем нормальную последовательность чисел: {62,93,102,58,32,51}. Сверхвозрастающая последовательность рюкзака является закрытым ключом, а нормальная последовательность рюкзака — открытым.

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

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

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

Генерация долей секрета Шаблон:Sfn

Шаг 1.1. Выбирается секрет sp{0}, где p — некоторое простое число, которое известное всем сторонам и задаёт конечное поле размера p. Пусть p=2l1, где l — количество участников, между которыми нужно разделить секрет s.

Шаг 1.2. Преобразуем секрет s в (l1)-битную псевдослучайную двоичную систему счисления и сформируем последовательность st={sl1,sl2,sl3,...,s3,s2,s1}.

Шаг 1.3. Составим двоичную последовательность длиной l1 из случайно подобранных элементов: {el1,el2,el3,...,e3,e2,e1}.

Шаг 1.4. Используем операцию исключающее «ИЛИ» между элементами последовательностей из Шага 1.2 и Шага 1.3. В результате получаем новую последовательность: st'={sl1el1,sl2el2,sl3el3,...,s3e3,s2e2,s1e1}={sl1',sl2',sl3',...,s3',s2',s1'}.

Шаг 1.5. Построим сверхвозрастающую последовательность случайных чисел длиной l1: w={wl1,wl2,wl3,...,w3,w2,w1}.

Шаг 1.6. Вычисляем сумму u=bagsum(st',w), которая будет известна всем участникам. Псевдокод функции:

   Function bugsum(a, b);
   Input: a={a1,...,ar} и b={b1,...,br}.
   Output: sum.
   sum0;
   for i  r do
        sum  sum + ai×bi;
   end
   return sum;

Шаг 1.7. Выбираем простое число q, которое будет объявлено всем участникам, и такое, что: w1+w2+w3+...+wl1<q и max(ni) для 1il, где iчисло уровней, а niобщее количество участников на уровне i.

Шаг 1.8. Распределяем wi среди всех участников уровня i с помощью (ti,ni), где ti<niопределяет степень многочлена F(x) схемы Шамира на уровне i. Далее необходимо перевести в десятичную систему элементы последовательности Шага 1.3 и также распределить их по уровню l с помощью (tl,nl).

Фаза восстановления секретаШаблон:Sfn

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

Шаг 2.2. На первом уровне проверяется, действительно ли выполняется uw1 для суммы, полученной на Шаге 1.6. Если неравенство верно, первый уровень выводит 1 и отправляет на второй уровень новое значение суммы: u1,2'=uw1. В противном случае он выводит 0 и отправляет на следующий уровень u1,2'=u и добавляет свой выходной бит 0 в пустую последовательность st'. Необходимо пройти все уровни, постепенно заполняя последовательность st'.

Шаг 2.3. На уровне l выполняется восстановление секрета и заполнение последовательности {el1',el2',el3',...,e3',e2',e1'}. Повторяем вычисления, которые проводились на Шаге 1.4 с операцией исключающее «ИЛИ»: st={el1'sl1',el2'sl2',el3'sl3',...,e3's3',e2's2',e1's1'}.

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

Примечания

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

Литература

Ссылки

  1. Richard A. Mollin, An Introduction to Cryptography (Discrete Mathematical & Applications), Chapman & Hall/CRC; 1 edition (August 10, 2000), ISBN 1-58488-127-5