ФТД.01 Элементы криптографии

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Мурманский государственный гуманитарный университет»
(ФГБОУ ВПО «МГГУ»)
УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС
ДИСЦИПЛИНЫ
ФТД.1 Элементы криптографии
Основная образовательная программа подготовки специалиста
по специальности
010501 ПРИКЛАДНАЯ МАТЕМАТИКА И ИНФОРМАТИКА
Утверждено на заседании кафедры
математики и математических методов
в экономике факультета
физико-математического образования,
информатики и программирования
(протокол № 6 от 27 февраля 2013 г.)
Зав. кафедрой _______________О.М. Мартынов
РАЗДЕЛ 1. Программа учебной дисциплины.
Структура программы учебной дисциплины
1.1 Автор программы: кандидат технических наук, доцент Ланина Н.Р.
1.2 Рецензенты: профессор, доктор ф.-м. наук Маренич Е.Е., доцент, кандидат физ.-мат. наук Мартынов О.М.
1.3 Пояснительная записка:
Целью изучения курса «Элементы криптографии» является математическая подготовка студентов на уровне, необходимом и достаточном для:
 усвоения материала специальных дисциплин;
 практической работы по специальности;
 формирования умения исследовать математические модели, обрабатывать и анализировать экспериментальные данные.
Основными задачами изучения данной дисциплины являются:
 формирование у студентов математической культуры и развитие
логического мышления;
 формирование целостной системы знаний о методах современной
криптографии;
 обучение методам шифрования и дешифрования с помощью наиболее популярных на сегодняшний день криптосистем;
 обучение методам атаки на наиболее популярные криптосистемы;
 развитие способности творчески подходить к решению профессиональных задач.
В результате изучения курса студенты
должны знать:
 наиболее популярные в настоящее время криптосистемы с открытым
и закрытым ключом,
 наиболее эффективные алгоритмы криптографии,
 современные способы атаки (взлома) шифров.
должны уметь:
 кодировать и декодировать информацию с помощью ключей (открытых и закрытых),,
 создавать компьютерные программы, реализующие алгоритмы криптографии в языках программирования высокого уровня.
1.4. Курс входит в раздел дисциплин регионального вузовского компонента.
2
1
010501
Прикладная
математика и
информатика
3
Виды учебной работы в часах
Трудо- Все- ЛК ПР Л Сам.
емго
/
Б рабокость аудит
С
та
.
М
Семестр
№
п/
п
Шифр и
наименование
специальности
Курс
1.5. Объем дисциплины и виды учебной работы.
5
80
50
24
26
-
30-
Вид итогового
контроля
(форма
отчетности)
Зачет
1.6 Содержание дисциплины.
1.6.1 Разделы дисциплины и виды занятий (в часах). Примерное распределение учебного времени:
№
п/п
Наименование раздела, темы
1
2
3
Элементы теории чисел
Алгоритмы криптографии
Вычислительные аспекты
криптографии
ИТОГО
Количество часов
для специальности 010200
«Прикладная математика и
информатика»
Все- ЛК ПР ЛБ Са
го
м.р
ауд.
аб.
8
4
6
–
10
24
10 12
–
10
18
10
8
–
10
50
24
26
–
30
1.6.2 Содержание разделов дисциплины.
Глава I. Элементы теории чисел (повторение)
Алгоритм Евклида. Факторизация. Теорема Ферма. Теорема Эйлера.
Модулярная арифметика. Китайская теорема об остатках. Дискретный логарифм
Глава II. Алгоритмы криптографии
Классификация криптоалгоритмов. Системы с закрытым (секретным)
ключом: скремблеры, блочные шифры. Сеть Фейштеля. Системы с открытым
ключом: обмен ключами по методу Диффи-Хеллмана, алгоритм RSA, крип-
3
тосистема Эль-Гамаля. Электронная подпись. Криптосистемы на основе эллиптических уравнений. Методы распределения секрета.
Глава III. Вычислительные аспекты криптографии
Сложность алгоритма: временная и пространственная, практическая и
теоретическая, средняя и максимальная. Оценка сложности. Быстрое модулярное возведение в степень. Нахождение больших простых чисел: решето
Эратосфена, метод последовательного деления, псевдопростые числа, алгоритм Миллера-Рабина. Задача факторизации: парадокс дней рождений, метод
Полларда. Задача вычисления дискретного логарифма: метод полного перебора, метод согласования Сильвера-Полига-Хеллмана. NP–трудная задача.
Полиномиальная сводимость задач. Эквивалентность комбинаторных задач.
NP–полная задача. Примеры доказательства NP–полноты. Пути решения NP–
полных задач
1.6.3 Темы для самостоятельного изучения.
№
п/п
1
Наименование
раздела
дисциплины.
Тема.
Элементы теории
чисел
2
Алгоритмы криптографии
3
Вычислительные
аспекты криптографии
Форма самосто- Форма контроля Количество
ятельной работы выполнения сачасов
мостоятельной
работы
Контрольная ра- Проверка конбота № 1
трольной рабо10
ты
Контрольная ра- Проверка конбота № 2
трольной рабо10
ты
Контрольная ра- Проверка конбота № 3
трольной рабо10
ты
1.7 Методические рекомендации по организации изучения дисциплины.
1.7.1 Тематика и планы практических занятий по изученному материалу
Практические занятия по теме «Элементы теории чисел»
ПР № 1. Алгоритм Евклида. Разложение числа в конечную цепную
дробь. Решение сравнений первой степени. Решение диофантовых уравнений
первой степени.
ПР № 2. Модулярная арифметика. Восстановление позиционного представления числа по его модулярному представлению с помощью Китайской
теоремы об остатках.
ПР № 3. Контрольная работа № 1.
4
Литература:
1. Нечаев В.И. Элементы криптографии (Основы теории защиты информации): Учеб. пособие для ун-тов и пед. вузов / Под ред. В.А. Садовничего  М.: Высш. шк., 1999  109 с.
2. А.С. Маренич, Е.Е. Маренич. Теория делимости в задачах. В сборнике: Аргумент: Сборник научно-методических работ и нормативных документов кафедры алгебры, геометрии и прикладной математики Мурманского
государственного педагогического университета / Отв. ред. Е.Е. Маренич. Мурманск: МГПУ, 2006. - Т. 3. - 130 с.
Практические занятия по теме «Алгоритмы криптографии»
ПР № 4. Поточные шифры: скремблеры. Блочные шифры, использующие сеть Фейштеля.
ПР № 5. Обмен ключами по методу Диффи-Хеллмана.
ПР № 6. Шифрование и дешифрование по методу RSA.
ПР № 7. Электронная подпись. Составление и проверка электронной
подписи по методу Эль-Гамаля.
ПР № 8. Шифрование и дешифрование по методу Эль-Гамаля.
ПР № 9. Контрольная работа № 2.
Литература:
1. Нечаев В.И. Элементы криптографии (Основы теории защиты информации): Учеб. пособие для ун-тов и пед. вузов / Под ред. В.А. Садовничего  М.: Высш. шк., 1999  109 с.
2. Чмора А.Л. Современная прикладная криптография.  М.: Гелиос
АРВ, 2002. - 256с.
Практические занятия по теме «Вычислительные аспекты криптографии»
ПР № 10. Метод быстрого модулярного возведения в степень.
ПР № 11. Эвристический метод Полларда для решения задачи факторизации.
ПР № 12. Метод согласования для решения задачи нахождения дискретного логарифма.
ПР № 13. Контрольная работа № 3.
Литература:
1. Нечаев В.И. Элементы криптографии (Основы теории защиты информации): Учеб. пособие для ун-тов и пед. вузов / Под ред. В.А. Садовничего  М.: Высш. шк., 1999  109 с.
2. Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. - М,.: Мир, 1981. 368 с.
1.8 Учебно-методическое обеспечение дисциплины.
5
1.8.1 Рекомендуемая литература:
Основная литература.
1. Куприянов А. И.Основы защиты информации : учеб. пособие для студ.,
обуч. по спец. "Радиоэлектронные системы", "Средства радиоэлектронной борьбы" и "Информационные системы и технологии" / Куприянов Александр Ильич, Сахаров Андрей Владимирович, Шевцов Вячеслав Алексеевич. - 2-е изд., стер. - М. : Академия, 2007. - 253, гриф
2. Кострикин, А.И. Введение в алгебру: в 3ч., Ч.3:Основные структуры
алгебры: учеб. для студ.вузов – М.: Физматлит, 2000
3. Завгородный В.И. Комплексная защита информации в компьютерных
системах. учеб. пособие – М.: Логос, ПБОЮЛ, 2001
4. Левин М. Криптография: руководство пользователя, - М.: Познавательная книга +, 2001
5. Нечаев В.И. Элементы криптографии: основы защиты информации:
учеб. пособие для студ.вузов – М.: Высшая школа 1999
6. Расторгуев, С. П.Основы информационной безопасности : учеб. пособие для студ. вузов, обуч. по спец. "Компьютерная безопасность" и др.
/ С. П. Расторгуев. - М: Академия, 2007. - 192 с гриф
Дополнительная литература.
лекции
1. Грин Д., Кнут Д. Математические методы анализа алгоритмов. - М.:
Мир, 1987. - 120 с.
2. Левин М. Криптография: Руководство пользователя.  М.: Познавательная книга плюс, 2001. - 320 с.
3. Саломаа А. Криптография с открытым ключом. - М.: Мир, 1996.
4. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.
Introduction to Algorithms, Second Edition.  The MIT Press. Cambridge,
Massachusetts London, England, 2001. - 984 c.
5. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979. - 536 с.
6. Вирт Н. Алгоритмы и структуры данных. СПб.: Невский Диалект, 2001.
- 352 с.
7. Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов.
- М,.: Мир, 1981. 368 с.
8. Чмора А.Л. Современная прикладная криптография.  М.: Гелиос АРВ,
2002. - 256 с.
практические занятия
1. Оре О. Приглашение в теорию чисел. – (Библиотечка «Квант», вып. 3), М.: Наука, 1980.
2. А.С. Маренич, Е.Е. Маренич. Теория делимости в задачах. В сборнике:
Аргумент: Сборник научно-методических работ и нормативных документов кафедры алгебры, геометрии и прикладной математики Мур6
манского государственного педагогического университета / Отв. ред.
Е.Е. Маренич. - Мурманск: МГПУ, 2006. - Т. 3. - 130 с.
3. Нечаев В.И. Элементы криптографии (Основы теории защиты информации): Учеб. пособие для ун-тов и пед. вузов / Под ред. В.А. Садовничего  М.: Высш. шк., 1999  109 с.
4. Тан К.Ш., Стиб В.-Х., Харди Й. Символьный С++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования.  М.: Мир, 2001. - 622с.
1.9 Материально-техническое обеспечение дисциплины.
1.9.1 Электронный конспект лекций
1.9.2 Тестовая программа: «Метод быстрого модулярного возведения в степень»
1.10 Примерные зачетные тестовые задания.
Контрольная работа №1. «Элементы теории чисел»
Пример одного варианта
1. Упростить: 31 (mod 48).
2. С помощью алгоритма Евклида:
а) найти наибольший общий делитель чисел 6097 и 3953;
б) решить уравнение: 901 x ≡ 1 (mod 128);
в) решить уравнение: 55 x ≡ 16 (mod 96);
г) решить уравнение: 510 x + 77 y = 1.
3. С помощью Китайской теоремы об остатках найти такое α, что α ≡ 3
(mod 4), α ≡ 0 (mod 7), α ≡ 2 (mod 11), α ≡ 10 (mod 27).
72
Контрольная работа №2. «Алгоритмы криптографии»
Пример одного варианта
1. Пусть n = 91. Объяснить, почему числа «39» и «31» нельзя выбрать в
качестве открытого ключа a в алгоритме RSA.
2. С помощью алгоритма RSA зашифровать слово «ЯДРО», если n = 106,
a = 33.
3. С помощью алгоритма RSA расшифровать слово «1, 35, 9, 82, 24, 70,
7», если
p = 3, q = 31, a = 37.
4. С помощью алгоритма Эль-Гамаля расшифровать слово «(27,32),
(8,28), (25,17), (4,17), (30,7)», если p = 47, g = 3, x = 25.
Контрольная работа №3. «Вычислительные аспекты криптографии»
Пример одного варианта
7
1. С помощью метода быстрого модулярного возведения в степень вычислить: 571290.
2. С помощью метода Полларда факторизовать n = 2747, начать с x = 33.
3. С помощью метода согласования решить уравнение
3l = 8 (mod 17),
если известно, что порядок числа 3 равен 16.
1.11. Примерный перечень вопросов к зачёту:
Элементы теории чисел
1. Алгоритм Евклида. Конечная цепная дробь.
2. Сравнения первой степени. Диофантовы уравнения первой степени.
3. Китайская теорема об остатках.
4. Модулярная арифметика. Задача факторизации. Задача нахождения
дискретного логарифма.
Алгоритмы криптографии
5. Классификация криптоалгоритмов.
6. Системы с закрытым (секретным) ключом: скремблеры.
7. Системы с закрытым (секретным) ключом: блочные шифры. Сеть
Фейштеля.
8. Системы с открытым ключом: обмен ключами по алгоритму ДиффиХеллмана.
9. Системы с открытым ключом: алгоритм RSA (шифрование и дешифрование, атаки на RSA).
10. Системы с открытым ключом: Криптосистема Эль-Гамаля (составление и проверка электронной подписи, шифрование и дешифрование).
Сложность алгоритмов
11. Сложность алгоритма: временная и пространственная, практическая
и теоретическая, средняя и максимальная. Оценка сложности.
12. Быстрое модулярное возведение в степень.
13. Нахождение больших простых чисел: решето Эратосфена, метод
последовательного деления, псевдопростые числа, алгоритм МиллераРабина.
14. Задача факторизации: парадокс дней рождений, метод Полларда.
15. Задача вычисления дискретного логарифма: метод полного перебора, метод согласования Сильвера-Полига-Хеллмана.
16. NP–трудная задача. Полиномиальная сводимость задач. Эквивалентность комбинаторных задач. NP–полная задача. Примеры доказательства
NP–полноты.
17. Пути решения NP–трудных задач
8
1.13 Примерная тематика рефератов.
Исторические аспекты проблемы кодирования информации.
Таблица Вижинера и область её применения.
Финансовая криптография
Шифры вида «Простая замена» и метод вскрытия этих шифров.
Методы атаки на криптосистемы с закрытым ключом.
Методы атаки на криптосистемы с открытым ключом.
1.14 Примерная тематика курсовых работ.
Программная реализация алгоритма
 шифрования и дешифрования по методу RSA;
 шифрования и дешифрования по методу Эль-Гамаля;
 составления и проверки электронной подписи по методу Эль-Гамаля;
 быстрого модулярного возведения в степень.
 Миллера-Рабина;
 Полларда.
