ЗАДАЧА О РЮКЗАКЕ - Студенческий научный форум

X Международная студенческая научная конференция Студенческий научный форум - 2018

ЗАДАЧА О РЮКЗАКЕ

Руднева М.С. 1, Курманова С.А. 1
1Сургутский Государственный Педагогический Университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Задача о рюкзаке – одна из задач комбинаторной оптимизации. Задачи о загрузке (о рюкзаке) и её модификации часто возникают в экономике, прикладной математике, криптографии, логистике и генетике. Например, у человека есть рюкзак объёмом V, с которым ему надо отправится в долгое путешествие. Также имеется большое количество предметов (p – штук) объёмом vi, i=0, … , p – 1, которое можно положить в рюкзак. Представим, что человек хороший упаковщик и может заполнить рюкзак, не оставляя в нем свободного места. Чтобы взять максимально возможный груз, сначала нужно определить комплекс предметов, который полностью заполнит рюкзак. Иными словами, требуется найти подмножество I  {1, … , p}, что iI vi = V, если, конечно, оно существует. Это общая задача о рюкзаке. Затем предполагаем, что V и все vi являются натуральными числами. В таком случае, задача может быть поставлена в следующей форме.

Пусть задано множество {vi} из p натуральных чисел и целое число V. Нужно найти такое p-разрядное двоичное число n = (ep-1 ep-2 … e1e0)2 (где e1  {0,1} суть значения разрядов в двоичной записи числа n), что i=0p-1 eivi = V, если, конечно, такое n существует.

Нужно обратить внимание на то, что, в зависимости от значений набора {vi} и числа V, решения может и не быть вовсе, решений может быть несколько или оно будет единственным.

Частным случаем этой задачи считается задача о рюкзаке с быстрорастущим набором. Это случай, когда величины vi, находясь упорядоченными в порядке возрастания, обладают таким свойством, что каждое число больше суммы всех предыдущих чисел.

Пример 1. Набор {1,2,6,13,27} является быстрорастущим.

Вообще известно, что задача о рюкзаке относится к типу очень трудных задач, которые называют «NP-полными задачами». Это значит, что она равноценна по сложности «задаче о коммивояжере». В частности, если верна основная гипотеза теории сложности, в этом уверенно множество специалистов, то не существует такого алгоритма, который бы решал произвольную задачу о рюкзаке за время, полиномиальное по p и по log B, где B – граница для значений V и vi.

Впрочем, задача о рюкзаке с быстрорастущим набором несравненно легче. Просмотрим (упорядоченный по убыванию) список vi, начиная с наибольшего, до тех пор, пока не найдем первый элемент, который не превосходит V. Это значение i мы включим в множество I (т.е. положим ei = 1), заменим V на V – viи продолжим просмотр списка vi по убыванию, пока опять не найдем элемент, не превосходящий эту разность. Продолжая так действовать, мы построим подмножество элементов vi, в сумме равных V, или же используем все элементы vi, не доведя разность V - iIviдо нуля, что будет в случае, когда задача не имеет решения.

Пример 2. Пусть vi = {2,3,7,15,31}, а V = 24. Тогда, проходя пятерку {2,3,7,15,31} справа налево, мы видим, что e4 = 0, e3 = 1 (мы заменяем 24 на 24 – 15 = 9), e2 = 1 (заменяем 9 на 9 – 7 = 2), e1 = 1. Следовательно, n = (01101)2 = 13.

Чтобы построить рюкзачную криптосистему (её еще называют системой Меркля-Хеллмана), сначала нужно предположить, что элементы открытого текста имеют в качестве своих числовых подобий p-разрядные двоичные числа K.

Дальше пользователь выбирает быстрорастущий набор {v0, … , vp-1), целое число m, большее v0 + … + vk-1, и взаимно простое с m целое число a, . Всё это проводится благодаря случайной процедуре.

Любой желающий может передать сообщение K = (ep-1, … , e1, e0) пользователю с ключом шифрования {wi} вычисляет С = f (K) =  i=0k-1 eiwiи передает это целое число.

