Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплект Информатика / Курс лекций.doc
Скачиваний:
127
Добавлен:
22.05.2015
Размер:
4.8 Mб
Скачать

2 Модульная арифметика

Описанная система шифрования с открытым ключом основана на математической концепции, известной как модульная арифметика (modular arithmetic), или модульная система. Эта система получается путем замены каждого целого числа из традиционной арифметической системы остатком, образующимся при делении этого числа на предопределенное значение. Предопределенное значение называется модулем. Например, пусть модуль равен 7, тогда целые значения

0 1 2 3 4 5 6 7 8 9

будут преобразованы в значения

0 1 2 3 4 5 6 0 1 2

Для обозначения остатка, полученного при делении х на т, обычно используется сокращение х (mod m), которое читается как «х по модулю m» или иногда просто «х модуль m». Так, 9 (mod 7) равно 2, так как остаток от деления 9 на 7 равен 2. Аналогично, 24 (mod 7) равно 3, потому что при делении 24 на 7 получается остаток 3; а 5 (mod 7) равно 5.

Два целых числа, которые при делении на т дают одинаковый остаток, называются эквивалентными по модулю т. Так, 16 и 23 эквивалентны по модулю 7, так как 16 (mod 7) = 23 (mod 7). Действительно, при делении на 7 и значение 16, и 23 дают остаток 2. Для обозначения того, что значение х эквивалентно у по модулю т часто используется сокращение . Так, 1623 (mod 7).

После преобразования обычных целых значений в модульную систему по модулю от у нас остаются только значения 0, 1, 2, 3, ..., m - 1. Мы можем выполнять арифметические операции в пределах ограниченного набора чисел; для этого операция сначала выполняется так же, как в традиционной арифметике, а затем ответ, предположим, х, переводится обратно в ограниченный диапазон путем замены его на значение х(mod m). Так, в модульной системе по модулю 7 у нас есть только значения 0, 1, 2, 3, 4, 5 и 6. При сложении 2 + 6 мы получим значение 1, так как 2 + 6 = 8, что при делении на 7 дает в остатке 1. Результатом умножения 2 x 6 будет 5, так как 2x6= 12, а при делении на 7 остаток равен 5.

Арифметика в модульной системе — это искаженное отражение арифметики в традиционной системе. Она является отражением в том смысле, что если х = a (mod т) и у = b (mod m), то х + ya + b (mod m). А искажение означает, что суммы и произведения в двух системах не равны. В частности, произведение двух различных целых чисел в модульной системе может быть равно 1, что ни при каких условиях невозможно в традиционной системе целых чисел. Например, в системе по модулю 7 мы имеем 3x5 = 1 (так как 3 x 5 = 15, а 15 7 в остатке дает 1).

Два числа, которые при умножении дают 1, называются мультипликативными инверсиями друг друга. В традиционной системе целых чисел у значения 3 нет мультипликативной инверсии. Традиционная мультипликативная инверсия числа 3, которая равна 1/3 лежит за пределами системы целых чисел. Но в системе целых чисел по модулю 7 у значения 3 есть мультипликативная инверсия, равная (как мы увидели) 5.

Когда же у значения х есть мультипликативная инверсия в системе по модулю m? Математики говорят, что если х и тдва положительных целых числа, таких что х < т и х и т взаимно простые (это означает, что единственное целое, на которое без остатка делятся и х, и т, равно 1), то у значения х будет мультипликативная инверсия в модульной системе по модулю т. Например, 6 меньше 13 и у этих двух значений единственный общий делитель равен 1. Поэтому у 6 должна быть мультипликативная инверсия в системе по модулю 13. Действительно, инверсией является число 11, так как 6 х 11 = 66, что при делении на 13 дает в остатке 1. Поэтому 6x11 = 1 (mod 13).

То, что у некоторых целых чисел есть мультипликативные инверсии в модульных системах, может с первого взгляда показаться странным. В частности, так как 6 и 11 — мультипликативные инверсии в системе по модулю 13, мы обнаружим, что 6 х 11 x х = х для любого значения х. Действительно, 6х11х х=(6х 11) х х = х

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

1 4 6 12 25 51 105 210 421 850

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

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

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

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

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

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

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

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

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

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

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

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

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

Вкратце, чтобы выбрать из списка

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

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

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

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, получаем значение 81126, делим его на 2311 и записываем остаток, равный 241. Затем обнаруживаем, что в исходном списке сумму 241 дают значения 6, 25 и 210. Так как это третья, пятая и восьмая записи в соответствующем списке, делаем вывод, что третья, пятая и восьмая записи в списке

642 257 1541 771 2184 388 391 782 2206 304

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

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

1. Выбираем значения, на которых можно легко решить задачу о ранце.

Например: 2 5 8 17

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

Например: т = 37, х = 25, у = 3

3. Заменяем каждое значение А исходного списка значением ха (mod m).

Рисунок 3 – Конструирование системы шифрования с открытым ключом

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