Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ib.docx
Скачиваний:
1
Добавлен:
11.09.2024
Размер:
760.88 Кб
Скачать

14. Простые криптосистемы. Шифрование методом замены (подстановки): Многоалфавитная многоконтурная подстановка.

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

Общая модель шифрования подстановкой может быть представлена в следующем виде:

tш = tо + w mod (k-1),

где tш - символ зашифрованного текста,

tо - символ исходного текста,

w - целое число в диапазоне 0 - (k-1),

k - число символов используемого алфавита.

Если w фиксировано, то формула описывает одноалфавитную подстановку, если w выбирается из последовательности w1 ,w2 ,...,wn, то получается многоалфавитная подстановка с периодом n.

Если в многоалфавитной подстановке n m (где m - число знаков шифруемого текста) и любая последовательность wi, i=1,2,...,n используется только один раз, то такой шифр является теоретически нераскрываемым. Такой шифр получил название шифра Вермэна.

Стойкость простой многоалфавитной подстановки оценивается величиной 20*n, где n - число различных алфавитов, используемых для замены. Усложнение многоалфавитной подстановки существенно повышает ее стойкость. Монофоническая подстановка может быть весьма стойкой (и даже теоретически нераскрываемой), однако строго монофоническую подстановку реализовать на практике трудно, а любые отклонения от монофоничности снижают реальную стойкость шифра.

15. Простые криптосистемы. Шифрование методом замены (подстановки): Многоалфавитная многоконтурная подстановка.

ТО ЖЕ САМОЕ.

16. Арифметика целых чисел. Нод и алгоритм Евклида Бинарные операции.

2.1. Арифметика целых чисел

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

Множество целых чисел

Множество целых чисел, обозначенных Z, содержит все числа (без дробей) от минус бесконечности до плюс бесконечности (рис. 2.1).

Рис. 2.1. Множество целых чисел

Бинарные операции

В криптографии нас интересует три бинарных операции в приложении к множеству целых чисел. Бинарные операции имеют два входа и один выход. Для целых чисел определены три общих бинарных операциисложение, вычитание и умножение. Каждая из этих операций имеет два входа ( a и b ) и выход ( c ), как это показано на рис. 2.2. Два входа принимают числа из множества целых чисел; выход выводит результат операции — число из множества целых чисел.

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

Рис. 2.2. Три бинарных операции для множества целых чисел

Пример 2.1

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

Сложение 5+9=14 (-5)+9=4 5+(-9)=-4 (-5)+(-9)=-14Вычитание 5-9=-4 (-5)-9=-14 5 - (-9)=14 (-5)- (-9)=+4Умножение 5 x 9=45 (-5) x 9=-45 5 x (-9)=-45 (-5) x (-9)=45

Деление целых чисел

В арифметике целых чисел, если мы a делим на n, мы можем получить q и r. Отношения между этими четырьмя целыми числами можно показать как

В этом равенстве a называется делимое ; q — частное ; n — делитель и r — остаток. Обратите внимание, что это — не операция, поскольку результат деления a на n — это два целых числа, q и r. Мы будем называть это уравнением деления.

Пример 2.2

Предположим, что a = 255, а n = 23. Мы можем найти q = 11 и r = 2, используя алгоритм деления, мы знаем из элементарной арифметики — оно определяется, как показано на рис. 2.3.

Рис. 2.3. Пример 2.2, нахождение частного и остатка

Большинство компьютерных языков может найти частное и остаток, используя заданные языком операторы. Например, на языке C оператор "/" может найти частное, а оператор "%" — остаток.

Два ограничения

Когда мы используем вышеупомянутое уравнение деления в криптографии, мы налагаем два ограничения. Первое требование: чтобы делитель был положительным целым числом ( n > 0 ). Второе требование: чтобы остаток был неотрицательным целым числом ( r >= 0 ). Рисунок 2.4 показывает эти требования с двумя указанными ограничениями.

Рис. 2.4. Алгоритм деления целых чисел

Пример 2.3

Предположим, мы используем компьютер или калькулятор, а r и q отрицательны, при отрицательном a. Как можно сделать, чтобы выполнялось ограничение, что число r должно быть положительным? Решение простое: мы уменьшаем значение q на 1 и добавляем значение n к r, чтобы r стало положительным.

Мы уменьшили ( –23 ), получили ( –24 ) и добавили 11 к ( –2 ), чтобы получить + 9. Полученное равенство эквивалентно исходному.

Граф уравнения деления

Мы можем изобразить рассмотренные выше уравнения с двумя ограничениями на n и r на рис. 2.5 с помощью двух графов. Первый показывает случай, когда число a положительно; второй — когда отрицательно.

Рис. 2.5. Граф алгоритма деления

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

Алгоритм Евклида – это алгоритм нахождения наибольшего общего делителя (НОД) пары целых чисел.