1.15. Примерная тематика квалификационных (дипломных) работ.
не предусмотрено учебным планом по данной дисциплине.
1.16.Методика(и) исследования (если есть) - нет.
1.17. Бально-рейтинговая система, используемая преподавателем для
оценивания знаний студентов по данной дисциплине.
Используется следущая система оценивания знаний студентов – «зачтено»,
«незачтено».
РАЗДЕЛ 2. Методические указания по изучению дисциплины (или ее
разделов) и контрольные задания для студентов заочной формы обучения.
Нет заочной формы обучения по данной дисциплине.
РАЗДЕЛ 3. Содержательный компонент теоретического материала.
Примерное содержание лекционного материала.
ГЛАВА I. ЭЛЕМЕНТЫ ТЕОРИИ ЧИСЕЛ
9
Натуральные числа  это числа, которые возникли в процессе счета.
Целое число  это число, которое можно представить в виде разности натуральных чисел.
Алгоритм Евклида состоит в следующем: пусть a и b N. Разделим a на
b с остатком: a = bq0 + r1, где 0  r1 < b. В таком выражении q0 называется неполным частным. Если r1  0, то разделим b на r1 с остатком: b = r1q1 + r2,
причем 0  r2 < r1. Продолжая эти последовательные деления с остатком на
остаток от предыдущего деления, получим равенства: r1 = r2q2 + r3, r2 = r3q3 +
r4 и т.д.
Последний отличный от нуля остаток rn есть наибольший общий делитель чисел a и b.
a =
bq0
+ r1
Простое число  целое положительное число,
b = r1q1 + r2 большее единицы, не имеющее других делителей,
r1 = r2q2 + r3 кроме самого себя и 1.
r2 = r3q3 + r4
Пусть натуральное число m разложено в произ...
rn2 = rn1qn1 + [rn] ведение простых сомножителей. Объединяя равные
m =
rn1 = rnqn + 0 сомножители, получим формулу вида
1
2
k
p1 p2 ... pk ,
где p1, p2, ... pr  различные простые числа, 1, 2, ... k  некоторые целые
положительные числа. Произведение, стоящее в правой части формулы,
называется каноническим разложением числа m.
Задача факторизации: дано натуральное число m. Требуется найти его
каноническое разложение. Эта задача считается трудной настолько, что на
предположении о трудности ее решения основываются практические алгоритмы криптографии.
Сравнения
Числа a и b называются сравнимыми по модулю m (m>0), если при делении на m они дают одинаковые остатки. Обозначение: a  b(mod m) или,
короче, a  b(m). Формула a  b(mod m) называется сравнением. Если число a
не сравнимо с числом b по модулю m, то записывают: a  b(m).
Рассмотрим бинарное отношение Rm на множестве N{0}: Rm = {(a, b)/
a  b(m) }. Это отношение рефлексивно [a  a(m)], симметрично [ a  b(m) 
b  a(m)], транзитивно [a  b(m), b  c(m)  a  c(m)],  является отношением эквивалентности.
При заданном m выполним разбиение множества N{0} на классы эквивалентности: в один класс попадают числа, имеющие одинаковый остаток
от деления на m. Эти классы называются классами вычетов по модулю m.
Число классов вычетов по модулю m равно m.
Свойства сравнений.
1. a  b(m) , когда a  b делится на m.
10
2. ( a  b(m), c  d(m) )  ( a + c  b + d(m) ).
3. ( a  b(m), c  d(m) )  ( ac  bd(m) ).
4. ( a  b(m) и nN)  (an  bn(m) ).
Функция Эйлера: (m) = p111 (p11) p221(p21) ... pkk1(pk1).
Свойство: (m) равно числу натуральных чисел, взаимно простых с m и при
этом меньших m.
Если НОД чисел a и b равен 1, то эти числа называются взаимно простыми.
Теорема Эйлера. Если числа a и m взаимно просты, то a(m)  1(m).
Если число p  простое, то (p) = p1, откуда...
Малая теорема Ферма: ap  a(p).
Конечные цепные дроби (КЦД)
Здесь q0  любое целое число, q1, q2, ... qn 
натуральные числа, называемые элементами данной
КЦД. Символически КЦД обозначают: [q0; q1, q2, ... q
1
n]. КЦД всегда представляет собой рациональное
q0 +
1
число; обратно, каждое рациональное число может
q1 
q2 
быть представлено в виде КНД; такое представление
...
единственно, если потребовать, чтобы qn  1.
ЦД [q0; q1, q2, ... qk], k  n, записанная в виде
1

1
несократимой дроби Pk / Sk, называется подходящей
qn 1 
дробью порядка k данной ЦД.
qn
Доказано, что с помощью алгоритма Евклида
можно получить разложение рационального числа в ЦД.
Конечная цепная (непрерывная) дробь 
это выражение вида:
Основанием теории ЦД служат рекуррентные формулы, которые связывают числители и знаменатели подходящих дробей:
Pk+1 = qk+1 Pk + Pk1,
Sk+1 = qk+1 Sk + Sk1, k = 1, 2, ... , n1.
(1)
Учтем также, что P0 / S0 = q0, откуда
P0 = q0, S0 = 1.
(2)
P1 / S1 = q0 + 1/ q1, откуда
P1 = q0 q1+1, S1 = q1.
(3)
Выражая из равенств (1) qk+1 и приравнивая правые части, получим:
Pk Sk1  Pk1 Sk =  (Pk+1 Sk  Sk+1 Pk), k = 1, 2, ... , n1.
Подставим в последнее равенство k = 1:
P1 S0  P0 S1 =  (P2 S1  S2
P1).
С другой стороны, по формулам (1)  (2): P1 S0  P0 S1 = (q0 q1+1)  q0 q1 = 1 =
(1)0;
поэтому P2 S1  S2 P1 = 1 = (1)1; P3 S2  S3 P2 = 1 = (1)2...
11
Отсюда вытекает важное соотношение: Pk Sk1  Pk1 Sk = (1)k1. Домножим обе его части на (1)k1, получим:
Pk Sk1(1)k1 + Pk1 Sk(1)k = 1.
(4)
Решение сравнения первой степени
Требуется найти такое число x, что при делении произведения этого числа
и данного числа a на данное число m остаток составит 1, т.е. решить сравнение (известно, что a и m взаимно простые):
a x  1(mod m),
(5)
(m)
(m)1
I способ. С помощью теоремы Эйлера. Так как a
=aa
 1(mod m),
то
x  a(m)1(mod m).
(6)
II способ. С помощью разложения a/m в цепную дробь.
Составим равенство (4) при k = n: Pn Sn1(1)n1 + Pn1 Sn(1)n = 1. Так
как числа a и m взаимно простые, т.е. дробь a/m несократимая, то она совпадает с дробью Pn / Sn, откуда Pn = a, Sn = m. Подставим эти значения в последнее равенство, получим: a Sn1(1)n1 + Pn1 m (1)n = 1.
Так как правая часть при делении на m дает в остатке 1, а второе слагаемое в левой части делится на m без остатка, то, чтобы равенство было истинным, и первое слагаемое в левой части при делении на m должно давать в
остатке 1: a Sn1(1)n1  1 (mod m).
Сравнивая последнее выражение с (5), убеждаемся, что на x приходится
x  (1)n1Sn1(mod m).
(7)
Решение диофантова уравнения первой степени
Рассмотрим задачу отыскания решений целочисленного уравнения вида
ax + my = 1,
(8)
где числа a и m взаимно простые, a > 0, m > 0.
I способ. С помощью теоремы Эйлера [ a(m) = a  a(m)1  1(mod m)]. В теории чисел доказано, что
x = a(m)1 + mt, y = (1a(m)) / m  at,
где t  любое целое число.
(9)
II способ. С помощью разложения a/m в цепную дробь.
Составим равенство (4) при k = n: Pn Sn1(1)n1 + Pn1 Sn(1)n = 1. Так
как числа a и m взаимно простые, т.е. дробь a/m несократимая, то она совпадает с дробью Pn / Sn, откуда Pn = a, Sn = m. Подставим эти значения в последнее равенство, получим: a (1)n1Sn1 + m (1)nPn1 = 1.
Сравнивая последнее выражение с (8), убеждаемся, что
12
x = (1)n1Sn1,
y = (1)nPn1.
(10)
Дискретный логарифм (индекс)
Пусть Nq = {0, 1, ..., q1} и Fq = < Nq, +, , 0, 1>  конечное поле; b 
Nq, b0. Наименьшее натуральное число  с условием b  1 (mod q) называется порядком элемента b в поле Fq. Обозначение: ord b.
Пусть r = ord b. Натуральное число l называется дискретным логарифмом элемента аNq при основании b, если bl  а(mod q), 0  l < r. Обозначение: l = indba.
Как и задача факторизации, задача вычисления дискретного логарифма
при достаточно большом значении q считается настолько трудной, что на
предположении о трудности ее решения также основываются практические
алгоритмы криптографии.
Китайская теорема об остатках
Эта теорема позволяет решать задачу преобразования модульного
представления целого числа в его позиционное представление.
Лемма 1. Пусть m и n  взаимно простые числа. Тогда среди чисел 0, m,
2m, ... , m(n1) никакие два числа не сравнимы между собой по модулю n.
Кроме того, при любом k среди чисел k, m+k, 2m+k, ... , m(n1)+k никакие два
числа не сравнимы между собой по модулю n.

