Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

11.6.4Обратно к шифрованию

Обратите внимание, что, если значение х неотрицательно и меньше, чем модуль т, то х (mod m) равно х. Это значит, что при выполнении арифметических операций, обычные результаты которых лежат в диапазоне от 0 до т - 1, в модульной системе мы получим те же результаты. Так, если взять очень большое значение модуля, то можно выполнять обычные арифметические вычисления, даже не зная, находимся ли мы в традиционной арифметической системе или в модульной системе. В частности, так как сумма всех значений в списке 1 4 6 12 25 51 105 210 421 850

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

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

a, аг а3 я4 а5 а6 а7 а8 а9 аю

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

Если мы умножим каждую запись исходного списка на х, то получим список

а.\Хагх агх atx аъх а6х а7х asx a9x а1Ох,

в терминах которого задача о ранце также легко решается. (Каждая запись все так же больше суммы предшествующих записей.) Но теперь заменим все записи нового списка значениями, являющимися их эквивалентами по модулю т. В частности, на место ахх поместим значение агх (mod m), на место а^ — значение а2х (mod т) и т. д. Получим список

К b2 b3 bA b5 b6 b-, bs bg bi0,

где каждая запись эквивалентна по модулю п соответствующим записям в списке

а1ха2х а3х а4х а5х а6х а7х аъх адх а1Ох.

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

а^ха-рс аъх аАх аъх а6х а7х asx a9x а1Ох.

Предположим, что нам дано число, равное сумме 6, + b3 + b5, и необходимо выбрать из списка

6, b2 b3 b4 b5 b6 b7 bs b9 bi0

записи, которые в сумме дают это значение. Так как

b, + Ь3 + Ь5 = (а,дг+ а3х + a5-^)(niod m)

и у является мультипликативной инверсией х, то мы знаем, что

у(й, + Ь3 + Ь5) = у{ахх+ а3х + а5х) (mod от) = ух(а{ + а3 + а5) (mod m) = (а, + а3 + а5) (mod m).

Это означает, что если мы умножим сумму значений, выбранных из списка 6, b2 b3 bt b5 b6 b7 b& b9 bi0

на у, разделим произведение наши запишем остаток, то этот остаток будет равен сумме соответствующих записей исходного списка

at a2 a3 aA a5 a6 a-, as ag a10.

И так как задача о ранце в терминах этого списка решается просто, мы сможем легко узнать, что это за записи. То есть мы можем решить исходную задачу

0 ранце, выбрав соответствующие записи из списка

6, Ь2 Ь3 64 b5 b6 b7 bs b9 bm.

Вкратце, чтобы выбрать из списка 6, b2 b3 bt b5 b6 b7 bs b9 bl0

значения, составляющие сумму s, нам необходимо только вычислить значение s х у (mod m), найти в списке

а, а2 а3 а4 а5 а6 а7 а8 а9 а10

записи, сумма которых равна этому значению, и затем выбрать соответствующие значения в списке

bi b2 b3 b4 b5 be b7 b8 b9 bi0

Рассмотрим пример на списке

1 4 6 12 25 51 105 210 421 850

в терминах которого задача о ранце легко решается. Так как сумма всех значений равна 1685, значение 2311 достаточно велико, чтобы играть роль т. Кроме того, 642 и 18 являются мультипликативными инверсиями в системе по модулю 2311, поэтому будем считать 642 значением х, а 18 — значением у. Наш первый шаг — умножить каждую запись из предыдущего списка на 642 и записать остатки от деления произведений на 2311. Получим список

642 257 1541 771 2184 388 391 782 2206 304

Предположим, что теперь перед нами встала задача выбора из этого списка значений, сумма которых равна 4507. Мы умножаем 4507 на 18, получаем значение 81 126, делим его на 2311 и записываем остаток, равный 241. Затем обнаруживаем, что в исходном списке сумму 241 дают значения 6, 25 и 210. Так как это третья, пятая и восьмая записи в соответствующем списке, делаем вывод, что третья, пятая и восьмая записи в списке

642 257 1541 771 2184 388 391 782 2206 304

дают в сумме 4507. Действительно, значения 1541, 2184 и 782 решают исходную задачу о ранце.

Итак, мы можем построить систему шифрования с открытым ключом, как показано на рис. 11.10. Сначала записываем список значений, из которых сконструированы простые задачи о ранце. Затем выбираем значения т, х и у так, чтобы т было больше суммы всех значений списка, а х являлось мультипликативной инверсией у в системе по модулю т. Затем умножаем значения исходного списка на х, делим произведения на т и записываем остатки. Список остатков будет открытым ключом шифрования. Любой может зашифровать сообщение в виде последовательности задач о ранце на основе этого списка, но только мы сможем с легкостью расшифровать эти значения. Нам потребуется только умножить каждую данную сумму на у, разделить произведение на т и записать остаток. Затем мы быстро найдем значения из исходного списка, сумма которых равна этому остатку, и восстановим комбинацию битов, формирующую сообщение.

Необходимо добавить последнее замечание. Злоумышленник может попытаться взломать нашу систему шифрования, попытавшись угадать значения т, х и у, вместо того чтобы решать сложные задачи о ранце. Поэтому числа в реальной системе шифрования должны быть намного больше значений, которые мы использовали в примерах. Если задачи о ранце будут объемными, а значения ключей большими, то время, необходимое для непосредственного решения задач о ранце или для того, чтобы угадать секретные ключи, также будет существенным.

313