Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асимметричные криптоалгоритмы.doc
Скачиваний:
8
Добавлен:
08.09.2019
Размер:
133.12 Кб
Скачать

Алгоритмы рюкзака

Первым алгоритмом для обобщенного шифрования с открытым ключом стал алгоритм рюкзака, разработанный Ральфом Мерклом и Мартином Хеллманом. Безопасность алгоритмов рюкзака опирается на проблему рюкзака, NP – полную пробему. Хотя позже было обнаружено, что этот алгоритм небезопасен, его стоит изучать, так как он демонстрирует возможность применения NP – полной проблемы в криптографии с открытыми ключами.

Проблема рюкзака несложна. Дана куча предметов различной массы, можно ли положить некоторые из этих предметов в рюкзак так, чтобы масса рюкзака стала равна определенному значению? Более формально, дан набор целых положительных чисел М1, М2,. .. , Мn еще одно положительное целое число S.

Задачей является нахождение таких bi, что

S = b1M1 + b2М2 + . . . + bnMn

Bi может быть либо нулем, либо единицей. Единица показывает, что предмет кладут в рюкзак, а ноль – что не кладут.

Например, массы предметов могут иметь значения 1, 5, 6, 11, 14 и 20. Вы можете упаковать рюкзак так, чтобы его масса стала равна 22, использовав массы 5, 6 и 11. Невозможно упаковать рюкзак так, чтобы его масса была равна 24. В общем случае время, необходимое для решения этой проблемы, с ростом количества предметов в куче растет экспоненциально.

В основе алгоритма рюкзака Меркла-Хеллмана лежит идея шифровать сообщение как решение набора проблем рюкзака. Предметы из кучи выбираются с помощью блока открытого текста, по длине равного количеству предметов в куче (биты открытого текста соответствуют значениям b), а шифртекст является полученной суммой.

Открытый текст

1 1 1 0 0 1

0 1 0 1 1 0

0 0 0 0 0 0

0 1 1 0 0 0

Рюкзак

1 5 6 11 14 20

1 5 6 11 14 20

1 5 6 11 1420

1 5 6 11 14 20

Шифротекст

1+5+6+20=32

5+11+14=30

0=0

5+6=11

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

Фокус в том, что на самом деле существуют две различные проблемы рюкзака, одна решается за линейное время, а другая, как считается, — нет. Легкую проблему можно превратить в трудную. Открытый ключ представляет собой трудную проблему, которую легко использовать для шифрования, но невозможно для дешифрирования сообщений. Закрытый ключ является легкой проблемой, давая простой способ дешифрировать сообщения. Тому, кто не знает закрытый ключ, придется попытаться решить трудную проблему рюкзака.

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

Существуют подклассы легких задач укладки рюкзака. Один из них получается из сверхрастущих n-наборов А. n-Набор

A= (a1, a2,...,an)

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

Решение сверзвозрастающего рюкзака найти легко. Возьмите полный вес и сравните его с самым большим числом последовательности. Если полный вес больше или равен этому числу, то оно кладется в рюкзак. Уменьшим массу рюкзака на это значение и перейдем к следующему по величине числу последовательности. Будем повторять, пока процесс не закончится. Если полный вес уменьшится до нуля, то решение найдено.

Если мы раскрываем сверхрастущий набор А как основу криптосистемы, то расшифрование будет одинаково легким для криптоаналитика и легального получателя. Чтобы избежать этого, мы "взболтаем" А таким образом, чтобы результирующий набор В не являлся сверхрастущим и выглядел как произвольный вектор рюкзака. В действительности он только выглядит как произвольный, потому что очень немногие «векторы рюкзака» могут быть получены таким способом: используемое нами взбалтывание является модульным умножением.