Предположим обратное: среди чисел 0, m, 2m, ... , m(n1) нашлись два
различных числа, имеющие при делении на n один и тот же остаток. Обозначим их im и jm (0  i < j  n1). По теореме С1, jm = im(n) означает, что m(ji)
делится на n. Однако m на n не делится, так как эти числа взаимно простые.
Что касается второго сомножителя, то 1  (ji)  n1, а значит, он тоже не
может делиться на n. Второе утверждение доказывается аналогично. 
Лемма 2. Даны числа k, s, m, n, причем числа m и n  взаимно простые.
Тогда найдется такое число , что   k(m) и   s(n).

Выпишем n натуральных чисел, равно остаточных с k при делении на
m:
k, m+k, 2m+k, ... , m(n1)+k. (*)
По лемме 1, среди этих чисел никакие два числа не сравнимы между
собой по модулю n, т.е. все они дают разные остатки при делении на n. Значит, один из этих остатков обязательно совпадет с остатком от деления s на n.
Т.о.,   то число в п-ти (*), которое при делении на n дает тот же остаток,
что и s. 
13
Теорема. Даны числа k1, k2, ..., kn, m1, m2, ..., mn, причем числа m1, m2, ...,
mn  попарно взаимно простые. Тогда найдется такое число , что   k1(m1),
  k2(m2), ...,   kn(mn).

1. i = 2: утверждение верно в соответствии с леммой 2.
2. 2 < i < n: предположим, что утверждение верно.
3. i = n: в соответствии с предположением, найдено такое число , что 
 k1(m1),   k2(m2), ...,   kn1(mn1). Обозначим: s = m1 m2 ... mn1. Очевидно,
что s и mn взаимно простые. Кроме того,
 + js  k1(m1),  + js  k2(m2), ...,  + js  kn1(mn1).
Составим п-ть: ,  + s,  + 2s, ... ,  + (mn1)s (**). По лемме 1 [k=], среди
этих чисел никакие два числа не сравнимы между собой по модулю mn, т.е.
все они дают разные остатки при делении на mn. Значит, один из этих остатков обязательно совпадет с остатком от деления kn на mn. Т.о.,   то число в
п-ти (**), которое при делении на mn дает тот же остаток, что и kn.

ГЛАВА II. АЛГОРИТМЫ КРИПТОГРАФИИ
Криптография – наука о способах двунаправленного преобразования
информации с целью конфиденциальной передачи ее по незащищенному каналу между двумя станциями, разделенными в пространстве и/или времени
(наука о том, как обеспечить секретность сообщения).
В криптографической терминологии исходное послание наз. открытым текстом (plaintext или cleartext). Изменение исходного текста так, чтобы скрыть его содержание, наз. шифрованием (encryption). Зашифрованное
сообщение наз. шифротекстом (ciphertext). Процесс, при котором из шифротекста извлекается открытый текст наз. дешифровкой (decryption).
Криптоанализ – наука о том, как вскрыть шифрованное сообщение.
Цель криптоанализа –противостояние методам криптографии. Задача криптоаналитика состоит в получении открытого текста по наблюдаемому шифротексту; в более общей постановке задача сводится к раскрытию секретного
ключа шифрования/дешифрования. Действия, предпринимаемые криптоаналитиком с целью раскрытия секретного ключа, называют атакой.
Криптография совместно с криптоанализом составляют комплексную
науку – криптологию. Криптология – раздел математики, изучающий матем.
основы криптографических методов.
Настоящая криптография (strong cryptography), используя достижения в
первую очередь математики, позволяет модифицировать данные таким образом, что никакие самые современные ЭВМ за разумный период времени не
могут восстановить исходный текст, известный только отправителю и получателю.
§ 1. Классификация криптоалгоритмов
14
1.
Тайнопись. Отправитель и получатель производят над сообщением
преобразования, известные только им двоим. Сторонним лицам неизвестен
сам алгоритм шифрования.
2.
Криптография с секретным (закрытым) ключом (симметричные алгоритмы).
Алгоритм воздействия на передаваемые данные известен всем сторонним
лицам, но он зависит от некоторого параметра – "ключа", которым обладают
только отправитель и получатель. Для зашифровки и расшифровки сообщения используется один и тот же блок информации (ключ); либо ключ для
дешфровки вычисляется по ключу шифровки.
3.
Криптография с открытым ключом (асимметричные алгоритмы).
Для зашифровки сообщения используется один ("открытый") ключ, известный всем желающим, а для расшифровки – другой ("закрытый"), существующий только у получателя; ключ для дешифровки не может быть вычислен
по ключу шифровки.
Большинство специалистов используют термин «криптография» применительно к криптографии с ключом, что вполне оправдано. Любой криптоалгоритм с ключом можно превратить в тайнопись, просто "зашив" в исходном коде программы некоторый фиксированный ключ. Обратное же преобразование практически невозможно.
В зависимости от характера воздействий, производимых над данными,
алгоритмы подразделяются на перестановочные и подстановочные.
В перестановочных алгоритмах блоки информации (байты, биты, более крупные единицы) не изменяются сами по себе, но изменяется их порядок следования.
В подстановочных алгоритмах блоки исходной информации изменяются по законам криптоалгоритма. Подавляющее большинство современных
алгоритмов принадлежит этой группе. Простейшая разновидность подстановочного алгоритма  простая замена: это такой шифр, в котором каждой
букве алфавита соответствует буква, цифра, символ или какая-нибудь их
комбинация (шифр Цезаря, «Пляшущие человечки» Конан Дойля, шифр в
рассказе «Золотой жук» Эдгара По). Взлом шифров типа простая замена:
таблица частот встречаемости букв алфавита в тексте позволяет
определить один или несколько символов, а этого зачастую бывает достаточно для дешифрования всего сообщения. В русском языке на 1000 букв русского текста в среднем приходится 90 букв «О», 72 буквы «Е» или «Ё», по 60
букв «А» и «А» и т.д.
§ 2. Системы с секретным ключом
Симметричные криптоалгоритмы (или ССК  системы с секретным
ключом) выполняют преобразование данных в зависимости от секретного
ключа таким образом, что прочесть исходное сообщение можно, только зная
этот секретный ключ/
15
В зависимости от размера блока информации ССК делятся на потоковые шифры и блочные шифры. Наиболее распространенными представителями поточных шифров являются скремблеры.
2.1 Скремблеры
Скремблерами называются программные или аппаратные реализации
алгоритма, позволяющего шифровать побитно непрерывные потоки информации. Скремблером также называют набор бит, изменяющихся на каждом
шаге по определенному алгоритму.
Кодирование. Задается и начальное состояние скремблера (секретный
ключ). Фиксируются некоторые из разрядов скремблера. В текущем скремблере складываются () между собой значения зафиксированных разрядов.
Все разряды сдвигаются на 1 бит влево, а только что полученное значение
("0" или "1") помещается в освободившуюся последнюю позицию. Значение,
находившееся в первой позиции до сдвига, складывается с текущим значением исходного потока с тем, чтобы получить очередное значение зашифрованного потока.
РассмотРезВход
Скремблер
рим пример кодит
рования информа0
=
0
1
0 1
ционной
п-ти
0
=
1
1
1 1
010012 с ключом
1
=
0
0
1 1
0112. В качестве
1
=
0
1
1 0
складываемых
1
=
1
0
0 1
разрядов выберем
первый и третий.
Декодирование происходит по той же схеме, что и кодирование.
Главная проблема шифров на основе скремблеров  синхронизация передающего (кодирующего) и принимающего (декодирующего) устройств.
При пропуске или ошибочном вставлении хотя бы одного бита вся передаваемая информация необратимо теряется.
На практике для синхронизации применяется комбинация двух методов:
а) добавление в поток информации синхронизирующих битов, заранее
известных приемной стороне (не обнаружив такой бит, приемная сторона
понимает, что произошел сбой),
б) использование высокоточных генераторов временных импульсов,
что позволяет в моменты потери синхронизации производить декодирование
принимаемых битов информации "по памяти" без синхронизации.
Число бит, охваченных обратной связью, то есть разрядность устройства памяти для порождающих кодирующую п-ть бит, называется разрядностью скремблера (в нашем примере  3). Чем больше разрядность скрембле16
ра, тем выше криптостойкость системы, основанной на его использовании. В
отношении параметров криптостойкости данная величина полностью идентична длине ключа блочных шифров (см. ниже).
При достаточно долгой работе скремблера неизбежно возникает его зацикливание: так как в N разрядах не может пребывать более 2N комбинаций
бит, то, максимум, через 2N1 шагов повтор комбинации обязательно произойдет.
Доказано, что для скремблера любой разрядности N всегда существует
такой выбор охватываемых обратной связью разрядов, что генерируемая ими
последовательность бит будет иметь период, равный 2N1 битам.
Схемы с выбранными по данному закону обратными связями называются генераторами последовательностей наибольшей длины (ПНД), и именно они используются в скремблирующей аппаратуре. Из множества генераторов ПНД заданной разрядности выбирают те, у которых число разрядов,
участвующих в создании очередного бита, минимально.
1Мб=2^20Б=2^23бит; если пересылаем 128 Мб=2^72^23=2^30бит, то
разрядность скремблера должна быть примерно 30 бит, чтобы передать информацию без опасения начала повторения кодирующей последовательности.
ПНД неразрывно связаны с математической теорией неприводимых полиномов: Если полином степени N не представим по модулю 2 в виде произведения никаких других полиномов, то скремблер, построенный на его основе, создает ПНД.
Пример. Неприводимым полиномом степени 3 является x3+x+1: 10112
(единицы соответствуют к-там при степенях). Скремблеры на основе неприводимых полиномов образуются отбрасыванием самого старшего разряда (он
несет информацию только о степени полинома). Так, на основе указанного
полинома, можно создать скремблер 0112 с периодом зацикливания 7 = 231.
На практике применяются полиномы значительно более высоких порядков.
В последнее время сфера применения скремблирующих алгоритмов сократилась, что объясняется снижением объемов побитной последовательной
передачи информации. Практически повсеместно в современных системах
применяются сети с коммутацией пакетов, для поддержания конфиденциальности которой используются блочные шифры.
2.2 Блочные шифры...
... шифруют целые блоки информации (от 4 до 32 байт) как единое целое, что значительно увеличивает криптостойкость к атаке полным перебором по сравнению со скремблерами.
Практически все блочные шифры используют для преобразований
определенный набор биективных (обратимых) математических преобразований. Схему работы блочного шифра можно описать функциями: Z
=
EnCrypt(X, Key) и X = DeCrypt(Z, Key).
17
Ключ Key представляет собой некоторый блок двоичной информации
фиксированного размера (в различных реализациях от 128 до 1048 бит). Исходный (X) и зашифрованный (Z) блоки данных также имеют фиксированную разрядность, равную между собой, но необязательно равную длине ключа. Криптоалгоритм называется идеально стойким, если выполнены условия:
 прочесть зашифрованный блок данных можно только полным перебором всех возможных ключей;
 при известных исходном и зашифрованном значениях блока ключ,
