Лабораторные работы МСЗИ 6

advertisement
Лабораторная работа №6
Тема: Хеш-функции. Технологии цифровых подписей. Защита конфиденциальной
информации в ОС LINUX
Цель работы: Изучить свойства хеш-функции. Ознакомиться с некоторыми
приемами работы с пакетом GnuPG для шифрования файлов и создания цифровой
подписи.
1. Основные сведения
1.1 Основные понятия хеш-функций
Хеш-функцией
называется
такое
математическое
или
алгоритмическое
преобразование заданного блока данных, которое обладает следующими свойствами:
1. Хэш-функция Н должна применяться к блоку данных любой длины.
2. Хэш-функция Н создает выход фиксированной длины.
3. Н(М) относительно легко (за полиномиальное время) вычисляется для любого
значения М.
4. Для любого данного значения хэш-кода h вычислительно невозможно найти M
такое, что Н(M)=h.
5. Для любого данного х вычислительно невозможно найти y
x, что H(y)=H(x).
Первые три свойства требуют, чтобы хэш-функция создавала хэш-код для любого
сообщения.
Четвертое свойство определяет требование односторонности хэш-функции: легко
создать хэш-код по данному сообщению, но невозможно восстановить сообщение по
данному хэш-коду. Это свойство важно, если аутентификация с использованием хэшфункции включает секретное значение. Само секретное значение может не посылаться,
тем не менее, если хэш-функция не является односторонней, противник может легко
раскрыть секретное значение следующим образом. При перехвате передачи атакующий
получает сообщение М и хэш-код С = Н (SAB || M). Если атакующий может инвертировать
хэш-функцию, то, следовательно, он может получить SAB || M = H-1 (C). Так как атакующий
теперь знает и М и SAB || M, получить SAB совсем просто.
Пятое свойство гарантирует, что невозможно найти другое сообщение, чье значение
хэш-функции совпадало бы со значением хэш-функции данного сообщения. Это
предотвращает подделку аутентификатора при использовании зашифрованного хэш-кода.
В данном случае противник может читать сообщение и, следовательно, создать его хэш-
код. Но так как противник не владеет секретным ключом, он не имеет возможности
изменить сообщение так, чтобы получатель этого не обнаружил. Если данное свойство не
выполняется, атакующий имеет возможность выполнить следующую последовательность
действий: перехватить сообщение и его зашифрованный хэш-код, вычислить хэш-код
сообщения, создать альтернативное сообщение с тем же самым хэш-кодом, заменить
исходное сообщение на поддельное. Поскольку хэш-коды этих сообщений совпадают,
получатель не обнаружит подмены.
1.2 Технология цифровых подписей
Цифровая подпись в цифровых документах играет ту же роль, что и подпись,
поставленная от руки в документах на бумаге: это данные, присоединяемые к
передаваемому сообщению, подтверждающие, что владелец подписи составил или
заверил это сообщение. Получатель сообщения с помощью цифровой подписи может
проверить, что автором сообщения является именно владелец подписи и что в процессе
передачи не была нарушена целостность полученных данных.
При разработке механизма цифровой подписи возникают следующие задачи:
 создать подпись таким образом, чтобы ее невозможно было подделать;
 иметь возможность проверки того, что подпись действительно принадлежит
указанному владельцу;
 иметь возможность предотвратить отказ от подписи.
