Методические указания и индивидуальные задания для самостоятельной работы по дисциплине Комплексное обеспечение информационной безопасности инфокоммун
.pdfФедеральное агентство связи
федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики»
Кафедра Технологии электронного обмена данными
Методические указания и индивидуальные задания для самостоятельной работы по дисциплине
Комплексное обеспечение информационной безопасности инфокоммуникационных сетей и систем
Для направления подготовки 11.04.02 Инфокоммуникационные технологии и системы связи
Москва 2015 г.
Методические указания и индивидуальные задания для самостоятельной работы по дисциплине «Комплексное обеспечение информационной безопасности инфокоммуникационных сетей и систем» составлены для подготовки магистров по направлению 11.04.02 - «Инфокоммуникационные технологии и системы связи» (профили подготовки «Сети, системы и устройства телекоммуникаций», «Мультисервисные инфокоммуникационные технологии»). В пособии изложен необходимый теоретический материал по криптографии, приводятся решения задач и даются упражнения для самостоятельной работы студентов, что способствует более глубокому усвоению курса.
Составители: Боброва И.Л., Севрук К.А.
Утверждено на заседании кафедры 02.09.2015 г.
2
|
СОДЕРЖАНИЕ |
|
ВВЕДЕНИЕ |
4 |
|
1. Математические основы (теория чисел) |
4 |
|
1.1 |
Простые числа |
4 |
1.2 |
Наибольший общий делитель |
5 |
1.3 |
Модулярная арифметика |
5 |
2. Криптография с открытым ключом |
7 |
|
2.1 |
Алгоритм RSA |
7 |
2.2 |
Электронная цифровая подпись (ЭЦП) |
8 |
2.2.1 Алгоритм формирования подписи Эль-Гамаля |
9 |
|
2.2.2 Алгоритм DSA |
10 |
|
2.3 |
Алгоритм формирования общего ключа по схеме Диффи-Хеллмана |
11 |
3.Симметричная система шифрования |
12 |
|
3.1 |
Потоковые шифры |
12 |
3.2 |
Генераторы псевдослучайных чисел |
13 |
3.3 |
Блочные шифры |
15 |
3.4 |
Сети Файстеля |
16 |
3.5 |
Режимы шифрования |
17 |
3.5.1 Электронная кодовая книга (ECB) |
17 |
|
3.5.2 Сцепление блоков по шифротексту (CBC) |
18 |
|
3.5.3 Обратная загрузка шифротекста (CFB) |
20 |
|
4. Хэш-функции |
21 |
|
Приложение 1 |
|
|
Задания для индивидуального выполнения |
23 |
|
Приложение 2 |
|
|
Темы рефератов |
34 |
|
Рекомендуемая литература |
35 |
|
3
Введение в современные криптографические алгоритмы
Широкое распространение получила криптография с открытым ключом, для её изучения необходимо знать математические основы – теорию чисел. Рассматриваются алгоритмы с использованием открытого ключа: RSA, Эль-Гамаля, DSA, Диффи-Хеллмана. Безопасность этих алгоритмов основана либо на трудоемкости разложения на множители больших простых чисел (как в алгоритме RSA), либо на трудоемкости вычисления дискретных логарифмов в конечном поле (алгоритмы Диффи-Хеллмана, Эль-Гамаля). Все эти алгоритмы используют большие простые числа от 512 до 1024 бит и более. Для упрощения вычислений индивидуальные задания содержат примеры решения задач криптографии с открытым ключом для малых простых чисел, которые на практике не используются. В Методических указаниях рассматривается симметричная система шифрования. После изучения краткой теории и примеров решения задач, студенты должны выполнить индивидуальные задания из Приложения 1. Приложение 2 содержит темы рефератов.
1. Математические основы (теория чисел)
1.1 Простые числа
Простым называют целое число, больше единицы, единственными множителями которого является единица и оно само. Простое число не делится ни на одно другое число. Число 2 – простое число. К простым числамотносятся также 11, 2521и 2365347734399.
Количество простых чисел бесконечно велико. В криптографии, особенно в криптографии с открытым ключом, нередко используются большие простые числа (512 бит и даже больше)
Для алгоритмов с открытыми ключами нужны простые числа. Их нужно множество для любой достаточно большой сети. Простых чисел бесконечно много, при длине числа до 512 бит, их приблизительно 10151.
Что если два человека случайно выберут одно и тоже простое число? Этого не случится. При выборе из 10151 простых чисел , вероятность совпадения выбора значительно меньше чем вероятность, что ваш компьютер вспыхнет в тот момент, когда вы выиграете в лотерею.
Но если так трудоемко разложение на множители , то как может быть простой генерация простых чисел? Дело в том, что установить простоту числа гораздо проще, чем разложить его на множители.
Генерация случайных чисел с последующей попыткой разложения их на множители – это неправильный способ поиска простых чисел. Существуют различные вероятностные проверки на простоту чисел, определяющие, является ли число простым, с заданной степенью достоверности.
Тест Леманна для проверки простоты числа p.
Вот последовательность действий для проверки простоты числа p.
1.Выберите случайное число a, меньшее чем p.
2.Вычислите z= a(p-1)/2 MOD p
3.Если z не равно 1 или p-1, то p определенно не простое
4.Если z равно 1 или p-1, то вероятность того, что число p не простое, не превышает
50%
Повторите этот тест t-раз. Если результат вычислений =1 или p-1, но не всегда равен 1, то p –простое число с вероятностью ошибки 1/2t
Тест Рабина-Миллера
Выберите для тестирования произвольное число p.
Вычислите b- число делений p-1 на 2, затем вычислите m, такое, что p-1=2b*m
4
1.Выберите случайное число a, меньшее p.
2.установите j=0 и вычислите z=am MOD p
3.Если z=1 или p-1 , то p – проходит тест и может быть простым числом
4.Если j>0 и z=1, то p не относится к простым числам
5.Установите j=j+1 Если j<b и z не равно p-1, установите z=z2 MOD p
и вернитесь на этап 4. Если z=p-1, то p проходит тест и может быть простым числом.
6.Если j=b и z не равно p-1, то p не относится к простым числам.
Вероятность прохождение этого теста составным числом убывает быстрее, чем в предыдущем тесте. Составное число ошибочно пройдет t тестов с вероятностью не более
(¼)t, где t- число итераций.
Генерация простых чисел
При генерации простых чисел выполняются следующие действия:
1.Сгенерировать случайное n-битовое число p.
2.Установить старшие и младшие биты =1
(старший обеспечивает необходимую длину, младший – нечетность p)
3.Убедитесь, что p не делится на малые простые числа: 3, 5,7 …
4.Выполнить тест Леманна или Рабина-Миллера для некоторого случайного a. Если число p проходит тест, то сгенерируйте другое число a и проверьте тест заново.
5.Если p тест не проходит, то сгенерируйте новое значение p и проверьте тест заново. Можно не генерировать новое число, а последовательно перебирать числа, начиная со случайно выбранного числа, пока не найдется простое число.
1.2 Наибольший общий делитель
Два числа называют взаимно простыми, если у них нет общих множителей, кроме 1. Иными словами, если наибольший общий делитель чисел a и n равен 1, эти числа называют взаимно простыми. Это записывается следующим образом:
НОД(a,n)=1
Например, числа 15 и 28 взаимно просты. Числа 15 и 27 не являются взаимно простыми, а числа 13 и 500 – являются. Простое число взаимно просто со всеми другими числами, кроме чисел, кратных данномупростомучислу.
Один из способов вычисления наибольшего общего делителя двух чисел – использование
алгоритма Евклида.
Математически это записывается следующим образом: Для любых целых n1 и n2 таких, что n2≠0,
НОД(n1,n2)=НОД(n2,Rn2(n1)) , где Rn2(n1)-остаток от деления n1 на n2 или по-другому n1 MOD n2.
Пример
НОД(54,30)= НОД(24,30)= НОД(6,24)= НОД(0,6)=6 НОД(156,117)= НОД(39,117)= НОД(0,39)=39
1.3 Модулярная арифметика Пример арифметики по модулю 12
(10+13)MOD 12= 23 MOD 12=11 MOD12
Другой способ записать это, сказав, что 23 и 11 равны по модулю 12 23 ≡ 11 (MOD 12)
В общем случае, α ≡ β (MOD n)
если α = β +kn при некотором целом k.
Если α не отрицательно, а β находится между 0 и n, можно рассматривать β как остаток от деления α на n. Иногда β называется вычетом по модулю n.
Множество целых чисел от 0 до n-1 образуют так называемую полную систему вычетов по модулю n. Это означает, что для любого целого числа α его вычет по модулю n равен некоторомучислуот 0 до n-1. Операция α MOD n обозначает вычет от α по модулю n.
5
Пример
5 MOD 3=2
Модулярная арифметика во многом подобна обычной арифметике. Так, она тоже коммутативна, ассоциативна и дистрибутивна. Приведение каждого промежуточного результата по модулю n дает тот же результат, что и выполнение всего вычисления с последующим приведением его по модулю n.
(a+b) MOD n =((a MOD n) + (b MOD n ))MOD n (a-b) MOD n =((a MOD n) - (b MOD n ))MOD n (a*b) MOD n =((a MOD n) *(b MOD n ))MOD n
(a*(b+c)) MOD n =((a*b MOD n) +(a*c MOD n ))MOD n
Обратные значения по модулю
Произведение таких чисел равно 1.
Если (a*a-1 ) MOD n =1 , тогда a-1 - обратное значение для a по модулю n.
В общем случае для a, если a и n взаимно простые числа, имеется одно обратное значение a-1 Если n простое число, то любое число от 1 до n-1 взаимно просто с n и имеет только одно обратное значение по модулю n.
Пример
Если a=3 , то a-1=5 по модулю 7 , т.к. (a*a-1 ) MOD n = (3*5 ) MOD 7=1
Образующая(или примитивный корень)
Если P простое число и G меньше чем P, то G называется образующей по модулю P, если для каждого числа β от 1 до P-1 существует такое число a, что (Ga) MOD P= β
Иногда G называют также примитивным корнем по модулю P. Пример, если P=11, то 2 – это образующая по модулю 11.
(2 10) MOD11 = (1024) MOD11=1 (2 1)MOD11 = (2) MOD11=2
(2 8) MOD11 = (256) MOD11=3
(2 2) MOD 11 = (4) MOD 11=4
(2 4) MOD 11 = (16) MOD 11=5
(2 9) MOD 11 = (512) MOD 11=6
(2 7) MOD 11 = (128) MOD 11=7
(2 3) MOD 11 = (8) MOD 11=8
(2 6) MOD 11 = (64) MOD 11=9
(2 5) MOD 11 = (32) MOD 11=10
Каждое число от 1 до 10 может быть представлено как (2 a)MOD 11
Для значения P =11, образующими являются числа 2, 6, 7 и 8. Другие числа не являются образующими. Например, образующей не является число 3, поскольку не существует решения для (3 a)MOD11=2
В общем случае, установить, является ли число образующей, нелегко. Задача упрощается, если известно разложение P-1 на множители. Пусть q1, q2, …qn- это различные простые множители P-1. Чтобы проверить, является ли число G образующей по модулю P,
вычислите:
( G(P-1)/Q) MOD p
для всех значений Q = q1, q2, …qn
Если это число = 1 для некоторого значения Q, то G не является образующей. Если для всех значений q1, q2, …qn рассчитанное значение не = 1, то G образующая.
6
Пример
Пусть P=11. Простые множители P-1 т.е.10 равны 2 и 5. Чтобы определить, что число 2 –
образующая, вычислим: ( 2(11-1)/5) MOD 11=4
( 2(11-1)/2) MOD 11=10
Ни один из ответов не равен 1, поэтому 2 – это образующая.
Теперь проверим, является ли образующей число 3: ( 3(11-1)/5) MOD 11=9
( 3(11-1)/2) MOD 11=1
Следовательно, 3 – это необразующая.
Для нахождения образующей – наугад выбирайте число от 1 до P-1 и проверяйте, не является ли оно образующей.
2. Криптография с открытым ключом
Основным пунктом концепции криптографии с открытым ключом было предложение использовать ключи парами. Для шифрования один ключ, а для расшифровки – другой. Эти ключи невозможно вычислить один из другого. С 1976 г. было создано много алгоритмов, использующих концепцию открытых ключей. Некоторые из этих алгоритмов пригодны только для решения ограниченной задачи распределения ключей шифрования, другие обеспечивают как шифрование, так и распределение ключей, третьи пригодны только для создания электронной подписи.
Алгоритм RSA и алгоритм Эль-Гамаля можно применять как для шифрования, так и для электронной подписи. Алгоритм DSA пригоден только для электронной подписи.
Все алгоритмы с открытым ключом работают значительно медленнее, чем симметричные алгоритмы. В результате часто используют гибридные криптосистемы, в которых для шифрования сообщений используется симметричный алгоритм со случайным сеансовым ключом, для шифрования которого используется алгоритм с открытым ключом.
2.1 Алгоритм RSA
Алгоритм RSA назван по первым буквам фамилий его разработчиков Р.Л. Райвеста, А. Шамира и Л.Адлемана. Алгоритм разработан в 1977 годув США.
Схема Райвеста-Шамира-Адлемана (RSA) с тех пор получила самое широкое признание и реализована практически во всех приложениях шифрования с открытым ключом.
RSA представляет собой блочный шифр, в котором открытый текст и шифротекст есть целые числа от 0 до 2n-1 при некотором n. В настоящее время используются значения n = 512, 1024, 2048 бит. В основу алгоритма положена процедура возведения в степень в модульной арифметике.
Краткие основы RSA:
1.Выбираются большие случайные простые числа P и Q;
2.Вычисляется их произведение: N=P*Q где N<=2n;
3.Случайным образом выбирается число E ( ключ шифрования), которое должно быть взаимно простым с результатом умножения (P-1)*(Q-1), т.е. не должно иметь с ним общих делителей, отличных от единицы;
4.Вычисляется число D( ключ расшифрования), из выражения (E*D) MOD [(P-1)*(Q-1)]=1;
Таким образом, пара чисел (E,N) будет открытым ключом, а пара чисел (D,N) -закрытым ключом. Два простых числа P и Q больше не нужны. Они могут быть отброшены , но не раскрыты. Понятно, что открытым ключом можно только закодировать исходный текст, для того, чтобы его раскодировать, нужен закрытый ключ.
7
Сообщение С, подлежащее шифрованию, разбивается на L отрезков длины n двоичных символов. Каждый отрезок сообщения рассматривается как число M , где 0<M <N =1,2…L Кодирование отрезка сообщения: A = (M )E MOD N;
Преобразованное сообщение C = A1 A2 … AL отправляют пользователю Обратная операция: M = (A )D MOD N;
Пример
(использование алгоритма RSA)
1.Выбираются большие случайные простые числа P=7 и Q=17;
2.Вычисляется их произведение: N=P*Q=7*17=119
3.Вычисляется φ(N)=(P-1)*(Q-1)= 6*16=96
4.Выбирается E, взаимно простое с φ(N)=96 и меньшее, чем φ(N); в данном случае E=5.
5.Определяется такое D, что (E*D) MOD 96=1 и D<96.
Соответствующим значением D будет 77, т.к. (77*5) MOD 96 =1
6.В результате получаем открытый ключ (5; 119) и секретный (77; 119).
7.Пусть исходный шифруемый текст будет M=19
8.Шифруем текст 19 5 MOD 119= 66
9.Передаем 66 – это зашифрованный текст.
10.Расшифровываем текст 6677 MOD 119= 19 – это восстановленный текст
2.2 Электронная цифровая подпись (ЭЦП)
Электронная цифровая подпись (ЭЦП) или цифровая подпись. Последний вариант является прямым переводом английского словосочетания digital signature. Термин «цифровая подпись» более удобен и точен.
Общеизвестно, что цифровая подпись файлов или электронных почтовых сообщений выполняется с использованием криптографических алгоритмов, использующих несимметричные ключи: собственно для подписи используется «секретный ключ», а для проверки чужой подписи — «открытый». Ключи представляют собой числа достаточно большой длины (от 512 до 4096 бит), математически связанные междусобой.
Цифровая подпись сообщения (файлы, электронные письма, сетевые пакеты и прочие наборы данных) - это последовательность бит фиксированной длины, формирующаяся по тексту сообщения с использованием секретного ключа его создателя. Корректность подписи проверяется с помощью открытого ключа. Обычно вместе с сообщением подписываются и некоторые его «реквизиты»: дата и время создания сообщения, (возможно) номер версии сообщения, время «жизни» сообщения. Цифровая подпись отправляется вместе с сообщением, и, обычно, становится неотъемлемой его частью. Получатель сообщения должен располагать копией открытого ключа отправителя. Схемы распространения открытых ключей могут быть разными: от простого личного обмена ключами до сложной многоуровневой «инфраструктуры открытых ключей» (public key infrastructure - PKI). Если при проверке цифровой подписи получатель устанавливает ее корректность, то может быть уверен не только в неизменности и «актуальности» сообщения, но - что самое важное - и в том, что сообщение «подписал» действительно его автор или отправитель
На сегодняшний день придумано и реализовано не так много алгоритмов цифровой подписи:
алгоритм подписи Ривеста-Шамира-Адельмана (RSA);
алгоритм Шнорра;
алгоритм DSA, являющийся федеральным стандартом на цифровую подпись в США; на него похож "старый" российский стандарт на цифровую подпись ГОСТ Р 34.10-94.
алгоритм Эль-Гамаля
8
алгоритм на основе эллиптических кривых
2.2.1 Алгоритм формирования подписи Эль-Гамаля
Для генерации пары ключей сначала выбирается простое число p и два случайных числа g и x, оба эти числа должны быть меньше p. Затемвычисляется y:
Y=gx MOD p
Открытым ключом являются g, y, p. Закрытым ключом является x.
Подпись Эль-Гамаля
1.Чтобы подписать сообщение M, сначала выбирается случайное число k, взаимно
простое с p-1 и g<p (g может быть образующей по модулю p) Вычисляется у= gx MOD p
2.затем вычисляется : a(подпись)=gk MOD p
3.Далее для нахождения b(подпись) решается следующее уравнение:
M=(xa+kb) MOD (p-1)
Подписью является пара чисел: a и b. Случайное значение k должно храниться в секрете.
Для проверки подписи нужно убедиться, что yaab MOD p = gm MOD p
Проверка
Подпись считается правильной, если yaab MOD p = gM MOD p
Пример:
Выбираем P=11 и g=2, а закрытый ключ x=8. Вычислим : Y=gx MOD p= 28 MOD 11 = 3
Открытым ключом являются y=3, g=2, p=11.
Чтобы подписать сообщение M=5, сначала выберем случайное число k=9. Убеждаемся, что НОД(9, 10)=1. Вычисляем:
a= gk MOD p= 29 MOD 11 = 6 Далее, решая уравнение, находим b. M=(ax+kb) MOD (p-1) 5=(8*6+9*b)MOD 10
Решением будет b=3, а подпись представляет паручисел: a=6, b=3.
Для проверки подписи убедимся, что: yaab MOD p =gM MOD p
3663 MOD 11 = 25 MOD 11
2.2.2 Алгоритм DSA (Digital Signature Algorithm)
Вавгусте 1991 года американский Национальный институт стандартов и технологии (NIST) предложил алгоритм DSA. В 1993 году DSA стал американским федеральным стандартом обработки информации №186, назвали его DSS (Digital Signature Standard).
Механизм создания подписи использует хэш-функцию h. DSS явно использует алгоритм SHA-1 (Secure Hash Algorithm).
Генерация ключа
Валгоритме используются следующие параметры:
p= простое число длиной L битов от 512-1024 и кратное длине блока
q=160-битовый простой множитель p-1
g=h(p-1)/q MOD p, где h любое число , меньшее p-1, для которого h(p-1)/q MOD p> 1 x= число, меньшее q.
y=gx MOD p
В алгоритме также используется однонаправленная хэш-функция H(m).
9
Первые три параметра: p, q и g – открыты и могут быть общими для пользователей сети. Закрытым ключом является x , открытым y.
Генерация подписи
Чтобы подписать сообщение m:
1.Алиса генерирует случайное число k, меньшее q.
2.Алиса генерирует:
r=(gk MOD p) MOD q s=(k-1(H(m)+xr)) MOD q
3.Ее подписью служат параметры r и s, которые она посылает Бобу.
Проверка подписи
4.Боб проверяет подпись, вычисляя
w=s-1 MOD q u1=(H(m)*w )MOD q
u2=(rw) MOD q
v=((gu1 * yu2)MOD p) MOD q
Если v=r, то подпись правильная.
Пример:
Пусть p=31 - простое число и q=5-битовый простой множитель p-1=30=5*2*3
выберем h =3,
тогда g=h(p-1)/q MOD p=330/5 MOD 31=36 MOD 31=16
Выберем секретный ключ x=4, т.к он должен быть меньше q=5, Вычислим открытый ключ y=gx MOD p=164 MOD 31=2
Для генерации подписи генерируем случайное целое число k<q, например, пусть k=3. Далее вычисляем r=(gk MOD p) MOD q=(163 MOD 31) MOD5=4.
Затем вычисляем s=(k-1(H(m)+xr)) MOD q
Предварительно надо вычислить обратный элемент для k такой, что k*k-1 MOD q=1. Определяем, что k-1 =7.
Предположим, что хэш сообщения, которое надо подписать, уже вычислено и равно
H(m)=18, тогда s=(k-1(H(m)+xr)) MOD q=7(18+4*4)MOD 5=3
Подписью для сообщения, имеющего H(m)=18, является пара чисел (r,s). В данном случае это пара (4,3).
Для проверки подписи на принимающей стороне вычисляют:
w=s-1 MOD q, предварительно находят обратный элемент для s такой, что s*s-1 MOD q=1. Отсюда следует, что s-1 =7.
w=7 MOD 5=2
Затем вычисляют:
u1=(H(m)*w )MOD q= (18*2) MOD 5=1 u2=(rw) MOD q=(4*2) MOD 5=3
v=((gu1 * yu2)MOD p) MOD q =((16 * 23)MOD 31) MOD 5=4
В данном случае v=r=4, следовательно, подпись правильная.
.
10