которым произведено это преобразование, можно узнать также только
полным перебором
Если идеально стойкий криптоалгоритм имеет ключ длины N (под длиной понимается количество бит), то трудоемкость силовой атаки  исчерпывающего перебора ключей  составляет 2N проверок. По теории вероятности
искомый ключ будет найден с вероятностью 1/2 после перебора половины
всех ключей, , на взлом потребуется в среднем 2N1 проверок. Таким образом, в общем случае стойкость блочного шифра зависит только от длины
ключа и возрастает экспоненциально с ее ростом.
Что касается второго требования, то ситуации, в которых постороннему
наблюдателю известна часть исходного текста, встречаются повсеместно.
Это могут быть стандартные надписи в электронных бланках, фиксированные заголовки форматов файлов, довольно часто встречающиеся в тексте
длинные слова или последовательности байт.
Таким образом, на функцию Z = EnCrypt(X, Key) накладываются следующие условия:
1.
она должна быть обратимой;
2.
не должно существовать иных методов прочтения сообщения X по известному блоку Z, кроме как полным перебором ключей Key;
3.
не должно существовать иных методов определения ключа Key, которым было произведено преобразование известного сообщения X в сообщение
Z, кроме как полным перебором
ключей.
Преобразуемый блок, содержащий N бит, можно представить в
виде целого неотрицательного числа
из диапазона: 0  2N1. Это число и
выступает аргументом X функции
EnCrypt.
Блочные шифры, как правило,
используют сеть Фейштеля (H.
Feistel). Сетью Фейштеля называется метод обратимых преобразований
текста, при котором значение, вычисленное от одной из частей текста,
18
накладывается на другие части. Классическая сеть Фейштеля имеет следующую структуру:
Здесь  обозначено сложение по mod 2.
Независимые потоки информации, порожденные из исходного блока,
называются ветвями сети. В классической схеме их две. В настоящее время
часто применяют модификацию сети Фейштеля для большего числа ветвей
(4). Величины Vi называемые параметрами сети,  функции, зависящие от
ключа. Функция F называется образующей. Действие, состоящее из однократного вычисления образующей функции и последующего наложения ее
результата на другую ветвь с обменом их местами, называется циклом или
раундом (англ. round) сети Фейштеля. Оптимальное число раундов K – от 8
до 32. Увеличение количества раундов значительно увеличивает криптоскойстость любого блочного шифра к криптоанализу. Возможно, эта особенность
и повлияла на столь активное распространение сети Фейштеля – при обнаружении слабого места в алгоритме достаточно, не переписывая сам алгоритм,
увеличить количество раундов на 4-8.
Данная схема является обратимой. Сеть Фейштеля обладает тем свойством, что даже если в качестве образующей функции F будет использовано
необратимое преобразование, то и в этом случае вся цепочка будет восстановима. Это происходит вследствие того, что для обратного преобразования
сети Фейштеля не нужно вычислять функцию F1.
Кроме того, сеть Фейштеля симметрична. Использование операции ,
обратимой своим же повтором, и инверсия последнего обмена ветвей делают
возможным раскодирование блока той же сетью Фейштеля, но с инверсным
порядком параметров Vi. Для обратимости сети Фейштеля не имеет значения,
является ли число раундов четным или нечетным числом. В большинстве реализаций схемы, в которых оба вышеперечисленные условия (операция  и
уничтожение последнего обмена) сохранены, прямое и обратное преобразования производятся одной и той же процедурой, которой в качестве параметра передается вектор величин Vi либо в исходном, либо в инверсном порядке
(xkeykey = x!!!).
С незначительными доработками сеть Фейштеля можно сделать и абсолютно симметричной, то есть выполняющей функции шифрования и дешифрования одним и тем же набором операций, т.е. добиться тождества:
EnCrypt  DeCrypt.
Криптостойкость блочного шифра, использующего сеть Фейштеля,
определяется на 95% функцией F и правилом вычисления Vi из ключа.
§ 3. Системы с открытым ключом
В 1976 г. американцы Уитфилд Диффи и Мартин Хеллман (Diffi W.,
Hellman M.)  инженеры-электрики из Станфордского университета, а также
Рольф Меркль, бывший в то время студентом Калифорнийского университета, совершили замечательный прорыв в построении криптосистем. В своей
статье «Новые направления в криптографии» они изложили новый принцип
19
построения криптосистем, не требующий не только передачи ключа принимающему сообщение абоненту, но даже сохранения в тайне метода шифрования. Эти шифры позволяют легко зашифровать и дешифровать текст и их
можно использовать многократно.
Так появились системы с открытым ключом. Суть их состоит в том,
что каждым адресатом ИС генерируются два ключа, связанные между собой
некоторым соотношением. Один ключ объявляется открытым, а другой 
закрытым (секретным). Открытый ключ публикуется и доступен любому,
кто желает послать сообщение адресату. Секретный ключ сохраняется в
тайне.
Исходный текст шифруется открытым ключом адресата и передается
ему. Дешифрование возможно только с использованием закрытого ключа,
известного лишь самому адресату.
СОК используют так называемые необратимые (односторонние)
функции, которые обладают следующим свойством: при заданном значении
аргумента x значение функции f(x) вычисляется относительно просто, тогда
как по заданному значению функции y = f(x) значение аргумента x восстановить практически невозможно. Под необратимостью в данном случае понимается не теоретическая, а практическая невозможность вычислить обратное
значение, используя современные вычислительные средства за обозримый
интервал времени.
Все предлагаемые сегодня криптосистемы с открытым ключом опираются на один из следующих типов необратимых преобразований: факторизация, вычисление дискретного логарифма в конечном поле, вычисление
корней алгебраических уравнений.
Алгоритмы СОК используются...

как самостоятельные средства защиты передаваемых и хранимых
данных;

как средства для распределения ключей. Алгоритмы СОК более трудоемки по сравнению с ССК. Поэтому на практике часто с помощью СОК распределяют ключи, объем которых как информации незначителен. А потом
используют блочный шифр для кодирования больших информационных потоков;

как средства распознавания отправителей (аутентификации пользователей).
3.1 Обмен ключами по алгоритму Диффи-Хеллмана
Метод экспоненциального ключевого обмена Диффи-Хеллмана  первая криптосистема с открытым ключом  был изобретен Диффи (W. Diffie) и
Хеллманом (M. Hellman) в 1976 году. Метод помогает обмениваться секретным ключом для симметричных криптосистем, но его нельзя использовать
для шифрования и дешифрования сообщений.
20
Предположим, что двум абонентам необходимо провести конфиденциальную переписку, а в их распоряжении нет первоначально оговоренного
секретного ключа. Однако между ними существует канал, защищенный от
модификации, то есть данные, передаваемые по нему, могут быть прослушаны, но не изменены. В этом случае две стороны могут создать одинаковый
секретный ключ по следующему алгоритму.
Сначала они вместе выбирают большие простые числа n и g (0 < g < n),
которые не обязательно хранить в секрете и  можно договориться об их
использовании по несекретному каналу. Доказано, что (n 1)/2 также должно
быть простым.
Затем абонент А выбирает случайное большое целое число x (его надо
держать в секрете), вычисляет значение  = gx mod n и пересылает его абоненту Б.
Абонент Б выбирает случайное большое целое число y (секретное), вычисляет значение  = gy mod n и пересылает его абоненту A.
Теперь абонент А вычисляет k = x mod n , абонент Б  k* = y mod n. В
силу коммутативности операции возведения в степень в конечном поле у
них получилось одно и то же:
 k = x mod n = (gy)x mod n = (gx)y mod n = y mod n = k*
Величина k используется в качестве секретного ключа. Никто из прослушивающих этот канал злоумышленников не сможет вычислить это значение, если им известны n, g,  и  и не известны x и y. Чтобы определить секретный ключ, злоумышленник должен
 либо, по известным значениям g и gx найти x и возвести gy в степень
x,
 либо, наоборот, по известным значениям g и gy найти y и возвести gx
в степень y.
В обоих случаях задача сводится к вычислению дискретного логарифма в конечном поле.
В тех случаях, когда в канале возможна модификация данных, в процесс генерации ключей может вклиниться "злоумышленник-посредник" и
подменить открытые ключи абонентов своим собственным ключом. Такая
атака получила название «человек посередине» (man-in-the-middle attack).
Мера противодействия состоит в том, что открытые ключи должны регулярно меняться и проходить сертификацию.
3.2 Алгоритм RSA
Разработан в 1977 году и получил название в честь создателей: Рональда Ривеста (R. Rivest), Ади Шамира (A. Shamir) и Леонарда Эдлемана (L.
Adleman). Они воспользовались тем фактом, что нахождение больших простых чисел в вычислительном отношении осуществляется сравнительно легко, но разложение на множители известного произведения двух таких чисел
практически невыполнимо. Доказано (теорема Рабина), что раскрытие шифра
RSA эквивалентно такому разложению.
21
Одной из причин популярности алгоритма RSA является возможность
для любой длины ключа дать нижнюю оценку числа операций, необходимых
для раскрытия шифра.
Пусть абонент А решил организовать секретную переписку (с абонентом Б или со всеми желающими) с открытым ключом. Первым этапом любого асимметричного алгоритма является создание пары ключей: открытого и
закрытого.
Этап создания ключей. Абонент А выбирает два больших простых
числа p и q, находит их произведение n = pq, функцию Эйлера (n) от этого
произведения и выбирает случайное число a, меньшее (n) и взаимно простое с ним: (a, (n)) = 1, 0 < a < (n).
Пара (n, a) представляет собой открытый ключ, доступный каждому,
кто хочет передать секретное сообщение абоненту А.
Свой секретный ключ x абонент А определяет, решая сравнение ax  1
(mod ((n))). Секретный ключ x должен, кроме того, удовлетворять условию:
0 < x < (n).
Этап шифрования. Пусть абонент Б решает послать сообщение m
абоненту А. Он разбивает свое сообщение на блоки, равные k = [log2(n)] бит.
Каждый блок можно интерпретировать как число m из диапазона (0; 2k1).
Если длина сообщения больше чем n, то текст делят на куски длиной n. Абонент Б шифрует сообщение открытым ключом абонента А: m1  ma (mod n),
0 < m1 < n.
Этап дешифрования. Абонент А расшифровывает это сообщение своим секретным ключом: m2  m1x (mod n), 0 < m2 < n.
Докажем, что преобразование обратимо: m2 = m (получено то, что послано).

Так как ax  1 (mod ((n)))  ax = C(n) + 1, где C  N.
m2  m1x  (ma)x  max  mC(n) + 1  m  (m(n)) C (mod n).
I случай. (m, n) = 1. Тогда по теореме Эйлера: (m(n))  1 (mod n), откуда
m2  m  (m(n))C  m (mod n).
II случай. (m, n)  1. Тогда для m существует две возможности: либо m
= p, либо m = q. Ограничимся рассмотрением первой (вторая  аналогично).
По теореме Эйлера: (p(q))  1 (mod q), откуда, (p(q)) (p) C  1(p) C (mod
q).
С учетом равенства (n) = (p) (q),
(p(n)) C  1 (mod q).
Воспользуемся св-вом сравнений: при k  0 (k  k (mod sk) )  (   (mod
s) ), положив k = p.
p  (p(n)) C  p  1 (mod pq)
или m2  p  (p(n)) C  p (mod n).
В обоих случаях получилось, что m2  m (mod n). Но, т.к. 0 < m < n, 0 < m2 <
n, то m2  m.

Существует и другая версия алгоритма RSA. От изложенной выше она
отличается способом выбора секретного ключа x абонента А. Методом Ев22
клида относительно неизвестных x и y решается в целых числах уравнение ax
+ (n)y = 1. Число x представляет собой закрытый ключ. Этап шифрования:
m1  ma (mod n) и дешифрования: m2  m1x (mod n) не изменяются. Покажем,
что и в этом случае преобразование обратимо случае m2 = m (получено то, что
послано).