Наибольший общий делитель (НОД) – это число, которое делит без остатка два числа и делится само без остатка на любой другой делитель данных двух чисел. Проще говоря, это самое большое число, на которое можно без остатка разделить два числа, для которых ищется НОД.

Алгоритм нахождения НОД делением

  1. Большее число делим на меньшее.

  2. Если делится без остатка, то меньшее число и есть НОД (следует выйти из цикла).

  3. Если есть остаток, то большее число заменяем на остаток от деления.

  4. Переходим к пункту 1.

Пример: Найти НОД для 30 и 18. 30 / 18 = 1 (остаток 12) 18 / 12 = 1 (остаток 6) 12 / 6 = 2 (остаток 0) Конец: НОД – это делитель 6. НОД (30, 18) = 6

a = 50b = 130 while a != 0 and b != 0: if a > b: a = a % b else: b = b % a print(a + b)

В цикле в переменную a или b записывается остаток от деления. Цикл завершается, когда хотя бы одна из переменных равна нулю. Это значит, что другая содержит НОД. Однако какая именно, мы не знаем. Поэтому для НОД находим сумму этих переменных. Поскольку в одной из переменных ноль, он не оказывает влияние на результат.

Алгоритм нахождения НОД вычитанием

  1. Из большего числа вычитаем меньшее.

  2. Если получается 0, то значит, что числа равны друг другу и являются НОД (следует выйти из цикла).

  3. Если результат вычитания не равен 0, то большее число заменяем на результат вычитания.

  4. Переходим к пункту 1.

Пример: Найти НОД для 30 и 18. 30 - 18 = 12 18 - 12 = 6 12 - 6 = 6 6 - 6 = 0 Конец: НОД – это уменьшаемое или вычитаемое. НОД (30, 18) = 6

a = 50b = 130 while a != b: if a > b: a = a - b else: b = b - a print(a)

Функция вычисления НОД

def gcd(a, b): while a != b: if a > b: a = a - b else: b = b - a print(a)

Более подробно про алгоритм Евклида из другого источника.

Алгоритм Евклида. Наибольший общий делитель.

Когда говорят «число делиться», то имеют в виду, что оно делиться без остатка. Так A делиться на B, лишь в том случае, если остаток от их деления равен нулю. На этом свойстве основывается понятие наибольшего общего делителя (НОД). НОД двух чисел — это наибольший из всех их общих делителей.

Одним из простейших алгоритмов нахождения наибольшего общего делителя является Алгоритм Евклида. Он назван в честь известного древнегреческого математика, автора первого из дошедших до нас теоретических трактатов по математике – Евклида Александрийского. Выделяют два способа реализации алгоритма: методом деления и методом вычитания. Рассмотрим отдельно каждый из них.

Алгоритм Евклида вычитанием.

Найти НОД двух целых чисел немного проще используя операцию вычитания. Для этого потребуется следовать такому условию: если A=B, то НОД найден и он равен одному из чисел, иначе необходимо большее из двух чисел заменить разностью его и меньшего.

Блок-схема Алгоритма Евклида вычитанием:

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

Алгоритм Евклида делением.

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

Начнем с того, в основе которого лежит операция взятия остатка от деления. Имеем два числа: 112 и 32. Первое больше второго – заменим его остатком от деления 112 на 32. Новая пара чисел включает 16 и 32. Второе больше, поэтому также заменим его остатком от деления 32 на 16, т. е. нулем. В результате получаем НОД=16. Таблично это выглядит так:

Начальные данные

112

32

Шаг 1

16

32

Шаг 2

16

0

А теперь составим с теми же числами таблицу для алгоритма вычитанием.

Начальные данные

112

32

Шаг 1

80

32

Шаг 2

48

32

Шаг 3

16

32

Шаг 4

16

0

Приведенный пример продемонстрировал, как в частном случае, предпочтя деление (взятие остатка от деления) вычитанию, можно выиграть в быстродействии. Преимущество деления становится видно наиболее отчетливо после следующих рассуждений. Предположим, что A меньше B, а так как НОД двух целых чисел меньше или равен наименьшему из них, то и тут он меньше или равен A; поэтому оптимальным будет уже при первой операции заменить B числом меньшим или равным A.

Далее, известно, что в одном случае большее число заменяется разностью его и меньшего числа, а в другом остатком от деления. При делении B на A (большее на меньшее), остаток не может превышать число, стоящее в знаменателе (т. е. A), следовательно, взятие остатка от деления гарантирует оптимальный исход. Но то же самое нельзя сказать в отношении операции вычитания, поскольку совсем необязательно, что сразу после выполнения первого вычитания, B станет меньше или равно A. К примеру, пусть A будет равняться 150, а B – 1100. Так, используя вычитание, мы в первом действии получим B равное 950, в то время как метод деления даст 50.

Соседние файлы в предмете экзамены и сессии первый курс юрфак