1.3 Классическая схема создания цифровой подписи
При создании цифровой подписи по классической схеме отправитель
1. применяет к исходному сообщению хеш-функцию;
2. вычисляет цифровую подпись по хеш-образу сообщения с использованием
секретного ключа создания подписи;
3. формирует новое сообщение, состоящее из исходного сообщения и добавленной
к нему цифровой подписи.
Получатель, получив подписанное сообщение,
1. отделяет цифровую подпись от основного сообщения;
2. применяет к основному сообщению хеш-функцию;
3. с использованием открытого ключа проверки подписи извлекает хеш-образ
сообщения из цифровой подписи;
4. проверяет соответствие вычисленного хеш-образа сообщения и извлеченного из
цифровой подписи. Если хеш-образы совпадают, то подпись признается
подлинной.
2. Использование GnuPG шифрования и подписи файлов
GnuPG (GNU Privacy Guard, «Страж безопасности GNU», или просто GPG) – это
открытый эквивалент PGP (Pretty Good Privacy), известной и широкоиспользуемой
программы для Windows, DOS и других операционных систем. Он распространяется в
открытых исходниках и имеет те же самые функции, что и PGP, основанные на стандарте
OpenPGP. У GnuPG есть несколько применений – он может использоваться либо для
шифрования писем и файлов, либо для их цифровой подписи. Первый вариант
применения GnuPG – шифрование писем и файлов на вашем жестком диске – очевиден, и
он обычно применяется для защиты секретных сообщений или документов. Цифровая
подпись информации необходима для сохранения целостности сообщений и файлов,
особенно при передаче их через незащищенный канал. Она гарантирует, что: 1) Письмо
было отправлено именно этим человеком, и 2) Что информация по пути не была изменена.
Использовать GnuPG очень просто. Сама программа – консольная. GPG основан на
принципе открытых ключей (Public Key Infrastructure) – то есть, существуют 2 ключа:
закрытый ключ используется для подписи и шифрования, а открытый ключ – для
расшифровки и проверки правильности подписи.
Генерация ключа.
Чтобы начать работу с GPG, вам нужно создать пару ключей. Сделать это очень
легко – просто наберите в командной строке:
[student@lhaos stud]$ gpg --gen-key
Если вы еще не работали с GPG, то эта команда сначала создаст директорию ~/.gnupg
с
файлом
настроек
~/.gnupg/options
а
также
создаст
два
набора
ключей:
~/.gnupg/secring.gpg and ~/.gnupg/pubring.gpg. Затем вам будет задан вопрос: какой тип
ключей вам нужен - «DSA and ElGamal», «DSA», или «ElGamal». Первый тип
используется по умолчанию, и именно он позволяет использовать все возможности GPG.
Ключ DSA используется только для цифровой подписи. ElGamal может быть использован
для подписи и шифрования. Почти всегда следует выбирать «DSA and ElGamal».
После этого вам нужно выбрать размер ключа. Рекомендуемый размер ключа – 1024
бита. Этот размер довольно неплохо подходит для надежного шифрования, и он является
самым распространенным. Вы можете выбрать и другой размер: 2048 – для улучшенной
безопасности (практически невозможно сломать или подделать). При увеличении размера
ключа все операции производятся медленнее, и ваш открытый ключ становится намного
больше. Рекомендуемые варианты – 1024 или 2048; выбор полностью за вами.
Следующий шаг – выбрать срок действия ключа. Некоторые предпочитают сделать
срок действия своего ключа бесконечным, и выбирают 0. Другие создают новый ключ
каждый год, и для этого они выбирают значение «1y». Здесь все так же зависит от ваших
персональных предпочтений.
После этого вам будет предложено ввести вашу личную информацию для нового
ключа. Идентификатор пользователя составляется из трех полей: Имя, Комментарий и
Email-адрес. После того, как вы введете информацию для каждого поля, идентификатор
пользователя будет выглядеть так: «Имя (Комментарий) <Email-адрес>». (Пример: Ivanov
Ivan (My First GPG Key!) <ivanov@mail.ru>). Желательно использовать свое реальное имя
и свой главный Email-адрес. Комментарий может быть абсолютно любым.
После создания идентификатора пользователя вам нужно будет ввести пароль. Он
будет использоваться каждый раз, когда вы захотите что-нибудь зашифровать или
подписать. Так же вам нужно будет вводить пароль для расшифровки данных,
зашифрованных с использованием вашего открытого ключа. Пароль – очень важная
деталь для обеспечения вашей секретности, потому что его подбор часто бывает намного
проще, чем подбор всего ключа. Поэтому он должна быть длинным, сложным и
практически не подбираемым.( Для генерации сложного пароля проделайте следующее:
cat /dev/[u]random | uuencode -m - | head -n 2 | tail -c длина пароля.)
Когда вы введете пароль дважды, GPG начнет генерацию вашего ключа. Для этого
требуется огромное количество случайных данных, поэтому вам нужно будет подвигать
курсор, напечатать что-нибудь на клавиатуре, обратиться к жесткому диску, и т.д. Все эти
действия позволяют обеспечить полную случайность и уникальность вашего ключа.
После того, как создание ключа закончится, вы можете использовать GPG для
просмотра его характеристик. Это выглядит примерно так:
[student@lhaos stud]$ gpg --list-keys
/home/stud/.gnupg/pubring.gpg
------------------------------pub 1024D/9B1386E2 2007-01-29 Ivanov Ivan(My First GPG Key!) <Ivanov@mail.ru>
sub 1024g/7F72A50F 2007-01-29
Эта команда дает вам как открытую, так и закрытую информацию о вашем ключе.
Использование GnuPG для подписи/шифрования.
Теперь, когда у вас есть пара ключей, вы можете ставить цифровую подпись на
ваших сообщениях и файлах, и зашифровывать данные. Рассмотрим, как происходит
процесс шифрования и подписывания обычного текстового файла. Чтобы зашифровать
текстовый файл, введите:
[student@lhaos stud]$ gpg -ea -r Ivanov test.file
Эта команда шифрует файл test.file с использованием открытого ключа Ivanov.
Вообще, эта команда означает, что только Ivanov сможет расшифровать этот файл. А в
нашем примере это значит, что этот файл сможете расшифровать только вы. Эта функция
полезна для защиты важных документов. Опция «-e» (encrypt) означает, что файл нужно
зашифровать, а опция «-a» – что будет использован режим ASCII. Этот режим позволяет
вставлять зашифрованный файл в письма и просматривать его в текстовых редакторах.
Без указания режима ASCII файл шифруется в бинарном виде, и некоторые текстовые
редакторы не смогут с ним работать. Опция «-r» указывает получателя. Мы указали здесь
просто «Ivanov», потому что Ivanov Ivan – единственный ключ в нашей связке. Вы можете
указать любое имя или адрес для определения получателя. После шифрования будет
создан новый файл, содержащий зашифрованные данные – test.file.asc.
Теперь, если вы хотите расшифровать эти данные, введите:
[student@lhaos stud]$ gpg -d test.file.asc >test.file
Опция «-d» указывает GPG на то, что данные из файла test.file.asc должны быть
расшифрованы. По умолчанию GPG отправляет расшифрованные данные на stdout,
поэтому мы перенаправляем поток данных в test.file. После этого вам нужно ввести
пароль, и, когда вы успешно его введете, данные будут расшифрованы и детали ключа
будут выведены на экран.
Использование GnuPG для цифровой подписи файлов.
Если вы хотите просто добавить цифровую подпись к файлу, то это можно сделать
двумя путями. Вы можете вставить подпись в сам файл – это подходит для текстовых
документов. Так же вы можете создать подпись в виде отдельного файла – это
используется для бинарных файлов. Предположим, что у вас есть текстовый файл,
содержащий текст «This is a text document». Если вы хотите подписать этот файл, вы
можете использовать команду:
[user@mdk]$ gpg --clearsign -a test.file
Это создаст новый файл под названием test.file.asc, который будет выглядеть так:
-----BEGIN PGP SIGNED MESSAGE----Hash: SHA1
This is a text document
-----BEGIN PGP SIGNATURE----Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iD8DBQE8r8scXKktnpsThuIRAksEAJ9nziWMquPWD2GH57Oyr9LaXIMJLgCcCi3J
uN8rDO8WOBK3GDp69lvi8Co=
=lz2x
-----END PGP SIGNATURE----Как вы видите, текст документа остался без изменений, только теперь он окружен
информацией цифровой подписи. Если вы захотите изменить хотя бы небольшую часть
этого текста, и затем попытаетесь удостовериться в правильности подписи этого файла, то
GnuPG обнаружит, что подпись неверна. Чтобы удостовериться в правильности подписи,
используйте команду:
[student@lhaos stud]$ gpg --verify test.file.asc
GPG обьявит вам, правильна ли эта подпись, и кто подписывал этот файл. Если файл
был изменен, то GPG предупредит вас о том, что подпись неправильна.
Так же вы можете подписывать сообщения непрозрачной подписью. При этом
создается еще один .asc файл, который с виду кажется зашифрованным. Но на самом деле
он не зашифрован, и каждый может «расшифровать» его с помощью опции «-d», или
использовать опцию «--verify» для проверки его достоверности. Чтобы подписать файл
таким образом, используйте «-s» вместо «--clearsign».
Если вы хотите создать цифровую подпись для бинарного файла, используйте опцию
«-b», которая создает отдельную подпись. Пусть у вас есть архив под названием arhive.tar,
и вы хотите создать для него отдельную подпись, чтобы люди, скачивающие его, знали,
что этот архив гарантированно останется таким, каким вы его запланировали (обычно это
делается для защиты от троянов, и т.д). Пример:
[student@lhaos stud]$ gpg -ba arhive.tar
Подпись будет храниться в файле arhive.tar.asc. Теперь, если кто-нибудь скачал ваш
файл вместе с его подписью, он должен просто запустить:
[user@mdk]$ gpg --verify arhive.tar.asc
GPG сравнит подпись с файлом и выведет результат. Если файл подписи или
бинарный файл будут любым образом изменены, то подпись будет признана
неправильной.
Импорт и работа с ключами GPG.
Теперь, когда вы разобрались, как шифровать, дешифровать, подписывать и
проверять подписи с помощью GPG, пришло время подключить открытые ключи других
людей к вашему набору ключей. Обмен открытыми ключами совершенно безопасен. Вы
можете отдать ваш открытый ключ кому угодно, в отличии от закрытого ключа, который
вы должны хранить в полной секретности. Чтобы экспортировать ваш открытый ключ,
запустите:
[student@lhaos stud]$ gpg --export -a Ivanov@mail.ru >Ivanov.asc
Эта операция производит экспорт открытого ключа, принадлежащего Ivanov@mail.ru
(то есть – вам :), который записывается в файл Ivanov.asc. Вам нужно раздать всем именно
этот файл с вашим открытым ключом.
Если кто-нибудь передал вам свой открытый ключ, то вы можете импортировать его
к себе командой:
[student@lhaos stud]$ gpg --import user.asc
где user.asc – файл с открытым ключом. Эта команда добавляет ключ к вашему
набору открытых ключей. Так же вы можете использовать идентификатор ключа вместо
Email-адреса. Например, идентификатор ключа Ivanov Ivan – это 9B1386E2. Если вы
посмотрите на вывод «--list-keys», то вы увидите строку с идентификатором вашего
ключа. (Например, строка «pub 1024D/9B1386E2» расшифровывается так: открытый ключ,
1024 бита, DSA, идентификатор ключа – 9B1386E2).
Чтобы посмотреть все ключи из вашего набора открытых ключей, используйте «gpg -list-keys». Если вы хотите посмотреть открытый ключ конкретного пользователя,
используйте команду «gpg --list-keys e-mail пользователя.
Далее производить обмен зашифрованными файлами можно только с теми
пользователями, чьи открытые ключи находятся в вашем наборе. Например, пусть в
вашем (вы - Ivanov) наборе ключей есть открытый ключ пользователя Petrov. Для того,
чтобы Иванов зашифровал файл так, что только Петров сможет прочитать его,
необходимо написать следующую команду:
gpg –r Petrov –ea file.txt
Когда Петров захочет расшифровать этот файл, он просто наберет команду:
gpg –d file.txt.asc
Если файл предназначен исключительно для Петрова и Иванов, к тому же,
беспокоится, чтобы никто не подделал сообщение, он может во время шифрования
подписать файл. Команда, объединяющая эти действия, шифрование и создание цифровой
подписи, в текстовом формате имеет вид:
gpg –r Petrov –bea file.txt
Экспорт закрытого ключа
gpg --export-secret-keys
Ivanov@mail.ru >ivan-secret
Этот ключ секретен. Примите все меры для того чтобы этот ключ не попал к
посторонним. Не передавайте этот ключ никому. не оставляйте этот файл там где к нему
могут получиить доступ другие люди.
Резервное копирование ключей
После всех вышеописанных действий мы получили 2 файла с ключами:
- файл с открытым ключом;
- файл с закрытым ключом.
Вам необходимо сохранить эти ключи. Для этого:
1. Откройте эти ключи в текстовом редакторе и отпечатйте их на бумаге.
2. Запишите файлы на 2 CD диска.
3. Бумажную версию и диски спрячте в недоступное посторонним место. Не забудте
это место.
4. Удалите со своего винчестера файл с закрытым ключом. Он вам не понадобится и
итого у вас останется:

Ваши публичные ключи хранятся в файле ~/.gnupg/pubring.gpg

Ваши секретные ключи хранятся в файле ~/.gnupg/secring.gpg
Одними из наиболее важных свойств безопасности, используемых сегодня, являются
пароли. Важно всем пользователям иметь безопасные, не очевидные пароли. Большинство
из наиболее последних дистрибутивов Linux включают программу 'passwd', которая не
позволит вам установить легко угадываемый пароль.
Для смены пароля выполните:
[student@lhaos stud]$passwd
2. Выполнение работы
1. Войдите в ОС LINUX под учетной записью mszi_student. Пароль входа совпадает с
учетной записью.
2. Сгенерируйте свои ключи под именем user1.
3. Просмотрите характеристику ключей.
4. Зашифруйте обычный текстовый файл для защиты от злоумышленников.
5. Расшифруйте его.
6. Подпишите текстовый файл и просмотрите файл с цифровой подписью.
7. Измените содержимое текстового файла и проверьте подлинность цифровой
подписи.
8. Создайте архив (tar –cvf имя_архива файлы…) и создайте для него цифровую
подпись.
9. Проверьте подлинность цифровой подписи архива.
10. Создайте в каталоге /mnt/win_d/Linux подкаталог со своей фамилией.
12. Экспортируйте в созданный каталог свой открытый ключ.
13. Войдите в ОС LINUX под учетной записью mszi_profi. Пароль входа совпадает с
учетной записью. Сгенерируйте там также свои ключи но под именем user2.
14. Из каталога /mnt/win_d/Linux/ФИО_студента импортируйте открытый ключ user1
15. Убедитесь, что ключ добавился к вашему набору открытых ключей.
16.
Зашифруйте
file1
для
пользователя
user1
директории/mnt/win_d/Linux/ФИО_студента.
17. Зашифруйте и подпишите file2 для пользователя user1.
и
сохраните
его
в
18. Попробуйте расшифровать file1.asc и file2.asc при помощи ключа user2.
19. Перейдите в сеанс mszi_student и расшифруйте file1 и file2.
20. Удалите с каталогов /home/mszi_student и /home/mszi_profi подкаталог ./.gnupg.
21. Измените пароль пользователя при помощи команды passwd.
22. Восстановите прежнее значение пароля.
Результат проделанной работы оформить в виде скрипта!!!
Ход работы:
1. Выполнить задание к лабораторной работе.
2. Подготовить отчет в электронном виде, содержащий ответы на контрольные
вопросы.
Контрольные вопросы:
1. Определение хеш-функции.
2. Свойства хеш-функции.
3. Понятие и применение цифровой подписи.
4. Классическая схема создания цифровой подписи.
5. Понятие и применение открытого и закрытого ключа.
6. Какая команда генерирует открытый и закрытый ключи в ОС Linux?
7. Как зашифровать файл для конкретного пользователя в ОС Linux?
8. Как подписать файл и проверить подпись?
9. Файл с каким расширением содержит зашифрованную информацию или
цифровую подпись в ОС Linux?
10. Для чего нужен экспорт и импорт ключей?
Download