m2  m1x  (ma)x  max  my(n) + 1  m  (m(n)) y (mod n). По теореме Эйлера: m(n)  1(n).
Возведем обе части в степень “y” : (my (n))  1y (mod n)  1 (mod n).
Умножим обе части на m:
(m  y(n)+1)  m(mod n).
Случай (k, n)  1 рассмотрите самостоятельно.

Хэстед (J. Hasted) продемонстрировал уязвимость RSA при условии,
если криптоаналитик может получить несколько шифротекстов одного и того
же сообщения m, зашифрованного с различными секретными параметрами p
и q, но при использовании фиксированного открытого ключа a. При заданных l различных результатах шифрования ma mod n1, ..., ma mod nl можно
раскрыть m при помощи Китайской теоремы об остатках: зная остатки от деления числа ma на n1, ..., nl, восстанавливаем ma. Если а не слишком велико,
то по известным значениям ma и а можно восстановить m. Такой способ извлечения открытого текста получил название атака «малых показателей».
Меры противодействия данной атаке сводятся к добавлению псевдослучайного контекста к сообщению перед его шифрованием.
3.3 Цифровая (электронная) подпись
Криптосистема с открытым ключом неудобна в том смысле, что получатель сообщения не знает, кто в действительности является отправителем
сообщения.
Цифровой подписью называется блок данных, сгенерированный с использованием некоторого секретного ключа. При этом с помощью открытого
ключа имеется возможность проверить, что данные были действительно сгенерированы с помощью этого секретного ключа.
Цифровые подписи используются для того, чтобы подтвердить, что сообщение пришло действительно от данного отправителя, а также для проставления штампа времени (timestamp) на документах: отправитель подписывает документ со штампом времени и, таким образом, подтверждает, что документ уже существовал в момент, объявленный в штампе времени.
Механизм действия цифровой подписи
Абонент А шифрует документ своим секретным ключом, таким образом подписывая его, и посылает документ абоненту Б. Абонент Б расшифровывает документ, используя открытый ключ абонента А, таким
образом проверяя подпись.
23
Если на этапе проверки подписи не сошлись, то становится ясно, что
документ был подписан кем-то другим или искажен (модифицирован) до того, как попал по назначению.
Манипуляции с цифровой подписью представляют из себя “асимметричное шифрование наоборот”: при отправке используется закрытый ключ
отправителя, а для проверки сообщения – открытый ключ отправителя.
Подобный обмен местами открытого и закрытого ключей для создания
из процедуры асимметричного шифрования алгоритма электронной подписи
возможен только в тех системах, где выполняется свойство коммутативности ключей.
3.4 Криптосистема Эль-Гамаля
Криптосистема, предложенная ЭльГамалем (T. ElGamal) в 1985 г., является альтернативой RSA и при равном значении ключа обеспечивает ту же
криптостойкость, которая определяется трудоемкостью вычисления дискретного логарифма в конечном поле. Ее можно использовать как для цифровых
подписей, так и для шифрования.
Проблема дискретного логарифма состоит в следующем: не существует эффективных методов решения сравнения ax = b (mod p). Если возводить
число в степень в конечном поле достаточно легко, то восстановить аргумент
по значению (то есть найти log) довольно трудно.
Для генерации пары ключей абонент А берет простое число p и два
случайных числа g и x, каждое из которых меньше p. Затем вычисляет: a = gx
mod p.
Общедоступными ключами являются a, g и p, а секретным ключом является х.
Проверка подписи (отправителем является абонент А). Чтобы
подписать свое сообщение m, абонент А выбирает случайное число k (0 < k <
p), которое является простым по отношению к (p) = p1. Затем вычисляет 
 gk mod p.
Из уравнения m  (x + k) mod ((p)) абонент А находит . Случайное
число k следует хранить в секрете. Пара (, ) представляет собой зашифрованный текст, размер которого, таким образом, в два раза больше исходного.
Получив сообщение, абонент Б, хочет проверить подпись. Для этого ему
необходимо проверить равенство:
a   gm (mod p).

Докажем справедливость этого равенства.
m  (x + k) mod ((p)) 
m = Z(p) + (x + k)
Т.к. p  простое и 0 < g < p, то (g, p) = 1, , по теореме Эйлера, g(p)  1(p),
откуда gZ(p)  1(p).
Т.к. gx  a (mod p), gk   (mod p), то gx + k  a  (mod p).
Значит, gm = gZ(p) + (x + k) = gZ(p) gx + k  a (mod p). 
24
Шифрование/дешифрование (отправителем является абонент Б).
Для шифрования сообщения m теперь уже абонент Б выбирает случайное
число k (0 < k < p), которое является простым по отношению к (p) = p1.
Затем он вычисляет
  gk mod p
и
  ak m mod p.
Получив зашифрованное сообщение  пару (, )  получатель А расшифровывает его своим секретным ключом: m   (1)x mod p.

Докажем, что преобразование обратимо:  (1)x  ak m gkx  gxk m gkx 
m (mod p). 
3.5 Криптосистемы на основе эллиптических уравнений
Эллиптическая кривая есть множество точек (x, y), удовлетворяющее следующему уравнению:
y2 = x3 + ax + b,
а также бесконечно удаленная точка.
Эллиптические кривые можно определить над любым полем (конечным, действительным, рациональным или комплексным). В криптографии
обычно используются конечные поля.
Для точек на кривой довольно легко вводится операция сложения, которая играет ту же роль, что и операция умножения в криптосистемах RSA и
Эль-Гамаля.
В реальных криптосистемах на базе эллиптических уравнений используется уравнение
y2 = x3 + ax + b mod p, где p  простое.
Проблема дискретного логарифма на эллиптической кривой состоит в следующем: дана точка G на эллиптической кривой порядка r (количество точек
на кривой) и другая точка Y на этой же кривой. Нужно найти единственную
точку x такую, что Y = xG, то есть Y есть х-я степень G.
ГЛАВА III. ВЫЧИСЛИТЕЛЬНЫЕ АСПЕКТЫ КРИПТОГРАФИИ
§ 1. Быстрое возведение в степень (алгоритм «квадрированияумножения»)
Докажем, что чтобы вычислить степень mn, где m и n  натуральные
числа, достаточно выполнить не более 2[log2n] умножений.

Пусть 2l1  n < 2l, т.е. l1 = [log2n]. Тогда, записывая n в двоичной системе счисления, получим: n = n0 + n1  2 + n2  22 + ... + nl1  2l1  1 + 2 + 4
+ ... + 2l1 = 2l  1 < 2l.
mn = m^(n0)  m^(n1  2)  m^(n2  22)  ...  m^(nl1  2l1).
(ni
либо 0, либо 1)
25
Итак, сначала вычисляем п-ть: 1, m, m2, m4, ..., m^(2l1). При этом достаточно выполнить l1 возведение в квадрат. Затем некоторые из элементов пти следует перемножить. Умножений не больше l1. Всего: 2(l1) = 2[log2n].

Модулярное возведение в степень
Будем вычислять ab mod n, используя результаты п. 4.2, с помощью повторяющихся возведений в квадрат. Задача решается с помощью бинарного
представления b = [bk, bk1, ... b1, b0].
MODULAR-EXPONENTIATION(a, b, n)
d = 1;
for i: = k downto 0 do
{
d = (d · d) mod n; if bi = 1 then { d = (d · a) mod n}
}
return d
Сложность. Если a, b, n  l-битные числа, то арифметических операций требуется O(l), а битовых операций  O(l3).
Что касается практической применимости алгоритма, то вспомним,
например, самую популярную криптосистему RSA: чем быстрее выполняется
модулярное возведение в степень, тем быстрее производится шифрование.
Его эффективность зависит от правильного выбора открытого ключа а. Многие из существующих стандартов предлагают в качестве а использовать число 65537 = 216 + 1. Двоичное представление этого числа содержит только две
единицы; поэтому для возведения в степень нужно выполнить лишь 17
умножений: m2^1, m2^2, ..., m2^16, mа = mm2^16.
§ 2. Нахождение больших простых чисел
Во многих приложениях (таких как криптография) необходимо находить большие «случайные» простые числа. Такие числа не слишком редки,
так что перебор случайных целых чисел подходящего размера до тех пор, пока не будет найдено простое число, не занимает слишком много времени.
2.1 Решето Эратосфера
Греческий математик Эратосфен (275-194 гг. до н.э.) предложил интересный метод нахождения простых чисел в интервале [2, n]. Он написал на
папирусе все натуральные числа от 2 до 1000, после чего стал прокалывать
составные числа. Папирус оказался в роли решета, которое просеивает составные числа, а простые оставляет. Такой метод и получил название Решето Эратосфена. Поясним этот метод. Пусть написаны все натуральные числа от 2 до n:
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, ...
Первое неперечеркнутое число в строке является простым. Таким образом, 2  простое число. Начинаем “просеивание” с него, исключив все числа,
которые делятся на два; останется
26
2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, ...
Далее берем следующее по порядку неперечеркнутое число 3 и исключаем все числа, кратные ему и т.д. Таким образом, мы исключим все составные числа, оставив лишь простые. Следует заметить, что когда мы дойдем,
например, до числа 11, первое неисключенное кратное 11-и число будет
112=121, т.к. 22, 33, ..., 110 были исключены ранее. Значит, вместо n в этом
алгоритме достаточно сделать n шагов.
2.2 Метод последовательного деления
Функция распределения простых чисел (n) определяет количество
простых чисел меньших либо равных n. Пример. (10) = 4 [2, 3, 5, 7].
 ( n)
1.
Теорема (о простом числе). lim
n   n / ln n
Аппроксимация n / ln n дает вполне точную оценку (n) даже для малых значений n. Надо понимать, что для целей криптографии даже 1010 является малым значением (всего 11 разрядов!).
Пример. Пусть n = 109: (n) = 50 847 534; n / ln n = 48 254 942.
Можно использовать теорему о большом числе для определения вероятности того, что случайно выбранное целое n окажется простым. Эта вероятность составляет
(кол-во простых чисел,  n) / (количество всех натур-х чисел) = (n) / n  (n /
ln n) / n = 1 / ln n.
Значит, нам надо проверить примерно ln n случайно выбранных целых
чисел, чтобы получить простое число той же длины, что и n.
Пример. Пусть n = 2512: чтобы найти 512-тибитное простое число требуется проверить примерно ln n ≈ 355 случайно выбранных 512-тибитных
целых чисел (работу можно сократить на половину, проверяя только нечетные числа).
Выбрав n случайным образом, начинаем последовательно делить его на
2, 3, ..., n (trail division); поэтому Tmax(n) = O( n ) = O(2l/2), т.е. растет экспоненциально с длиной n. Значит, этот способ хорошо работает только в тех
случаях, когда n очень мало или имеет маленький простой делитель. Преимущество метода в том, что он не только определяет, простое n или составное, но также определяет делители составного n.
2.3 Псевдопростые числа
Пусть Zn+ = {1, 2, ..., n 1}. Назовем число n a-псевдопростым, если n 
число составное и
an1  1 (mod n) (1)
В соответствии с теоремой Ферма, если n  число простое, то (1) выполняется для любого a  Zn+. Значит, если мы сможем найти такое a  Zn+, для которого уравнение (1) не выполняется, то n  число составное.
27
Проверяем: выполняется ли (1) при a = 2. Если «нет», то n  число составное. Иначе мы полагаем, что n  число простое (на самом деле, n либо
простое, либо 2-псевдопростое).
Процедура проверяет простоту числа. Входная величина n > 2  нечетное целое число.
PSEUDOPRIME(n)
if MODULAR-EXPONENTIATION(2, n1, n)  1 (mod n) then
return COMPOSITE
//Определенно
else return PRIME
// Можно надеяться
Ошибается эта процедура достаточно редко: при n < 105 она ошиблась
только для 22 значений; первые 4 таких числа 341, 561, 645, 1105. Доказано,
что с ростом разрядности l числа n вероятность ошибки уменьшается: при l
  вероятность ошибки  0.