Для того, чтобы прочитать это сообщение, пользователю сначала нужно найти наименьший положительный вычет V числа bC по модулю m. Так как bC   eibwi  eivi. Этим алгоритмом можно использовать для задачи о рюкзаке с быстрорастущим набором и найти единственное решение задачи о подмножестве с суммой, равной V.

Какое-то время специалисты очень хорошо оценивали потенциал рюкзачных криптосистем. Если задача относится к типу трудных задач, то, они считали, что система должна быть надежна.

Но все же в этих суждениях была ошибка. Вызываемые такими системами задачи о рюкзаке C =  eiwi, хотя они и не соответствуют быстрорастущим наборам, но имеют специфический тип, а именно, получаются из задач с быстрорастущим набором простых преобразованием: умножением всех величин на a и привидением по модулю m. В 1982 году Шамир нашел полиномиальный по p алгоритм решения задач о рюкзаке такого типа. Поэтому такая криптосистема не может считаться надежной криптосистемой с открытым ключом.

В настоящее время еще не найден полиноминальный алгоритм решения итерированной задачи о рюкзаке. Однако Брикелю удалось обобщить алгоритм Шамира и показать, что к итерированной рюкзачной криптосистеме применимы эффективные методы криптоанализа. Но, во всяком случае, после достижения Шамира многие эксперты потеряли доверие к стойкости криптосистем с открытым ключом данного типа.

До сих пор не вскрытая одна рюкзачная система. Теперь стоит описать метод передачи сообщений, основанный на однонаправленной функции рюкзачного типа, который использует многочлены над конечным полем. Эту криптосистему предложили Чор и Райвест.

Представим, что Алиса хочет принимать сообщения в форме наборов из p битов e0, …, ep-1. Её открытым ключом является последовательность натуральных чисел v0, …, vp-1. Но теперь Боб должен посылать ей не только целое число с =  ejvj, но и сумму разрядов с’ =  ej.

Алиса строит последовательность vjследующим способом. Выбор всех параметров, которые упоминаются в этом абзаце, можно делать секретным образом, так как Бобу для посылки сообщения необходим лишь итоговый набор v0, …, vp-1. Сначала Алиса выбирает такую степень простого q=pf, что q – 1 не имеет больших простых делителей, причем, как и p, так и f имеют умеренные значения. Так, в работе Чора и Райвеста 1988 году рассматривалась величина q = 19724. Дальше Алиса выбирает нормированный неразложимый многочлен F(X)  Fp[X] степени f, так что Fq может рассматриваться как Fp[X]/F[X]. Она выбирает также образующий элемент g в F*qи целое число z. Алиса производит выбор F, g, и z каким-нибудь случайным образом.

Пусть i  Fq= Fp[X]/F(X) обозначает класс вычетов, содержащих X. Алиса выбирает в качестве k любое целое число, меньше p и f одновременно. Для j = 0, …, k – 1 она вычисляет такие неотрицательные целые b=q–1, что gbj= t+j. И вот, Алиса делает случайную перестановку  элементов множества {0, …, k-1} и полагает vjравным наименьшему неотрицательному вычету b(j)+z по модулю q–1. Она объявляет (v0, …, vk-1) своим открытым ключом.

Расшифрование происходит следующим образом. После того, как Алиса получила от Боба c и c’, она для начала вычисляет элемент gc-ze’, который единственным образом представляется в виде многочлена G(X)  Fp[X] степени ниже f. Но Алиса знает, что этот элемент также равен Пqeib(j)= П(t+(j))ej, что соответствует многочлену П(X+(j))ej. Так как многочлены G(X) и П(X+(j))ejимеют степень ниже f и представляют собой один и тот же элемент по модулю F(X), должно выполняться равенство

G(X) = П(x+(j))ej.

Теперь Алиса может найти величины ej, деля G(X) на множители.

Список используемых источников

  1. Коблиц, Н. Курс теории чисел и криптографии [Электронный ресурс] – Режим доступа: http://bookre.org/reader?file=437457&pg=268

Просмотров работы: 411