УДК 004.056.55
М. И. Вахрушев, Е. А. Загурских
Новосибирский государственный университет ул. Пирогова, 1, Новосибирск, 630090, Россия
[email protected], [email protected]
РАЗРАБОТКА
КРИПТОГРАФИЧЕСКИХ СИСТЕМ С ОТКРЫТЫМ КЛЮЧОМ, ОСНОВАННЫХ НА ОБОБЩЕНИИ ЗАДАЧИ О РАНЦЕ
Развитие квантовых компьютеров ставит под угрозу множество распространенных на данный момент криптосистем, основанных на задачах факторизации, дискретного логарифмирования и других, которые могут быть решены за полиномиальное время на квантовом компьютере.
Однако на данный момент не предложено алгоритмов, позволяющих за полиномиальное время решать №-полные задачи квантовыми компьютерами. Мы рассматриваем две криптосистемы с открытым ключом, основанные на №-полных задачах о сумме подмножеств и целочисленного программирования.
Ключевые слова: асимметричная криптография, постквантовая криптография, рюкзачная криптография, №-полнота, задача о сумме подмножеств.
Введение
В данной работе рассматриваются два подхода к построению систем шифрования с открытым ключом на основе методов, использующих некоторые обобщения задач subset sum и целочисленного программирования.
Обоснование стойкости предлагаемых алгоритмов основано на том, что в результате шифрования получается система линейных уравнений, в которой число уравнений меньше, чем число неизвестных, к тому же на неизвестные налагаются ограничения. Доказано, что задача решения таких уравнений NP-полна [1]. На данный момент не существует алгоритмов, позволяющих решать данную задачу эффективно с помощью квантовых компьютеров, поэтому предлагаемые алгоритмы являются алгоритмами постквантовой криптографии.
Задача subset sum
Задача subset sum заключается в поиске такого непустого подмножества некоторого набора чисел, что сумма чисел этого подмножества равна нулю. Эту задачу можно считать частным случаем задачи о ранце [2]. В данной статье будем рассматривать эквивалентную subset sum задачу, заключающуюся в нахождении подмножества, сумма элементов которого равна некоторому заданному числу s. Несмотря на то, что обе эти задачи являются NP-полными, существуют такие наборы чисел, для которых задачи легко решаются за полиномиальное время.
В данном параграфе рассматриваются методы построения таких наборов целых положительных чисел, что всевозможные суммы различных чисел не совпадают. Другими словами,
Вахрушев М. И., Загурских Е. А. Разработка криптографических систем с открытым ключом, основанных на обобщении задачи о ранце // Вестн. Новосиб. гос. ун-та. Серия: Информационные технологии. 2016. Т. 14, № 4. С. 31-38.
ISSN 1818-7900. Вестник НГУ. Серия: Информационные технологии. 2016. Том 14, № 4 © М. И. Вахрушев, Е. А. Загурских, 2016
если нам известно некоторое число, то можно однозначно, с точностью до перестановки, найти те числа, сумма которых равна данному числу. Для таких наборов чисел легко решить задачу subset sum.
Один из вариантов такого набора - сверхвозрастающая (супервозрастающая) последовательность [3], однако для последовательностей такого вида имеет место проблема, заключающаяся в том, что представимые числа расположены очень редко. Приведем другой алгоритм построения наборов чисел, избавленных от данного недостатка.
Алгоритм 1
Будем одновременно строить две последовательности: сам набор чисел и набор всех возможных сумм элементов первого набора.
1. Прежде всего, в последовательность сумм записывается число 0, которое означает, что для составления суммы никаких чисел не берется.
2. Теперь выберем первое натуральное число X. Множество возможных сумм на данном этапе: {0, X}.
3. Далее будем последовательно, до момента достижения необходимой длины последовательности, выбирать некоторое число, не представимое в виде сумм предыдущих и большее любого из уже выбранных чисел.
Заметим, что всевозможные суммы различных чисел полученного набора не совпадают по построению и получившаяся последовательность не будет обязательно супервозрастаю-щей. Кроме того, из построенных таким образом наборов чисел можно строить другие, воспользовавшись сильным модульным умножением [4].
Приведем два алгоритма построения новых последовательностей с помощью сильного модульного умножения. Пусть дана некоторая последовательность целых положительных чисел {aj} и последовательность возможных сумм ее элементов {¿j}. Выберем некоторое число z, большее максимальной возможной суммы, и посчитаем количество обратимых элементов по модулю данного числа, воспользовавшись функцией Эйлера. Пусть существует N обратимых элементов, тогда с помощью модуля z мы можем построить N - 1 новую последовательность каждым из алгоритмов (не N, так как среди обратимых элементов будет 1). Рассмотрим предлагаемые алгоритмы:
Алгоритм 2.1
Выбираем любой обратимый элемент x по модулю z и преобразовываем последовательность {aj} в {ax mod(z)}, а последовательность сумм {¿j} пересчитываем заново, с учетом изменений в исходной последовательности.
Алгоритм 2.2
Выбираем любой обратимый элемент x по модулю z и добавляем к последовательности {aj} последовательность {ax mod(z)}, тем самым удлиняя исходный набор чисел в два раза. Последовательность сумм {¿j} также необходимо пересчитать. Далее применяем Алгоритм 2.1 к новой последовательности и на выходе получаем новый набор чисел.
Пример 1
Ниже приводится пример построения набора чисел из 4 элементов с помощью Алгоритма 1:
• Пусть выполнен первый пункт алгоритма и на втором этапе в первый раз было выбрано число 5, тогда текущая последовательность чисел - {5} и возможные суммы - {0, 5}. Будем выполнять третий пункт алгоритма.
• Пусть сначала выбрали число 7, оно не может быть представлено в виде сумм 0 и 5 и больше обоих этих чисел. Тогда имеем набор {5, 7} и возможные суммы {0, 5, 7, 12}. Кандидаты на следующее число находятся в множестве чисел больших 7 и не равных 12.
• Пусть следующее число 11, значит, получаем набор чисел {5, 7, 11} и набор сумм {0, 5, 7, 11, 12, 16, 18, 23}. Следующее число должно быть больше 11 и не входить в множество {0, 5, 7, 11, 12, 16, 18, 23}.
• Пусть это 14, значит, последовательность - {5, 7, 11, 14} и возможные суммы - {0, 5, 7, 11, 12, 14, 16, 18, 19, 21, 23, 25, 26, 30, 32, 37}.
• Последовательность требуемой длины построена
Пример 2
Приведем примеры построения из последовательности {5, 7, 11, 14} других с помощью сильного модульного умножения.
Рассмотрим последовательность возможных сумм {0, 5, 7, 11, 12, 14, 16, 18, 19, 21, 23, 25, 26, 30, 32, 37}. Максимальное возможное значение суммы - 37. Для начала воспользуемся Алгоритмом 2.1. Выберем некоторое число большее этого значения, например 44. Обратимых элементов по модулю 44: ^(44) = ^(4x11) = 2 X 10 = 20, значит можно изготовить 19 новых последовательностей (не 20, т.к. 1x1 = 1mod(44)). Например, рассмотрим число 5, обратным является 9, т.к 5x9 = 1mod(44). Значит относительно сильного модульного умножения на 5 последовательность {5, 7, 11, 14} перейдет в последовательность {25, 35, 11, 26}, а последовательность сумм перейдет в новую - {0, 11, 25, 26, 35, 36, 37, 46, 51, 60, 61, 62, 71, 72, 86, 97}.
Воспользуемся Алгоритмом 2.2 построения нового набора чисел. Выберем число, большее 37, например, 39. Тогда промежуточной последовательностью будет {5,7,11,14,5 X 39,7 X 39,11 X 39,14 X 39} = {5,7,11,14,195,273,429,546}. Максимальная сумма равна 1480. Заметим, что 31 X 48 = 1mod(1487) и 1480 < 1487. Применим сильное модульное умножение и получим новую последовательность {0, 240, 336, 528, 672, 438, 1208, 1261, 929}, которая имеет длину в два раза больше, чем исходная.
Прямой подход
Построение ключей
Рассмотрим матрицу B Е ZXn, k < n/2, строки которой построены следующим образом. Пусть N=[n/k], тогда первые (i-1) Nэлементов i-й строки (i =1...k) - случайные, следующие N элементов - последовательность, являющаяся легко разрешимой для задачи subset sum, например, построенная одним из вышеописанных алгоритмов, остальные элементы - нулевые. Система уравнений вида Вх = у (1) при x Е {0,1}n либо не имеет решения, либо имеет единственное решение, которое находится за полиномиальное время. По построению B эту систему легко решить следующим образом: из первого уравнения находим первые N бит сообщения путем последовательного деления с остатком правой части уравнения на коэффициенты, начиная с наибольшего элемента легко разрешимой последовательности. Частное от каждого деления будет являться соответствующим битом сообщения, а остаток -делимым, используемым при вычислении следующего бита, и т. д.
Далее необходимо замаскировать матрицу B. Обозначим новую, замаскированную, матрицу A и выберем число строк в ней m Е [k, n/2]. Для начала, первые k строк новой матрицы выберем равные строкам матрицы B, а остальные выберем произвольные. Соответствующим образом расширив правую часть, получим систему уравнений (2): Ах = у, которая, так же, как и система (1) при x Е {0;1}n, имеет единственное решение, если оно существует. Для увеличения криптостойкости можно осуществить перестановку уравнений системы.
Следующим шагом находим максимальную сумму по строке (максимум среди максимально возможных значений правой части разрешимой системы (2)) матрицы A. Выберем некоторое p, большее этой суммы, и произвольную матрицу H Е Z"Xm, обратимую в кольце по модулю p.
Теперь изготовим из матриц А и Н матрицу Я: Я = НАтой{р). Полученная матрица Я будет являться открытым ключом, а матрицы В, А и Н - закрытым. Система уравнений теперь принимает вид (3): Ях = Нутой{р) и она также, при хП {0;1}п, имеет единственное решение, если оно существует.
Алгоритм 3 (шифрование)
Пусть имеем сообщение e Е {0;1}п. Шифротекст получаем умножением на матрицу Я:
Алгоритм 4 (дешифрование)
Процедура дешифрования шифротекста представляет собой следующий алгоритм.
1. Первым делом возвращаемся к системе (2) путем домножения на матрицу, обратную к Н: Я_1с = Н~1НАетой(р)Ае ^ Н~гстой(р)
2. Полученную систему мы можем решить (предварительно осуществив обратную перестановку, если мы переставляли строки на этапе построения ключей), сведя ее к виду (1) путем отбрасывания маскирующих уравнений.
3. Систему вида (1) мы можем решить в силу знания матрицы В и способа построения ее строк.
Пример 3
Построение ключей
Рассмотрим в качестве примера систему вида (1), в которой будет 2 уравнения и 10 неизвестных. Пусть матрица В образована с помощью двух последовательностей, таких, что всевозможные суммы различных чисел не совпадают, например последовательностями {2, 3, 7, 14, 27} и {4, 5, 10, 17, 41}. Первая последовательность задает коэффициенты при х1, х2, х3, х4, х5 в первом уравнении, а вторая - коэффициенты при х6, х7, х^, х9, х10 во втором. Таким образом,
В = (2 3 7 14 27 0 0 0 0 0 \ 13 12 7 2 1 4 5 10 21 41
Система уравнений Вх = Ь имеет вид
2хх + 3х2 + 7х3 + 14х4 + 27х5 + 0х6 + 0х7 + 0х8 + 0х9 + 0х10 = Ьг 3хх + 12х2 + 7х3 + 2х4 + 1х5 +4х6 + 5х7 + 10х8 + 21х9 + 41х10 = ь2
Добавив еще два произвольных уравнения, получаем матрицу
А =
3 7 14 27 0 0 0 0 0
12 7 2 1 4 5 10 21 4
4 1 40 2 3 7 2 3 21
11 3 2 10 7 4 1 1 8
Система уравнений Ах = Ь представляет собой систему вида (2)
2х1 + 3х2 + 7х3 + 14х4 + 27х5 + 0х6 + 0х7 + 0х8 + 0х9 + 0х10 = Ь1 3хх + 12х2 + 7х3 + 2х4 + 1х5 +4х6 + 5х7 + 10х8 + 21х9 + 41х10 = ь2 5хх + 4х2 + 1х3 +40х4 + 12х5 + 3х6 + 7х7 + 2х8 + 3х9 + 21х10 = ь3 0хг + 11х2 + 3х3 + 2х4 + 10х5 + 7х6 + 4х7 + 1х8 + 11х9 + 8х10 = Ь4
Следующим шагом находим максимальные значения для правых частей системы уравнений: т1=тах(Ь1)=53, т2=тах(Ь2)=106, т3=тах(Ь3)=98, т4=тах(Ь4)=57, тах{ти т2, т3, т4}=106. Возьмем простоер=149>106 и матрицу Н:
Матрица обратима, так как ёв((Н)=114 и gcd(106, 149)=1. Теперь получим матрицу Я = НАтойр:
Таким образом, построенная матрица Я является открытым ключом, а матрицы В, А и Н -закрытым.
Шифрование
Пусть необходимо зашифровать сообщение е=(1, 0, 0, 1, 0, 1, 1, 1, 0, 0). Вычисляя с = ^ получим шифротекст с = (244,581,128,42).
Дешифрование
Имея шифротекст с и набор матриц из приватного ключа, восстановим сообщение е:
1. Домножаем уравнение с = НАе на Н1:
2% + 3х2 + 7х3 + 14х4 + 27х5 + 0х6 + 0х7 + 0х8 + 0х9 + 0х1О = 16 3хх + 12х2 + 7х3 + 2х4 + 1х5 + 4х6 + 5х7 + 10х8 + 21х9 + 41х10 = 24 5хг + 4х2 + 1х3 + 40х4 + 12х5 + 3х6 + 7х7 + 2х8 + 3х9 + 21х10 = 57 0хг + 11х2 + 3х3 + 2х4 + 10х5 + 7х6 + 4х7 + 1х8 + 11х9 + 8х10 = 14
2. Мы знаем, что два последних уравнения не являются для нас существенными. Кроме того, мы знаем, что первые два уравнения построены с использованием специальных последовательностей, которые гарантируют, что всевозможные суммы разных чисел не совпадают. Из первого уравнения найдем первые 5 бит сообщения: е5=16/27=0, е4=16/14=1, е3=(16-14)/7=0, е2=2/3=0, е=2/2=1.
3. Аналогично найдем остальные биты сообщения из второго уравнения, полностью восстановив исходное сообщение е=(1, 0, 0,1, 0,1,1,1, 0, 0).
Двойственный подход
Построение ключей
Рассмотрим систему уравнений вида (1) Ах = Ь, где А Е ^>Хт, Ь Е и сопоставим ей однородную систему Ах = 0. Заметим, что для увеличения стойкости алгоритма наравне с системой (1) можно рассматривать и системы (2) или (3), вся разница будет заключаться только в сложности решения конечной системы уравнений в фазе дешифрования, однако устойчивость схемы зависит не от этого фактора.
Для построения ключей необходимо найти максимальный набор линейно независимых решений этой системы, который состоит из п-т векторов. Один из стандартных способов решения этой системы рассматривается в Примере 5.
Пусть ...х>п-т - полный набор решений. Выберем некое число Ы<п-т и любые N векторов (или N линейных комбинаций векторов) из этого набора. Пусть это вектора % ...и^. Далее выберем некоторое целое число М и сгенерируем N случайных векторов а1 ...ам длины М, после чего построим вектора ...жм длины п следующим образом:
Я =
27 115 76 60 108 42 43 72 20 5
62 9 96 101 125 59 90 120 97 109
10 19 5 82 34 13 18 5 17 50
0 33 9 6 30 21 12 3 33 24
N
Од и_/ Л = 1... М
7 = 1
Эти векторы также ортогональны векторам матрицы Л и являются открытым ключом, а матрица А - закрытым. Заметим, что для увеличения стойкости алгоритма можно выполнить перестановку векторов и^ ...№м. Кроме того, количество векторов М должно быть выбрано таким образом, чтобы ранг матрицы, для которой эти вектора являются столбцами, не был максимальным, т.е. равным п.
Теперь рассмотрим алгоритмы шифрования и дешифрования в данной криптосистеме.
Алгоритм 5 (шифрование)
На вход алгоритм принимает вектор е длины п, такой, что ег 6 {0; 1},£ 6 [1...п]. Для начала выбираются М случайных чисел Л1 ...Лм и после этого выполняется шифрование: с = + е. Построенный вектор с - шифротекст для сообщения е.
Алгоритм 6 (дешифрование)
Алгоритм принимает на вход вектор с длины п. Для расшифровки сначала вычисляется произведение у = Ас. Т.к. вектора и^ ...шм ортогональны строкам А, то Awi = 0, ¿ = 1 ...М, а значит, у = Ас = Ае. Данную систему известно, как решать, а значит, вектор сообщения е находится с помощью описанного алгоритма.
Рассмотрим пример использования криптосистемы, основанной на двойственном подходе.
Пример 4
Рассмотрим систему уравнений (4):
2хх + 3х2 + 7х3 + 14х4 + 27х5 + 0х6 + 0х7 + 0х8 + 0х9 + 0х1о = ьг 3хг + 12х2 + 7х3 + 2х4 + 1х5 +4х6 + 5х7 + 10х8 + 17х9 + 41х10 = Ь2
С данной системой сопоставим однородную систему уравнений
2х1 + 3х2 + 7х3 + 14х4 + 27х5 + 0х6 + 0х7 + 0х8 + 0х9 + 0х1О = 0 3хх + 12х2 + 7х3 + 2х4 + 1х5 + 4х6 + 5х7 + 10х8 + 17х9 + 41х10 = 0
Эта система имеет 8 линейно независимых решений, которые необходимо найти для построения открытого ключа. Пусть а;=(2, 3, 7, 14, 27, 0, 0, 0, 0, 0), а2=(3,12, 7, 2,1, 4, 5, 10, 17,
41), тогда матрица системы (1) А = (д1).
Построение ключей
Рассмотрим один из возможных способов решения однородной системы. Заметим, что матрица при первых двух переменных: С = ^ Ц, ее определитель det=15. Если планируется решать данную систему в целых числах, то желательно, чтобы определитель равнялся 1. Этого можно добиться выбором другого набора случайных чисел во второй строчке уравнения.
Теперь применим стандартный подход к решению этой системы. Построим матрицу Ь с определителем 1 такую, что и = ЬС - верхнетреугольная матрица. Напимер, при Ь =
С3 2) получим: у=(0 1).
Умножим систему (5) слева на матрицу L, получим эквивалентную систему уравнений (6):
1хх + 9х2 + 0х3 — 12х4 — 26х5 +4х6 + 5х7 + 10х8 + 17х9 + 41х10 = 0 0хг + 15х2 -7Х3 — 38Х4 — 79Х5 + 8Х6 + 10Х7 + 20Х8 + 34Х9 + 82Х10 = 0
В данной системе во втором уравнении есть два взаимно простых числа -7 и 10 при x3 и x7 соответственно. Это означает, что переменные x2, x4, x5, x6, x8, x9, x10 можно выбирать произвольно. Для упрощения примера выберем x2=x4=x5=x6=x8=x9=x10=1, подставим эти значения во второе уравнение системы и получим уравнение 7х3 — 10х7 = 42.
Используя алгоритм Евклида найдем переменные x3 и x7: x3=6, x7=0. Теперь подставим в первое уравнение системы (3) полученные значения и найдем x1=-78. В результате получим первое решение однородной системы: u1=(-43,1, 6,1,1,1, 0,1,1, 1).
Повторив описанные выше действия для других пар взаимно простых чисел из коэффициентов второго уравнения системы (6) найдем полный набор решений системы однородных уравнений (5). Кроме того, можно рассмотреть матрицу С при других переменных системы, построить для нее матрицу L и повторить дальнейшие рассуждения. Если же уравнений в исходной системе больше двух, то рассуждения аналогичны.
Пусть N=2, тогда нужно найти еще одно решение. В этот раз рассмотрим пару взаимно простых чисел 15 и 8 при x2 и x6 и, повторив вышеописанные действия, найдем решение U2= =(-33, 6, 1, 1, 1, -14,1,1,1,1).
Полученные вектора u1, u2 ортогональны векторам-строкам матрицы B по построению. Далее выберем M=3 и построим вектора открытого ключа w1, w2, w3, выбрав случайные вектора ах = (1,2,3) и а2 = (5,6,7): w=(-208, 31, 11, 6, 6, -69, 5, 6, 6, 6), W2=(-284, 38, 18, 8, 8, -82, 6, 8, 8, 8), w3=(-360, 45, 25, 10,10, -95, 7, 10, 10,10). Эти вектора также ортогональны векторам a1, a2 и являются элементами открытого ключа. В то же время матрица A - секретный ключ.
Шифрование
Пусть сообщением является вектор e=(0,1, 0,1, 0,1, 0,1, 0, 1). Выберем случайно 4 целых числа А1 = 10, А2 = 2,Л,3 = 5 и вычислим шифротекст:
с = A1w1 + A2w2 +A3w3 + е В данном примере получим c=(-3369, 429, 293, 84, 83, -951,167, 84, 83, 83).
Дешифрование
Вычисляем
у = Ас = A1Aw1 +A2Aw2 +A3Aw3 + Ае = Ае
Решая систему уравнений Ае = у = (17,69) согласно методу, описанному в параграфе 2, находим вектор зашифрованного сообщения e=(0,1, 0,1, 0,1, 0,1, 0, 1).
Заметим, что для упрощения примера были выбраны заведомо неудачные «случайные» числа на разных этапах алгоритма, вследствие чего по шифротексту можно догадаться об элементах сообщения и секретного ключа.
Основным недостатком описанного подхода является рост размера ключа, поскольку все вычисления проводятся в целых числах. Однако эту проблему можно устранить, если выполнять все вычисления по некоторому модулю p, выбранному больше максимальной возможной суммы последовательности чисел, состоящей из коэффициентов уравнений системы.
Заключение
В данной работе предложено два способа построения криптосистем, основанных на обобщении частного случая задачи о ранце - задачи subset sum. Рассмотренные подходы ос-
нованы на том факте, что кольцо целых чисел является евклидовым. Таким образом, возможно построение криптографических систем на базе других евклидовых колец, например, на базе кольца многочленов с коэффициентами из конечного поля. Однако это тема для отдельных исследований, не рассматриваемых в данной работе.
Список литературы
1. Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ. 3-е изд. М.: Вильямс, 2013. 1328 с.
2. Martello S., Toth P. Knapsack problems: Algorithms and computer interpretations. Wiley-Interscience, 1990. 306 с.
3. Шнайер Б. Прикладная криптография: протоколы, алгоритмы, исходные тексты на языке Си. М.: Триумф, 2002. 610 c.
4. СаломааА. Криптография с открытым ключом. M.: Мир, 1995. 320 с.
Материал поступил в редколлегию 23.08.2016
M. I. Vakhrushev, E. A. Zagurskikh
Novosibirsk State University 1 Pirogov Str., Novosibirsk, 630090, Russian Federation
[email protected], [email protected]
DESIGN OF KNAPSACK CRYPTOSYSTEMS
The development of quantum computers endangers the great number modern cryptosystems based on factorization problem, discrete logarithm problem and other, which can be solved in polynomial time on a quantum computer. However, quantum computing algorithms can't efficiently solve NP-hard problems at present. In this paper, we consider two public key cryptosystems based on NP-hard problems: subset sum and integer programming.
Keywords: post-quantum cryptography, knapsack public-key cryptosystem, subset sum problem, NP-hard, knapsack problem.
References
1. T. Cormen, C. Leiserson, R. Rivest, C. Stein. Introduction to Algorithms. 3rd. MIT Press, 2009. 1312 p.
2. S. Martello, P. Toth. Knapsack problems: Algorithms and computer interpretations. Wiley-Interscience, 1990. 306 p.
3. B. Schneier. Applied Cryptography: Protocols, Algorithms, and Source Code in C. John Wiley & Sons, 1996. 784 p.
4. A. Salomaa. Public-Key Cryptography - Springer Science & Business Media, 1996. 275 p.