При l = 512 в 1 случае из 1020 число окажется 2-псевдопростое; при l =
1024  в 1 случае из 1041. Для практических приложений процедура успешно
работает. Если же проверяемое число выбрано не случайным образом, то нужен более тщательный подход.
Если в качестве а выбрать не 2, а 3, то и в этом случае существуют
числа, на которых процедура ошибается. Их называют числами Кармайкла
(Carmichael numbers). Первые три числа: 561, 1105, 1729. Встречаются они
очень редко; таких чисел, меньших 108, только 255.
2.4 Алгоритм Миллера-Рабина
Лемма. Пусть b  {2, 3, ..., n  2} и b2  1(mod n). Тогда n  составное.

(b2  1 (mod n))  (b2  1  0(mod n))  (если n  простое, то либо (b  1), либо (b + 1) делится на n без остатка). С другой стороны, т.к. 1 < b
< n  1, эти числа делится на n не могут.

Тест Миллера-Рабина (Miller-Rabin) получается путем внесения в процедуру PSEUDOPRIME двух модификаций:
1. проверяются несколько случайно выбранных базовых значений a, а
не только a = 2;
2. во время каждого модулярного возведения в степень проверяется, не
обнаружен ли нетривиальный квадратный корень из 1 по модулю n? В этом
случае работа прекращается и возвращается COMPOSITE.
Входные данные: проверяемое на простоту n > 2  нечетное целое число, а также s  количество случайно выбранных базовых величин a. Используется генератор случайных чисел RANDOM(1, n1), который возвращает
случайное целое число 1  a  n1. Вспомогательная процедура WITNESS(a,
n) (“свидетель”) возвращает значение TRUE  когда a можно использовать
для доказательства того, что n  составное. Хоть она и сложнее, но более эф-
28
фективна по сравнению с тестом 2n1  1 (mod n), который является основой
процедуры PSEUDOPRIME.
Пусть n1 = 2t u, где t  1 и u  нечетное, т.е., бинарное представление
n1 есть бинарное представление нечетного целого u с последующими в точности t нулями. Тогда an1  (au)2^t (mod n) и, , an1 mod n можно вычислить,
сначала вычислив au mod n, а затем возведя результат t раз в квадрат.
WITNESS(a, n)
1 x0 = MODULAR-EXPONENTIATION(a, u, n)
// x0 = au mod n.
2 for i = 1 to t do
3
{
xi = x2i1 mod n; if xi = 1 and xi1  1 and xi1  n  1 then return
TRUE;
}
4 if xt  1 then return TRUE
// xt = an1 mod n
5 return FALSE
Если эта процедура возвращает TRUE в 4, то оказалось, что xt = an1
mod n  1. Если n  простое, то по теореме Ферма an1  1 (mod n) для всех a
 Zn+. Значит, n не может быть простым.
Если эта процедура возвращает TRUE в 3, то выяснилось, что xi1 
нетривиальный квадратный корень из 1 по модулю n, так как (xi1  1(mod
n)) но при этом (xi  x2i1  1(mod n)). Такое возможно только для составного
числа n. В этом случае внешний цикл заканчивается раньше.
С использованием процедуры WITNESS тест Миллера-Рабина будет
выглядеть так:
MILLER-RABIN(n, s)
for j < 1 to s do
{a = RANDOM(1, n1);
if WITNESS(a, n) then return COMPOSITE } // Определенно
5 return PRIME
// С большой долей вероятности
Пример. Пусть n  число Кармайкла (561), , n 1 = 560 = 24  35.
Пусть выбрано a = 7.
Тогда x0 = 735 = 241 (mod 561); x: 241, 298, 166, 67, 1. На последнем шаге возведения в квадрат обнаружен нетривиальный квадратный корень из 1.
Значит, 7280 = 67 (mod 561) и 7560 = 1 (mod 561). Процедура WITNESS(7, n)
вернет TRUE, и процедура MILLER-RABIN вернет COMPOSITE.
Сложность. Если n имеет l разрядов, то процедура MILLER-RABIN
выполняет O(sl) арифметических операций и O(sl3) битовых операций, так
что асимптотически она имеет сложность не большую, чем s модулярных
возведений в степень.
Оценка ошибки. В отличии от процедуры PREUDOPRIME здесь ошибка не зависит от n; она зависит от s и удачи в выборе а. Доказано, что для
любого нечетного целого n > 2 и положительного целого s вероятность, что
процедура MILLER-RABIN(n, s) ошибется, не больше 2s .
Выбор s = 50 годится практически для любого приложения.
29
§ 3. Задача факторизации
Задача факторизации (разложения на простые множители) большого
целого числа значительно более трудная по сравнению с задачей проверки,
является ли это число простым?
Кроме силовой атаки для решения этой задачи существует атака «парадокса дней рождения».
3.1 Парадокс дней рождения
Сколько людей должно собраться в комнате, чтобы с вероятностью
50% утверждать, что двое из них родились в один и тот же день года?
Вероятность того, что, по крайней мере, двое из них родились в один
день года, можно найти как 1 минус вероятность противоположного события
А, состоящего в том, что все дни рождения различны.
Для события А мощность множества всех возможных исходов: nk,
мощность множества благоприятных исходов: (n  1) (n 2) ... (n  (k1)), откуда
P(A) = (n  1) (n 2) ... (n  (k1)) / nk = [(n  1) / n] [(n  2) / n] ... [(n (k1)) /
n] =
= [1 1/n] [1 2/n] ... [1 (k1)/n]
Вспомнив разложение экспоненты в ряд Маклорена, можем записать:
1+х  ех, откуда
k 1
P(A)  exp(1/n) exp(2/n) ... exp((k 1)/n)  exp (  i/n) = exp (k(k 1) /
i 1
2n).
Нас интересует, при каком значении k справедливо неравенство: 1
P(A)  1/2, или, что то же самое, P(A)  1/2. Последнее неравенство выполняется при
exp (k(k 1) / 2n)  1/2 или k(k 1) / 2n  ln(1/2).
Решив квадратное уравнение k(k 1) = 2n ln(1/2), найдем, что k 
(1+ 1 (8 ln 2)n ) / 2. Подставляя n = 365, получим k  23. Таким образом, в
комнате должно собраться, по крайней мере, 23 человека, чтобы с вероятностью, не меньшей 1/2, утверждать, что среди них хотя бы двое родились в
один день. Асимптотика: k = O( n ).
3.2 Метод Полларда
Последовательное деление на все целые числа до некоторого В включительно гарантирует разложение на множители любого числа, не превышающего В2. Предлагаемая процедура POLLARD-PHO, проделывая такой же
объем работы, раскладывает на множители число,  В4 (если мы достаточно
удачливы). Так как эта процедура эвристическая, вне зависимости от времени ее работы успех не гарантирован, хотя на практике процедура зарекомендовала себя исключительно эффективной. Еще одно достоинство процедуры
30
в том, что она использует постоянный объем памяти (с помощью нее даже на
программируемом карманном калькуляторе можно раскладывать на множители маленькие числа).
POLLARD-RHO(n)
i = 1; x1 = RANDOM(0, n1); y = x1;
k = 2;
while TRUE do
{i = i + 1;
xi = (x2i1  1) mod n;
d = НбОД(yxi, n);
if d  1 and d  n then print d
if i = k
then {y = xi; k = 2k}.
Для ясности здесь указаны индексы i, но программа работает и без них,
т.к. сохранять надо только последнюю вычисленную величину xi. Если внести это изменение, процедура будет использовать постоянный объем памяти.
В переменной y сохраняются последовательно x1, x2, x4, x8, ... Используя
сохраненное значение y и текущее значение xi, ищем d  наибольший общий
делитель чисел yxi и n. Если d  нетривиальный делитель n, то печатаем его.
Процедура может пропустить какой-то делитель, но уж если она напечатала d, то он действительно нетривиальный делитель n.
Так как множество Zn конечное и каждая величина в п-ти xi зависит
только от предыдущего значения, то рано или поздно п-ть «зацикливается».
Рисунок (n = 73) показывает, что начало п-ти x1, x2, ..., xj1 можно нарисовать
в виде «хвоста» , а цикл xj, xj+1, ... xi в виде «тела» . Отсюда название метода  «-эвристика».
Пример. Полагая для простоты x1 = 2, составим п-ть xi при n = 73: (см. рис.): 2 3  8 
63  26  [18  31  47  18 ...].
Предположим, что функция fn(x) = (x21)
mod n ведет себя подобно «случайной» функции. В действительности она случайной не является, но это допущение согласуется с наблюдаемым поведением POLLARD-RHO. В соответствии с парадоксом дней рождения ожидаемое число шагов, сделанных перед тем, как п-ть
зациклится, составляет O( n ).
Встает вопрос: как быстро найдем первый мнжитель?
Пусть p  такой нетривиальный делитель n, что НОД(p, n/p) = 1
Пример. Если n = p11 p22... pkk, то в качестве p можно взять p11.
Лемма. Пусть n = p q, где p и q взаимное простые, и z  ( mod n) mod
p. Тогда z   mod p.
 Обозначим w   mod n, откуда w = nC1 + .
Имеем z  w mod p, откуда z = pC2 +w = pC2 + nC1 +  = p (C2 + qC1) + .

31
По п-ти xi можно построить п-ть x’i, где
x’i = xi mod p
для любого i.
Так как функция fn(x) определяется с использованием только арифметических операций (возведение в квадрат и вычитание) по модулю n, то
можно вычислить x’i+1, зная x’i, по mod p:
x’i+1 = xi+1 mod p = fn(xi) mod p = ((xi21) mod n) mod p = (xi21) mod p =
((xi mod p)21) mod p = ((x’i)21) mod p = fp(x’i).
Значит, хотя мы не вычисляем точно п-ть (x’i), эта п-ть хорошо определена и подчиняется тем же соотношениям, что и (xi).
В соответствии с парадоксом дней рождения ожидаемое число шагов,
сделанных перед тем, как п-ть (x’i) зациклится, составляет O( p ). Если p мало по сравнению с n, п-ть (x’i) начнет повторяться намного быстрее, чем п-ть
(xi). В самом деле, п-ть (x’i) повторяется, когда два элемента в п-ти (xi) просто
эквивалентны по mod p.
Обозначим через t индекс первого повторившегося элемента в п-ти
(x’i), а через u>0 длину цикла. Эти величины являются наименьшими из тех,
для которых x’t+i = x’t+u+i для любого i  0. Ожидаемое значение для t и u>0
составляет O( p ). Но если x’t+i = x’t+u+i, то xt+u+i  xt+i делится на p без остатка. Значит, НбОД(xt+u+i  xt+i, n) > 1.
Возможно, что найденный множитель  p, хотя может случиться, что
найдено кратное число для p. Так как ожидаемое значение для t и u>0 составляет O( p ), то ожидаемое число шагов для создания множителя p составляет
O( p ).
Алгоритм не может работать в точности так, как мы ожидаем, по двум
причинам.
1. Эвристический анализ затраченного времени нерегулярный, и возможно, что цикл величин по mod p будет больше чем p . В этом случае алгоритм работает корректно, но значительно медленнее, чем ожидалось.
2. Может случиться, что множитель p всегда обнаруживается в том же
НОД операторе, который обнаруживает множитель q. А поскольку оба множителя найдены одновременно, будет напечатан бесполезный тривиальный
множитель n = pq.
На практике эта проблема представляется незначительной. Если необходимо, эвристику можно перезапустить с другим соотношением: xi+1 = (x2i 
с) mod n (доказано, что не следует выбирать с = 0 и с = 2; остальные с годятся).
Чтобы полностью разложить на множители l-битное составное число n,
нам необходимо найти все простые делители, не превышающие [ n ]; поэтому можно ожидать, что процедуре потребуется, по крайней мере, n1/4 = 2l/4
арифметических операций и n1/4 l2 = 2l/4 l2 битовых операций. Отличительной
чертой процедуры POLLARD-RHO является ее способность найти малый делитель p числа n за O( p ) арифметических операций.
32
§ 4. Задача вычисления дискретного логарифма
Если при отыскании логарифма положительного действительного
числа, можно воспользоваться методом последовательных приближений,
вдвое уменьшая на каждом шаге интервал, в который попадает искомое значение, то ничего подобного для вычисления дискретного логарифма не существует.
4.1 Метод полного перебора
Этот метод хотя бы теоретически всегда приводит к успеху. Он состоит в следующем. Чтобы решить уравнение bl  а(mod q), т.е. найти l = indba,
начиная с i = 0, сравниваем bi mod q c а mod q. Если эти выражения равны, то
l = i, иначе увеличиваем i на единицу.
Если q порядка 2100 или больше, то количество умножений, необходимых для вычисления l, чрезвычайно велико и находится за пределами возможности современных вычислительных машин.
4.2 Метод согласования
Этот метод известен, как алгоритм Сильвера-Полига-Хеллмана (SilverPohlig-Hellman).
Лемма. Пусть t, r  натуральные числа, t  r2. Для любого целого l (0  l
< t) можно указать такие целые числа x и y, что
l  xr+y(mod t), 0  x
< r, 0  y < r.

Полагаем x = [l / r], y = l xr. Значит, 0  x  (l / r) < (t / r)  r. С другой
стороны,
0  x  (l / r) < x+1 или 0  xr  l < xr+r, откуда 0  (l xr) = y < r. 
Полагаем, что порядок t числа b известен (таблицы с порядками
насчитаны заранее).
Обозначив t = ord b, покажем, что дискретный логарифм l можно
найти, выполнив не более чем 2( t +log2t)  1 операций умножения.

Полагаем r = [ t ] + 1. Рассмотрим ряды
1, b, b2, ..., br1 (*)
и
a, abr, ab2r, ..., ab (r1) r. (**)
Если уравнение bl  а(mod q) разрешимо относительно l, то, по доказанной лемме, представим l в виде: l  xr+y(mod t), 0  x < r, 0  y < r. Отсюда l = Ct + (xr+y)
Так как t = ord b, то (bl = bCt + (xr+y) = 1bxr+y  а(mod q))  (by  аbx
r
(mod q)), т.е. ищем такой элемент by ряда (*), который совпадает с какимнибудь элементом аbx r ряда (**).
При вычислении элементов ряда (*) потребуется выполнить не более
r2 умножений. Для вычисления br = btr требуется выполнить не более чем
2log2t умножений (см. п. 4.2). И не более чем r1 умножений потребуется для
вычисления всех членов ряда (**). В результате, общее число операций не
превосходит 2r3+2log2t  2( t +log2t)  1. 
33
§ 5. NP - трудные задачи
При анализе сложности решения вопрос формального описания задачи
приобретает фундаментальный смысл. Дело в том, что способ записи (кодировки) условия задачи в существенной степени влияет на сложность ее решения.
Пример. «Является ли натуральное число n простым?»
Решение. Делим на простые a, не превышающие n (пусть ab и ab=n
 b=n/aa; na2).
I способ задания n: в десятичной сс. Длина l записи составит l = [log10 n]+1,
откуда n = 10l1. Сложность алгоритма  O( n ) = O(10(l1)/2)  показательная.
II способ задания n: в мультипликативной форме записи: n = p11 p22... pkk,
где pi  простые.
Если p2 = p3 = ... = pk = 1 = 1, то n  простое. Сложность алгоритма  O(1).
Класс P включает в себя задачи, время решения которых ограничено
полиномом от длины записи условия.
Пример. Внутренние сортировки: от O(n) до O(n2), где n  количество
элементов сортируемого массива.
Американский математик С. Кук выделил широкий класс задач (класс
NP), для решения которых в настоящее время не построены алгоритмы полиномиальной сложности, но которые могут быть решены путем просмотра
значительного числа различных вариантов.
Примеры. 1) Задача о распознавании простоты натурального числа. 2)
Задача о раскраске n  вершинного графа в k цветов (всего способов раскраски k n; если вершины каждого ребра имеют разный цвет, то раскраска правильная; вопрос задачи: при данных n и k сколько способов раскрасить правильно?)
Теория С. Кука дает реальный инструмент для оценки относительной
сложности задач из класса NP. Подробнее.
Сводимость. Пусть требуется создать программу П1 для решения задачи А. Пусть уже существует программа П2 для решения задачи В. Разрешается включить П2 в П1 в качестве подпрограммы, причем к этой подпрограмме можно обратиться только один раз. Считая, что П2 выполняется за
единицу времени, определим время выполнения П1. Если П1 выполняется за
полиномиальное время, то задача А полиномиально преобразуется в задачу В.
Оказалось, что многие задачи выбора, эффективное решение которых
пока не найдено, полиномиально преобразуются друг в друга.
С. Кук доказал, что все задачи из класса NP полиномиально преобразуются в одну конкретную задачу  задачу о выполнимости.
Формулировка задачи о выполнимости. Булева функция задана в виде
КНФ:
34
s
f(x1,..., xn) = & Di, где Di = xi  1  xi  2  ...  xi  r  элементарная дизъюнк1
2
r
i 1
ция.
Существует ли набор (a1,..., an) значений переменных (x1,..., xn), обращающих
функцию f в 1?
Эта задача и является той самой «универсальной задачей», к которой
можно свести любую задачу из класса NP.
Полиномиальная эквивалентность двух задач Z1 и Z2 из класса NP
определяется как двусторонняя полиномиальная сводимость: Z1 к Z2 и Z2 к
Z1.
Любая задача класса NP, полиномиально эквивалентная проблеме выполнимости, называется NP-полной.
Для доказательства NP-полноты произвольной задачи S из класса NP
достаточно показать, что к ней полиномиально сводится проблема выполнимости или любая другая задача, NP-полнота которой уже установлена.
Примеры.
1. Задача о разрешимости в числах (0, 1) системы линейных уравнений.
Сведем проблему выполнимости к этой задаче на частном примере. Пусть
БФ имеет вид:
f( x1, x2, x3, x4) = x1 ( x1 x2  x3) ( x2   x3) (x2  x4) x4.
Условие выполнимости ~ разрешению системы:
x1 = 1;  x1 x2  x3 = 1; x2 x3 = 1; x2x4 = 1; x4 = 1. [решения: (1, 1, 0, 1) и
(1, 1, 1, 1)]
Замена:  x = 1  x:
x1 = 1;
(1  x1)  x2  x3 = 1;
x2 (1x3) = 1;
x2(1x4) = 1; x4 = 1.
Замена: xi  xj = xi + xj  yk, где yk  {0, 1}
x1 = 1;
(1  x1) + x2 + x3  y1  y2 = 1; x2 + (1x3)  y3 = 1; x2 + (1x4)  y4
= 1; x4 = 1.
Наконец, x1 = 1;  x1 + x2 + x3  y1  y2 = 0; x2  x3  y3 = 0; x2 x4  y4 = 0; x4
= 1.
2. Задача о клике
Кликой графа F называется максимальное по мощности множество
вершин этого графа, любые две из которых являются смежными.
Пример. Граф, изображенный на рисунке, имеет клику мощности 4.
Формулировка: существует ли в F клика из m вершин?
Сведем проблему выполнимости к этой задаче на частном примере. Пусть
БФ имеет вид:
f( x1, x2, x3) = x1 (x1 x2  x3) (x2  x3).
35
Разных решений три: (1, 0, 0), (1, 0, 1),
(1, 1, 1).
Переменной xr, входящей в i-ю
скобку и занимающей там j-е место,
сопоставляется пара (i , j). Каждая
вершина графа имеет двойное обозначение:
xr (i , j).
 Не соединяем ребром вершины (i , j) и (i , k) (переменные из одной скобки).
 Не соединяем ребром вершины xr и xr (не могут быть равны единице одновременно).
 В остальных случаях вершины соединяются ребром.
