- •Теория алгоритмов (краткий курс лекций для самостоятельной работы)
- •Лекции по теории алгоритмов Введение
- •Предмет криптографии
- •Лекция №1
- •Краткие теоретические сведения
- •1 Шифр сцитала
- •2 Шифр вертикальной перестановки
- •3 Шифр поворотной решетки
- •4 Шифры с использованием магичных квадратов
- •5 Перестановка бит
- •Лекция №2
- •Краткие теоретические сведения
- •Варианты реализации шифров простой замены
- •1 Система шифрования Цезаря
- •2 Афинная система подстановок
- •3 Лозунговый шифр
- •4 Шифровальный квадрат Полибия
- •5 Шифровальная таблица Трисемуса
- •4Х8 «Сколько волка ни корми, он все в лес глядит »
- •Лекция №3
- •Краткие теоретические сведения
- •1 Биграммный шифр Плейфейера
- •2 Шифр с использованием омофонов
- •3 Шифр Гронсфельда
- •4 Система шифрования Вижинера
- •5 Шифр «Двойной квадрат Уитстона»
- •Общие сведения о блочных шифрах
- •Описание алгоритма des
- •Режимы реализации алгоритмов симметричного шифрования
- •Асимметричные криптоалгоритмы
- •Модулярная арифметика
- •Открытое распределение ключей
- •Криптосистема rsa
- •7 Самокорректирующиеся коды
- •7.1 Построение кодов Хемминга (описание алгоритма кодирования)
- •7.2 Обнаружение ошибок в кодах Хемминга
- •7.3 Декодирование
- •Примеры решения задач Задача № 3
- •Задача № 4
- •Алгоритм решения задачи следующий:
- •Литература
Открытое распределение ключей
В симметричных системах шифрования перед началом работы необходимо передать секретный ключ обеим сторонам. До появления криптосистем с открытым ключом распределение секретных ключей представляло сложную задачу (услуги специального курьера, организация секретного канала связи и т.п.).
Первое практическое применение криптосистем с открытым ключом – организация обмена ключами между удаленными пользователями через открытые каналы связи.
Рассмотрим практическую реализацию (протокол обмена ключами).
Необходима определенная подготовительная работа:
получить p – большое простое число;
получить полное разложение числа (p–1) на множители;
вычислить первообразный корень rпо модулюp(rmodp)
В
сякое
составное число можно разложить на
простые множители (множители – простые
числа или их положительные целые степени,
возможно нулевые).
где pi – простые числа;bi– степени простых чисел.
Первообразный корень – любое число из
интервала
,
для которого выполняется условие:
.
Если выполняется это условие, то любое
целое числосможно представить в виде
,
гдех– некоторое положительное целое число
из интервала
.
Пару чисел (p,r
) используют в качестве общих
данных (открытого ключа).
Протокол обмена ключами Диффи–Хеллмана
1. Агенерирует элемент
,
вычисляет
и отправляет результатВ.
2. В генерирует элемент
,
вычисляет
и отправляет результат А.
3. Авычисляет значение
.
4. Ввычисляет значение
.
Замечание:после получения
значения
и
должны быть уничтожены.
В результате выполнения протокола
каждый из абонентов АиВ получает
общий ключ
,
который может быть использован в
симметричных системах шифрования,
причем противник, которому известен
открытый ключ (p,r
) и который перехватил числа
и
не сможет вычислить значение
.
ПримерПустьp= 43 (простое число),r= 3 – первообразный корень по
;
пара чисел (43,3) – открытый ключ для
выработки секретного ключа
.
Пусть в результате выполнения протокола
Агенерирует элемент
,
и вычисляет
.
Аналогичные действия Вдают следующий
результат: элемент
,
и вычисление
.
После выполнения пунктов 3, 4 протокола
результат следующий:![]()
.
Рекомендации для практической реализации
1 Простое число pнеобходимо выбирать так, чтобы числоp -1имело достаточно большой сомножительpmax > 2160.
2 r– не обязательно должен быть первообразным корнем; достаточно следующего:
r≠ 1;
и
.
Криптосистема rsa
RSA – системаассиметричного шифрования, в которой для кодирования сообщения используется один ключ, а для расшифровки другой. Названа в честь математиков-криптологовРона Ривеста(Rivest),Ади Шамира(Shamir) иЛена Адельмана(Adelman) изМасачуссетского Технологического Института, разработавших алгоритм в1977году.
Система RSAиспользуется для защиты программного обеспечения и в схемахцифровой подписи. Также она используется в открытой системе шифрованияPGP. Из-за низкой скорости шифрования (около 30 кбит/с при 512 битном ключе на процессоре 2ГГц), сообщения обычно шифруют с помощью более производительныхсимметричных алгоритмовсо случайным ключом, а с помощьюRSAшифруют только этот ключ, который в зашифрованном виде помещают в начало шифротекста.
В связи со схемой RSAвозникает ряд алгоритмических задач.
1.Для генерации ключей надо уметь генерировать большие простые числа. Близкой задачей является проверка простоты целого числа.
2.Для взламывания ключа вRSAнужно уметь раскладывать целое число на множители (или, что практически то же самое, уметь вычислять функцию Эйлера). Взлом ключа может интересовать только преступников, но, с другой стороны, те, кто пытаются защитить информацию, должны быть уверены, что задача разложения на множители достаточно сложна.
Для выработки секретного ключа абонент А, заинтересованный в получении зашифрованной информации от других абонентов, должен выполнить следующие действия.
1. Выбрать два случайных простых числа p иq, причем |p | ≈ |q | (т.е. числа примерно одинаковой длины).
2. Вычислить N=pq .
3. Вычислить функцию Эйлера φ(N) =(p-1) (q-1)(см. примечание).
4. Выбрать случайное целое число e<φ (N) взаимно простое сφ (N)
т.е. НОД(e,Ф(N) ) = 1 и найти числоdобратноеeпо модулюφ(N) (e -1=d )
e d ≡1 mod(φ(N) ) = 1 +φ(N) ∙n (n– любое целое число).
5. В качестве параметров открытого ключа сообщить пару (e,N ) всем, кто будет передавать ему зашифрованную информацию; секретный ключd не разглашать и надежно хранить; числаp,q,φ(N) – уничтожить.
Примечание Функция Эйлераφ(N) равна количеству целых чисел, взаимно простых сN. Вычислить эту функцию в общем виде для любогоNможно через его разложение на простые сомножители. ПустьN =p1b1 p2b2 p3b3 …pnbn , тогда функция Эйлера вычисляется по формулеφ(N) = N (1- 1/ p1) (1- 1/ p2) (1- 1/ p3) …(1- 1/ pn) .
Шифрование
Вхочет зашифровать сообщениеmи переслать егоАпо открытому каналу причем (m < N); для получения шифротекстаВвыполняет следующее преобразование:
m e (modN) → c ,
где c– шифротекст, который передаетсяАпо открытому каналу.
Замечание: ЕслиВутратил исходное сообщение m, то поcон не сможет восстановитьm.
Расшифрование
Для восстановления исходного сообщения mАс полученным шифротекстомc выполняет следующее преобразование:
c d (modN) → m.
Математически убедимся в этом:
c d (mod N) = m e d (mod N) = m(1 + φ (N)∙n) (mod N) = m m φ (N)∙n(mod N) =
= m (m φ (N)∙ (mod N)) n = m.
Последнее преобразование выполнено в соответствии с теоремой Эйлера.
ТеоремаЕсли НОД( m,N) = 1, то m φ (N)∙ ≡ 1(modN ). (это в нашем случае всегда так за исключением двух совпаденийm=pиm=q ). Предполагается, что вероятность таких совпадений ничтожно мала при большихpиqв реальных криптосистемах.
Пример (учебный)
Пусть А выбралN=p ∙q= 7х13 = 91 иe = 5; тогдаφ(N)∙= 6х12 = 72 . Открытый ключ (91,5) . Для вычисления секретного ключаd необходимо решить уравнение
5 d ≡ 1(mod 72) ; или. 72 n +5 d = 1
Подставляя в это уравнение числа = 0, ± 1, ± 2 и т.д. получим единственное целочисленное решение при n= –2d= 29 (секретный ключ).
Пусть Врешил отправитьАсообщениеm=3. Используя открытый ключ (91,5) он получил шифротекст3 5 (mod91) → 61 . Шифротекст 61Впередает по открытому каналуА. Для восстановления исходного сообщенияАвыполняет следующее вычисление:
61 29 (mod91) → 3.
Лекция 7
