
- •Литература
- •Введение
- •1. Цель и содержание работы
- •2. Методика выполнения работы
- •2.1. Шифры одноразового блокнота и замены Краткие теоретические сведения
- •Задание 1. Шифрование и расшифрование одноразовым блокнотом
- •Технология работы
- •Краткие теоретические сведения
- •Задание 2. Шифрование и расшифрование шифром Цезаря
- •Технология работы
- •Задание 3. Шифрование и расшифрование шифром Вижинера
- •Технология работы
- •2.2. Шифры перестановки Краткие теоретические сведения
- •Задание 4. Шифрование и расшифрование шифром простой перестановки
- •Технология работы
- •2.3. Шифрование с помощью аналитических преобразований Краткие теоретические сведения
- •Задание 5. Шифрование и расшифрование с помощью аналитических преобразований
- •Технология работы
- •2.4. Криптосистемы с открытым ключом Краткие теоретические сведения
- •Задание 6. Шифрование и расшифрование с помощью алгоритма rsa
- •Технология работы
- •Задание 7. Шифрование и расшифрование с помощью системы ElGamal
- •Технология работы
- •2.5. Генератор надежных паролей
- •Задание 8. Разработка генератора надежных паролей
- •Технология работы
- •1. Разработка формы:
- •2. Разработка программного кода:
- •3. Компиляция и запуск программы:
- •Краткие сведения из теории чисел
Задание 7. Шифрование и расшифрование с помощью системы ElGamal
1. Научитесь шифровать и расшифровывать тексты, используя алгоритм ElGamal.
Технология работы
Выберем p=23, g=5, =6.
Вычислим h = 56 mod 23 = 8.
Открытый ключ (23,5,8), закрытый ключ 6.
Допустим, что шифруется числовая информация М=7.
Пусть выбрано r=10.
Вычислим c1 = 510 mod 23 = 9 и c2 = 7810 mod 23 = 21. Таким образом, криптотекст имеет вид С = (9,21).
Осуществим дешифрование: D(9,21) = 21(96) -1 mod 23 = 7.
Обмен ключами. Классическая симметричная криптосистема основывается на наличии закрытого канала для обмена секретными ключами. Этот канал должен быть надежно защищен от посягательств криптоаналитика противника, что создает серьезную проблему в реализации подобных систем. В асимметричных криптосистемах проблемы пересылки секретного ключа не существует, так как он является личной собственностью каждого абонента сети, а открытые ключи для шифрования имеют общедоступный статус.
На первых порах, когда появились криптосистемы с открытым ключом, была выдвинута идея о закате классических криптосистем. Но оказалось, что «хоронить» симметричные системы рановато. Дело в том, что они работают на несколько порядков быстрее, чем асимметричные системы. Фактор скорости шифрования/дешифрования становится определяющим при передаче больших объемов информации. В связи с этим обстоятельством возникла идея объединить достоинства обоих криптосистем: секретный ключ передается по открытому каналу с помощью криптосистемы с открытым ключом, а основная масса передаваемых сообщений шифруется классическими методами.
Для реализации процедуры обмена секретными ключами между абонентами сети по открытым каналам необходимо придерживаться определенного протокола.
Протокол – это последовательность установленных правил, в соответствии с которой осуществляется обмен сообщениями между участниками протокола для достижения определенной цели
Рассмотрим один из возможных вариантов обмена секретным ключом между абонентами по открытому каналу, предложенный Диффи и Хеллманом:
Абонент А выбирает большое простое число р и некоторый примитивный элемент g по модулю р, которые пересылает абоненту В по открытому каналу.
Затем абонент А выбирает целое случайное число в границах от 1 до р1, а абонент В выбирает целое случайное число в тех же границах.
Абонент А вычисляет значение g mod p и посылает его абоненту В. В свою очередь, абонент В вычисляет значение g mod p и посылает его абоненту А.
Принятое сообщение абонент А возводит в степень по модулю р, а абонент В возводит принятое сообщение в степень по тому же модулю. Так как каждый из абонентов вычисляет одно и то же число (g) mod p = (g) mod p = g mod p, то оно и принимается в качестве секретного ключа в симметричной криптосистеме.
В качестве примера рассмотрим следующий случай:
Абонент А выбрал p=97, g=5 и открыто переслал их абоненту В.
Затем А выбрал =12, а В выбрал =63.
Абонент А вычисляет 512 mod 97 = 42 и посылает его В.
Абонент В вычисляет 563 mod 97 = 75 и посылает его А.
Оба абонента вычисляют 7512 mod 97 = 4263 mod 97 = 21. Это и есть секретный ключ.
Цифровая подпись – это сообщение, которое формируется из открытого текста М по определенному алгоритму, затем шифруется и вместе с зашифрованным или открытым текстом передается адресату
Основным назначением цифровой подписи является задача убедить получателя сообщения в том, что оно поступило от известного ему абонента и не подделано. Область использования цифровой подписи чрезвычайно широка: от проведения финансовых и банковских безбумажных операций до контроля за выполнением международных договоров и охраны авторских прав. Особо важное значение имеет проблема подписи при безбумажной передаче сообщений.
Обеспечение защиты каждой стороны, участвующей в обмене данными, осуществляется с помощью ведения специальных протоколов. Для верификации сообщения протокол должен содержать следующие обязательные положения:
отправитель сообщения вносит в передаваемое сообщение свою цифровую подпись, представляющую собой дополнительную информацию, зависящую от передаваемых данных, имени получателя сообщения и некоторой закрытой информации, которой обладает только отправитель;
получатель сообщения должен иметь возможность удостовериться, что полученная в составе сообщения подпись есть правильная подпись отправителя;
получение правильной подписи отправителя возможно только при использовании закрытой информации, которой обладает отправитель;
для исключения возможности повторного использования устаревших сообщений подпись должна зависеть от времени.
Общая схема использования цифровой подписи включает в себя:
Вероятностный алгоритм генерирования ключей. Каждый абонент А сети генерирует случайную пару ключей (КА,КА), где КА – открытый ключ, а КА – секретный ключ.
Алгоритм подписи SIGN. Получив на входе произвольное сообщение М и секретный ключ КА, этот алгоритм формирует шифрованное слово S = SIGN(M,КА), которое называется подписью абонента А на сообщении М. Когда А хочет послать кому-то сообщение М и при этом убедить получателя в том, что оно действительно принадлежит А, то он передает пару (S,M).
Алгоритм подтверждения подписи CHECK. Получатель сообщения М, желая убедиться в том, что оно действительно отправлено абонентом А, включает этот алгоритм, используя общедоступный ключ КА. Проверка считается успешной, если CHECK(КА,M,S) = 1.
Для любого сообщения М и для каждой пары ключей (К,К) должно выполняться соотношение:
CHECK(К,M,SIGN(M, К)) = 1.
Выполнение этого условия означает корректность системы цифровой подписи. Все указанные алгоритмы должны быть эффективными.
Стойкость такой системы подписи означает, что лишь законный собственник секретного ключа К может для сообщения М выработать такую подпись S, которая прошла бы проверку CHECK(К,M,S) = 1. Если такую же подпись S находит противник, то говорят, что он подделывает (фальсифицирует) подпись легального абонента на сообщении М.
Любую асимметричную криптосистему можно преобразовать в систему цифровой подписи следующим образом: пусть Е и D – соответственно алгоритмы шифрования и дешифрования, К и К – открытый и секретный ключи, а М – произвольное сообщение. Тогда:
SIGN(M,К) = DK(M) и
1, если EK(S) = M;
CHECK(К,M,S) =
0, в противном случае.
В качестве примера рассмотрим систему цифровой подписи ЭльГамаля:
Генерирование ключей. Выбирается большое простое число р, а также число g, 1<g<p1, имеющее в мультипликативной группе Zp* большой порядок. Каждый абонент выбирает себе случайное число в промежутке от 1 до p1, и вычисляет h = g mod p.
Открытый ключ: р, g, h.
Секретный ключ: .
Подписывание. Абонент А вырабатывает свою подпись S под сообщением М следующим образом:
выбирает случайное простое число r такое, что 1rp1;
вычисляет s1 = gr mod p;
вычисляет r = r1 mod (p1);
вычисляет s2 = (Мs1)r mod (p1);
формирует подпись S = (s1,s2) и передает ее вместе с открытым текстом М.
3. Подтверждение подписи. Абонент В проверяет подпись:
gM hs1 s1s2 (mod p).
Очевидно, что при передаче открытого текста М, который не нужно шифровать, а требуется только присоединить к нему цифровую подпись, рассмотренный подход не является оптимальным, так как длина подписи равна длине открытого текста.
Естественным способом устранения этого недостатка является использование так называемой хэш-функции h(M), которая из исходного текста М произвольной длины формирует дайджест сообщения фиксированной длины W = h(M) (например, в программе PGP дайджест сообщения имеет длину 160 или 128 бит).
Дайджест – это криптографически стойкая односторонняя хэш-функция, чем-то похожая на «контрольную сумму», т.е. представляет собой определенную «выжимку» из сообщения М.
Хэш-функция h(M), формирующая дайджест, должна удовлетворять следующим требованиям:
быть быстро вычислимой для любого сообщения М;
не должна приводить к коллизиям, т.е. для разных сообщений М1 и М2 не должно выполняться равенство h(М1) = h(М2);
по заданному образу W = h(M) невозможно эффективно найти такое М, что h(М) = h(М). Это не что иное, как свойство односторонности хэш-функции.
В качестве хэш-функции можно взять функцию h, сконструированную на основе RSA-функции:
h(М) = RSA(h(M1...Ml1)h(Ml)),
где длинное сообщение М разбивается на блоки фиксированной длины, соответствующей выбранной длине дайджеста: M=M1...Ml1Ml.
В настоящее время наибольшее распространение получили следующие алгоритмы получения дайджеста:
SHA (Алгоритм защищенного хэширования) – 160-битовый алгоритм хэширования, разработанный Агенством национальной безопасности США по заказу Национального института стандартов и технологий (NIST).
MD5, представленный в общее пользование RSA Data Security, Inc., является 128-битовым хэш-алгоритмом. Он был практически взломан в 1996 г. немецким криптографом Хансом Доббертином. В нем обнаружены настолько серьезные слабые места, что его использование на практике является весьма рискованным.
Полученный дайджест отправитель сообщения шифрует своим секретным ключом, присодиняет его к открытому тексту и передает все это получателю.
Получатель может проверить правильность цифровой подписи, используя открытый ключ отправителя для расшифровки дайджеста сообщения. Это доказывает, что тот, кто указан в качестве отправителя сообщения, является его создателем, и что сообщение не было подвергнуто фальсификации, так как только отправитель владеет своим закрытым ключом, использованным для формирования цифровой подписи. Подделка цифровой подписи невозможна, и отправитель не может впоследствии отрицать ее подлинность. Рис. 3 иллюстрирует процесс осуществления цифровой подписи.
В 1991 г. NIST предложил в качестве стандарта цифровой подписи систему DSA (Digital Signature Algorithm), названный стандартом DSS (Digital Signature Standard). Суть его заключается в следующем.
1. Генерирование ключей:
Выбирается большое простое число р такое, что р1 имеет достаточно большой простой делитель q. Стандарт требует, чтобы 2512<p<21024 и q>2160.
Выбирается в группе Zp* произвольное h число порядка q.
Параметры р, q, h не составляют секрета и являются общими для всех абонентов сети.
Абонент А выбирает целое случайное число в диапазоне от 0 до q1, и вычисляет b = h mod p. Его ключи формируются следующим образом:
открытый ключ: b такое, что b = h mod p;
секретный ключ: .
2. Подписывание. Алгоритм подписи использует хэш-функцию h, в качестве которой DSS предлагает функцию SHA с длиной 160 бит. Для выработки своей подписи S для сообщения М, абонент А:
выбирает случайное простое число r такое, что 0rq1;
вычисляет r = r1 mod q;
вычисляет s1 = (hr mod p) mod q;
вычисляет s2 = ((h(М)+s1)r) mod q;
формирует подпись S = (s1,s2) и передает ее вместе с открытым текстом М.
3. Подтверждение подписи. Абонент В, получив сообщение М с подписью S = (s1,s2), выполняет следующее:
вычисляет s = s21 mod q;
вычисляет u1 = (h(М)s) mod q;
вычисляет u2 = (s1s) mod q;
вычисляет t = (hu1bu2 mod p) mod q;
проверяет равенство t = s1.