Задачу о выполнимости можно сформулировать следующим образом: существует ли в
графе F клика мощности 3? В нашем примере
таких клик 4  по числу решений в таблице.
I
x1
x1
x1
x1
x1
x1
II
x1
x1
x2
x2
x3
x3
III
Решение
x2 x1=1; x2=0; x3  любое
x3 x1=1; x3=1; x2  любое
x2

x3
x1 = x2 = x3 = 1
x1=1; x2=0; x3 = 0
x2
x3

Другими примерами NP-полных задач является задача коммивояжера и задача нахождения в графе гамильтонова цикла.
Существуют задачи класса NP, для которых не доказана их NPполнота. Например, задача о простоте натурального числа и задача распознавания изоморфизма графов.
Пути решения NP-полных задач
Если будет найден полиномиальный алгоритм решения некоторой NPполной задачи, то это будет означать, что все NP-полные задачи могут быть
решены за полиномиальное время.
Вопрос о справедливости равенства P=NP  один из главных в современной математике.
В настоящее время доказательство NP-полноты той или иной задачи
является аргументом в пользу отказа от поиска полиномиального алгоритма
ее решения и переключения внимания исследователя на приближенные методы или варианты переборных алгоритмов.
1. Поиск приближённых решений (эвристические алгоритмы)
2. Метод ветвей и границ
3. Сведение задач друг к другу
4. Сведение задач к задаче линейного программирования.
РАЗДЕЛ 4. Словарь терминов (глоссарий)
Элементы теории чисел
36
Алгоритм
Евклида
Дробь
конечная цепная
подходящая
Задача
нахождения дискретного логарифма
факторизации
Сравнение
первой степени
Теорема
Китайская (об остатках)
Ферма (малая)
Эйлера
Уравнение
диофантово
Функция
Эйлера
Алгоритмы криптографии
Алгоритм
обмена ключами (Диффи-Хеллмана)
RSA
Эль-Гамаля
Атака
man-in-the-middle («человек посередине»)
«малых показателей»
силовая
Дешифрование
Криптоанализ
Криптография
Криптология
Криптосистема
с закрытым (секретным) ключом (ссиметричный алгоритм)
с открытым ключом (асимметричный алгоритм)
Скремблер
Открытый текст
Подпись
электронная (цифровая)
Шифр
блочный
перестановочный
подстановочный
37
Фейштеля сеть
Шифрование
Шифротекст
Вычислительные аспекты криптографии
Алгоритм
квадрирования-умножения
Миллера-Рабина
Задача
NP-полная
NP-трудная
о выполнимости
о клике
о разрешимости в числах (0, 1) системы линейных уравнений
Метод
Полларда
Полного перебора
последовательного деления
согласования Сильвера-Полига-Хеллмана
Парадокс дней рождения
Числа
Карлмайка
псевдопростые
Эратосфена
решето
РАЗДЕЛ 5. Практикум по решению задач (практических ситуаций) по
темам лекций (одна из составляющих частей итоговой государственной
аттестации)
Элементы теории чисел
Задание 1.1. С помощью алгоритма
делитель чисел 9991 и 3977.
Решение. Составим таблицу:
9991 = 3977 
3977 = 2037 
2037 = 1940 
1940 = 97

Евклида найти наибольший общий
2
1
1
20
+ 2037
+ 1940
+ 97
+
0
Наибольший общий делитель чисел 9991 и 3977 равен остатку, полученному в предпоследней строке таблицы, т.е. 97.
38
Задание 1.2. С помощью алгоритма Евклида разложить рациональное
число 78/14 в конечную цепную дробь.
Решение. Составим таблицу:
78
14
8
6
=
=
=
=




14
8
6
2
5
1
1
3
+
+
+
+
8
6
2
0
Последовательность неполных частных [5; 1, 1, 3] представляет собой
искомую конечную цепную дробь:
78
1
5
.
1
14
1
1
1
3
Задание 1.3. Решить сравнение: 507 x  1(mod 250).
Решение.
1. Используя алгоритм Евклида, найдём последовательность неполных
частных:
507
250
7
5
2
=
=
=
=
=
 2 +
 35 +
 1 +
 2 +
 1 +
250
7
5
2
2
7
5
2
1
0
2. Зная последовательность неполных частных qk, по формулам
Pk+1 = qk+1 Pk + Pk1,
Sk+1 = qk+1 Sk + Sk1, k = 1, 2, ... , n1.
P0 = q0, S0 = 1.
P1 = q0 q1+1, S1 = q1.
найдём числители и знаменатели подходящих дробей:
k
0
1
2
3
4
qk 2 35 1
2
2
Pk 2 71 73 217 507
Sk 1 35 36 107 250
(1)
(2)
(3)
3. S3 = 107, поэтому x  (1)3S3 (mod 250) = 107(mod 250)  143(mod
250).
Ответ: x = 143.
Задание 1.4. Решить диофантово уравнение: 3x + 50y = 1.
Решение.
39
1. Используя алгоритм Евклида, найдём последовательность неполных
частных:
3
50
3
2
=
=
=
=
 0 +
 16 +
 1 +
 2 +
50
3
2
1
3
2
1
0
2. Зная последовательность неполных частных qi, по формулам (1) – (3)
найдём числители и знаменатели подходящих дробей:
k
qk
Pk
Sk
3. Тогда x = (1)2 S2 = 17,
0 1 2 3
0 16 1 2
0 1 1 3
1 16 17 50
y = (1)3 P2 = 1.
Ответ: x = 17, y = 1.
Задание 1.5. С помощью Китайской теоремы об остатках найти такое ,
что
  14(3),   8(7),   19(4),   10(5).
Решение.
1. Найдем такое число 1, что 1  14(3) и 1  8(7). Составим последовательность (начиная с числа 14, с шагом 3, выписываем 7 чисел): 14, 17, 20,
23, 26, 29, 32. Среди этих чисел находим такое, которое равноостаточно с 8
при делении на 7: 1 = 29.
2. С помощью 1 найдем такое число 2, что 2  19(4). Обозначим s =
37=21. В п-ти: 29, 50, 71, 92 находим 2 = 71.
3. С помощью 2 найдем такое число , что   10(5). Обозначим s =
374=84. В п-ти: 71, 155, 239, 323, 407 находим  = 155.
Ответ:  =155.
Задачи для самостоятельного решения
Задание 1.6. С помощью алгоритма Евклида решить уравнение: 48x +
25y = 1.
Задание 1.7. С помощью Китайской теоремы об остатках найти такое ,
что
α ≡ 3 (mod 4), α ≡ 0 (mod 7), α ≡ 2 (mod 11), α ≡ 10 (mod 27).
Алгоритмы криптографии
40
Задание 2.1. Используя таблицу Unicode, подготовить к шифрованию
симметричным криптоалгоритмом сообщение «СОН», преобразовав его в последовательность нулей и единиц.
Решение.
По таблице Unicode русской заглавной букве «С» соответствует число
1057. Переведём его в двоичную систему счисления: 105710 = 100001000012.
Аналогично, для букв «О» и «Н» соответственно имеем: 1054 10 =
100000111102 и 105310 = 100000111012. Произведя конкатенацию (соединение) полученных строк, окончательно имеем…
…Ответ: 100001000011000001111010000011101.
Задание 2.2. Проследить состояние скремблера до момента зацикливания, если его начальное состояние имеет вид: 10000, а в качестве фиксированных разрядов выбраны I и V.
Решение.
Приписав к последовательности 10000 справа сумму по модулю два
() I-го и V-го разрядов, а затем отбросив крайний левый разряд, получим:
00001.
Продолжая аналогичные действия, построим последовательность состояний скремблера: 00001  00011  00111  01111  11111  11110 
11101  11010  10101  01010  10100  01001  10011  00110 
01100  11000  10001  00010  00100  01000  10000.
Задание 2.3. Используя таблицу Unicode, подготовить к шифрованию
криптоалгоритмом RSA сообщение «ВЕК». Размер блока выбрать равным 7.
Решение.
По таблице Unicode русской заглавной букве «В» соответствует число
1042. Переведём его в двоичную систему счисления: 104210 = 100000100102.
Аналогично, для букв «Е» и «К» соответственно имеем: 104510 =
100000101012 и 105010 = 100000110102. Производим конкатенацию (соединение) полученных строк:
100000100101000001010110000011010.
Разбиваем последовательность на блоки по 7 символов в каждом. Последний блок, в котором оказалось всего 5 символов, дополняем двумя нулями. Число, соответствующее каждому блоку, переводим в десятичную систему счисления:
10000012 = 65; 00101002 = 20; 00010102 = 10; 11000002 = 96; 11010002 =
104.
Ответ: (65, 20, 10, 96, 104).
Задание 2.4. Зашифровать сообщение (3, 1, 2) методом RSA, если n =
55, а = 7.
Решение.
41
m11  m1a (mod n)  37 (mod 55)  42 (55),
m12  m2a (mod n)  17 (mod 55)  1 (55),
m13  m3a (mod n)  27 (mod 55)  18 (55).
Ответ: (42, 1, 18).
Задание 2.5. Расшифровать сообщение (29, 9, 1) методом RSA, если
p = 3, q = 11, а = 7.
Решение.
Сначала найдём секретный ключ x. Для этого
 вычислим n = p q = 33,
 найдём значение функции Эйлера (n) = (33) = (3-1) (11-1) = 20,
 составим уравнение: 7x + 20y = 1 и, решив его (см. задание 1.4), найдём
x= 3.
Дешифрование производим с помощью секретного ключа:
m21  m11x (mod n)  293 (mod 33)  2 (33).
m21  m12x (mod n)  93 (mod 33)  3 (33),
m23  m13x (mod n)  13 (mod 33)  1 (33),
Ответ: (2, 3, 1).
Задание 2.6. Составить и проверить цифровую подпись методом ЭльГамаля, если
p = 11, g = 2, x = 5, m = 9.
Решение.
1. Вычислим a  gx mod p = 32 (mod 11)  10.
2. В качестве секретного числа k выберем, например, 3, и вычислим 
 gk mod p = (23 mod 11)  8.
3. Составим уравнение m  (x + k) mod ((p)), т.е. 9  (40+3) (mod
10), откуда найдём  = 3.
Пара чисел (, ) = (8, 3) представляет собой искомую цифровую
подпись.
Проверка подписи состоит в проверке равенства: a   gm (mod p).
Так как a  = 108 83  6 (mod 11) и gm = 29  6 (mod 11), то подпись верна.
Задание 2.7. Зашифровать сообщение m = 5 методом Эль-Гамаля, если
p = 11, g = 2, x = 5.
Сделать проверку, расшифровав полученное сообщение.
Решение.
1. Вычислим a  gx mod p = 32 (mod 11)  10.
2. В качестве секретного числа k выберем, например, 7, и вычислим 
 gk mod p = (27 mod 11)  7.
3. Вычислим   ak m mod p = 107 5 (mod 11)  6.
Пара чисел (, ) = (7, 6) представляет собой искомый шифротекст.
Проверка: дешифрование осуществляется по формуле:
42
m   (1)x mod p  6 (71)5 mod 11.
Сначала найдём 71, решив сравнение: 7 z  1(mod 11) (см. задание 1.3), откуда z = 8.
Наконец, m  6 (8)5 (mod 11) = 5.
Задачи для самостоятельного решения
Задание 2.8.
а) Считая для простоты представлением буквы её номер по алфавиту, с
помощью алгоритма RSA зашифровать слово «БУРЯ», если n = 93, a = 37.
б) С помощью алгоритма RSA расшифровать слово «21, 60, 95, 29, 95,
102, 8», если p = 2, q = 53, a = 33.
Задание 2.9.
а) Считая для простоты представлением буквы её номер по алфавиту, с
помощью алгоритма Эль-Гамаля зашифровать слово «Чёлка», если p = 43, g =
7, a = 7.
б) С помощью алгоритма Эль-Гамаля расшифровать слово «(27,32),
(8,28), (25,17), (4,17), (30,7)», если p = 47, g = 3, x = 25.
Вычислительные аспекты криптографии
Задание 3.1. С помощью алгоритма быстрого модулярного возведения
в степень вычислить: 171159 (mod 101). Решение оформить в виде таблицы.
Решение. Вычисления производим с помощью алгоритма:
d = 1;
for i: = k downto 0 do
begin d = (d · d) mod n; if bi = 1 then { d = (d · a) mod n}
end
return d
Ответ: 65.
Задание 3.2. Доказать, что число 1105
а) 2-псевдопростое;
б) 3-псевдопростое.
Решение. Число 1105 имеет нетривиальный делитель 5, и, следовательно, не является простым. Так как 21105−1  1 (mod 1105), то число 1105 2псевдопростое, а так как 31105−1  1 (mod 1105), то оно 3-псевдопростое.
43
Задание 3.3. С помощью метода Полларда факторизовать число 91. В
качестве x1 выбрать 4.
Решение. Вычисления производим с помощью алгоритма:
i = 1; x1 = RANDOM(0, n1); y = x1;
k = 2;
while TRUE do
begin
i = i + 1; xi = (x2i1  1) mod n;
d = НбОД(yxi, n); /* НбОД ищем с помощью алгоритма Евклида
*/
if d  1 and d  n then print d
if i = kthen begin y = xi; k = 2k end
end.
i
k
xi
y
|y − xi|
d
1
1
4
4
−
−
2
2
15
15
11
1
3
2
42
15
27
1
4
4
34
34
19
1
5
4
63
34
29
1
6
55
21
7
Определив один из множителей (7), находим второй: 91 / 7 = 13.
Ответ: 91 = 7  13.
Задание 3.4. С помощью метода согласования решить уравнение:
6l = 16 (mod 23),
если известно, что порядок t числа 6 равен 11.
Решение.
2. Определяем r = [ t ] + 1 = 4.
3. Находим 6−r (mod 23) = 6−4(mod 23) = 6t−1 (mod 23) = 611−4 (mod 23) =
3 (mod 23).
4. Составляем последовательности:
1, b, b2, ..., br1 (*)
и
a, abr, ab2r, ..., ab (r1) r. (**)
В нашем случае они примут вид:
1, 6, 13, 9 (*)
и
16, 2, 6, 18 (**)
y
Совпали первый элемент b ряда (*) и второй элемент аbx r ряда (**)
(нумерация в последовательностях начинается с нуля). Зная y = 1 и x = 2,
находим l  xr+y(mod t)  24+1(mod 23)  9.
Ответ: 9.
Задачи для самостоятельного решения
Задание 3.5. С помощью метода Полларда факторизовать n = 2747,
начать с x = 33.
Задание 3.6. С помощью метода согласования решить уравнение
44
3l = 8 (mod 17),
если известно, что порядок числа 3 равен 16.
РАЗДЕЛ 6. Изменения в рабочей программе, которые произошли после
утверждения программы.
Характер
изменений в
программе
Номер и дата
протокола заседания кафедры,
на котором было
принято данное
решение
Подпись заведующего кафедрой,
утверждающего
внесенное изменение
Подпись декана факультета (проректора
по учебной работе),
утверждающего данное изменение
РАЗДЕЛ 7. Учебные занятия по дисциплине ведут:
Ф.И.О., ученое
звание и степень
преподавателя
Минц Ю.А.,
ассистент
Ланина Н.Р.,
к.т.н., доцент
Ланина Н.Р.,
к.т.н., доцент
Учебный Факультет
год
2010-2011
ФМОИП
2011-2012 ФМОИП
2012-2013 ФМОИП
45
Специальность
Прикладная математика и информатика
Прикладная математика и информатика
Прикладная математика и информатика
46
Download