lab5
This commit is contained in:
@@ -178,6 +178,7 @@
|
||||
\item Практическая работа №2. Разработка и исследование системы аутентификации и авторизации. Данная практическая работа посвящена разработке системы доступа пользователей к конфиденциальным данным и исследованию стойкости паролей к атаке методом грубой силы. В ходе выполнения работы реализованы утилита управления пользователями, утилита доступа к конфиденциальным данным и программа перебора паролей, а также проведено экспериментальное исследование зависимости времени взлома от длины пароля.
|
||||
\item Практическая работа №3. Реализация моделей дискреционного и мандатного управления доступом. Данная практическая работа посвящена расширению системы из работы №2 путём реализации моделей DAC (дискреционный доступ) и MAC (мандатный доступ) на основе модели Белла–Лападулы.
|
||||
\item Практическая работа №4. Межсетевое экранирование средствами \texttt{iptables}. Данная практическая работа посвящена настройке межсетевого экрана в Linux, формированию политики фильтрации сетевого трафика и экспериментальной проверке пропуска разрешённых соединений и блокировки запрещённых пакетов с использованием \texttt{tcpdump}.
|
||||
\item Практическая работа №5. Разработка клиент-серверного приложения для конфиденциального обмена сообщениями. Данная практическая работа посвящена разработке TCP-приложения с поддержкой шифрования 3DES-CBC с затравкой и контроля целостности на основе SHA-256, а также проверке корректности шифрования с помощью анализа трафика.
|
||||
\end{enumerate}
|
||||
|
||||
\newpage
|
||||
@@ -956,6 +957,183 @@ $ sudo tcpdump -i any -n icmp
|
||||
В ходе практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализована схема с политикой \texttt{DROP} по умолчанию и разрешающими правилами для loopback, DNS, исходящего ping, входящего ping от адреса \texttt{192.168.100.2} и HTTP/HTTPS. Экспериментальная проверка подтвердила пропуск разрешённого трафика и блокировку соединений, не описанных в политике. Анализ трафика утилитой \texttt{tcpdump} продемонстрировал соответствие наблюдаемой сетевой активности заданным правилам фильтрации.
|
||||
|
||||
|
||||
\newpage
|
||||
\section{Разработка клиент-серверного приложения для конфиденциального обмена сообщениями}
|
||||
|
||||
\subsection{Актуальность темы}
|
||||
|
||||
Обеспечение конфиденциальности и целостности данных при передаче по сети является одной из ключевых задач информационной безопасности. Даже при использовании защищённых протоколов транспортного уровня понимание механизмов симметричного шифрования и контроля целостности на уровне приложения позволяет проектировать системы с дополнительным эшелоном защиты. Практическая реализация клиент-серверного приложения с шифрованием и хэш-контролем в рамках курса <<Защита информации>> закрепляет навыки работы с криптографическими примитивами и демонстрирует их влияние на передаваемый трафик.
|
||||
|
||||
\subsection{Цели и задачи работы}
|
||||
|
||||
Цель работы: разработка клиент-серверного приложения для обмена короткими сообщениями по протоколу TCP с обеспечением шифрования и контроля целостности.
|
||||
|
||||
Задачи работы:
|
||||
\begin{enumerate}
|
||||
\item Получить базовые знания по использованию криптографических функций библиотеки \texttt{cryptography} в Python.
|
||||
\item Разработать клиент-серверное приложение для обмена шифрованными сообщениями с контролем целостности.
|
||||
\item Проверить работу приложения в различных режимах, в том числе с помощью программы анализа трафика \texttt{tcpdump}.
|
||||
\end{enumerate}
|
||||
|
||||
\subsection{Описание алгоритма шифрования}
|
||||
|
||||
\textbf{3DES (Triple DES)} — симметричный блочный шифр, основанный на трёхкратном применении алгоритма DES в режиме EDE (Encrypt–Decrypt–Encrypt) с тремя независимыми подключами. Размер блока — 64 бита (8 байт), длина ключа — 192 бита (24 байта, из которых 168 бит являются эффективными ключевыми битами, а оставшиеся 24 бита — биты чётности). Несмотря на то что 3DES считается устаревшим и уступает AES по производительности, он по-прежнему обеспечивает достаточный уровень стойкости для учебных задач.
|
||||
|
||||
В разработанном приложении используется режим сцепления блоков \textbf{CBC} (Cipher Block Chaining): каждый блок открытого текста перед шифрованием складывается по модулю 2 с предыдущим блоком шифротекста (для первого блока — с вектором инициализации IV). Это обеспечивает зависимость каждого блока шифротекста от всех предшествующих блоков, затрудняя анализ повторяющихся фрагментов. Дополнение до границы блока выполняется по схеме PKCS7.
|
||||
|
||||
\textbf{Шифрование с затравкой (солью).} Для каждого сообщения генерируется случайная 16-байтовая затравка (salt). Ключ 3DES длиной 24 байта вычисляется как первые 24 байта хэша SHA-256 от конкатенации мастер-ключа из файла и затравки: $K_{\mathrm{3DES}} = \mathrm{SHA\text{-}256}(K_{\mathrm{file}} \mathbin\| \mathrm{salt})[{:}24]$. Кроме того, для каждого сообщения генерируется случайный 8-байтовый IV. Затравка и IV передаются вместе с шифротекстом в открытом виде, что позволяет получателю воспроизвести ключ. Благодаря уникальности затравки и IV одинаковые открытые тексты порождают различные шифротексты, что исключает атаки на основе повторения.
|
||||
|
||||
\textbf{Контроль целостности} реализован с помощью хэш-функции SHA-256 (в соответствии с индивидуальным заданием из практической работы №2). При включённой опции контроля целостности отправитель вычисляет хэш открытого текста сообщения и передаёт его вместе с данными. Получатель вычисляет хэш самостоятельно и сравнивает с полученным значением; при расхождении выводится предупреждение о нарушении целостности.
|
||||
|
||||
\textbf{HMAC-SHA256.} В качестве альтернативы простому SHA-256 реализован режим HMAC (Hash-based Message Authentication Code) на основе SHA-256. В отличие от обычного хэша, HMAC использует секретный ключ: $\mathrm{HMAC} = \mathrm{HMAC\text{-}SHA256}(K_{\mathrm{file}},\; \mathrm{plaintext} \mathbin\| \mathrm{salt})$. Это даёт два преимущества: (1)~получатель может убедиться, что отправитель владеет тем же секретным ключом (аутентификация), а не только в том, что сообщение не было изменено; (2)~случайная затравка, подмешиваемая к сообщению, обеспечивает различные значения HMAC для одинаковых открытых текстов. Режимы \texttt{-{}-integrity} (SHA-256) и \texttt{-{}-hmac} (HMAC-SHA256) являются взаимоисключающими.
|
||||
|
||||
\subsection{Описание реализации}
|
||||
|
||||
Приложение реализовано на языке Python~3.14 в виде единого файла \texttt{main.py} (исходный код приведён в приложении~9). Для криптографических операций используется библиотека \texttt{cryptography}. Управление зависимостями осуществляется менеджером \texttt{uv}.
|
||||
|
||||
\textbf{Протокол обмена.} Сообщения передаются по TCP в формате: 4~байта длины (big-endian) + JSON-объект. Структура JSON-объекта:
|
||||
|
||||
\begin{verbatim}
|
||||
{
|
||||
"encrypted": true/false,
|
||||
"salt": "hex (16 байт)",
|
||||
"iv": "hex (8 байт)",
|
||||
"data": "hex шифротекст / открытый текст",
|
||||
"hash": "SHA-256 hex (если включён контроль)"
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
\textbf{Полнодуплексный обмен} обеспечивается двумя потоками: один читает ввод пользователя и отправляет сообщения, второй принимает входящие сообщения и выводит их на экран.
|
||||
|
||||
\textbf{Режимы запуска} задаются ключами командной строки: \texttt{-{}-encrypt} включает шифрование 3DES-CBC, \texttt{-{}-integrity} включает контроль целостности SHA-256, \texttt{-{}-hmac} включает контроль целостности и аутентификацию HMAC-SHA256 (несовместим с \texttt{-{}-integrity}), \texttt{-{}-test-integrity} активирует режим отправки сообщений с заведомо некорректным хэш-значением (требует \texttt{-{}-integrity} или \texttt{-{}-hmac}).
|
||||
|
||||
\textbf{Защита ключа.} Мастер-ключ считывается из файла (по умолчанию \texttt{key.txt}). При запуске программа проверяет права доступа к файлу ключа и завершает работу с ошибкой, если файл доступен для чтения группе или другим пользователям (права более открытые, чем \texttt{600}).
|
||||
|
||||
\subsection{Команды сборки и запуска}
|
||||
|
||||
Установка зависимостей:
|
||||
\begin{verbatim}
|
||||
uv sync
|
||||
\end{verbatim}
|
||||
|
||||
Создание файла ключа:
|
||||
\begin{verbatim}
|
||||
openssl rand -hex 32 > key.txt
|
||||
chmod 600 key.txt
|
||||
\end{verbatim}
|
||||
|
||||
Запуск сервера и клиента (примеры):
|
||||
\begin{verbatim}
|
||||
uv run main.py server --port 9000
|
||||
uv run main.py client 127.0.0.1 9000
|
||||
|
||||
uv run main.py server --port 9000 --encrypt
|
||||
uv run main.py client 127.0.0.1 9000 --encrypt
|
||||
|
||||
uv run main.py server --port 9000 --encrypt --integrity
|
||||
uv run main.py client 127.0.0.1 9000 --encrypt --integrity
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Проверка работы приложения}
|
||||
|
||||
\subsubsection{Передача сообщений без шифрования}
|
||||
|
||||
При запуске без флагов сообщения передаются открытым текстом. На рисунке~\ref{fig:lab5-plain} показан вывод серверной и клиентской частей приложения.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/lab5-plain.png}
|
||||
\caption{Обмен сообщениями без шифрования}
|
||||
\label{fig:lab5-plain}
|
||||
\end{figure}
|
||||
|
||||
Анализ трафика утилитой \texttt{tcpdump} (рис.~\ref{fig:lab5-plain-tcpdump}) подтверждает, что текст сообщения передаётся в открытом виде и может быть прочитан непосредственно из дампа пакетов.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-plain-tcpdump.png}
|
||||
\caption{Дамп трафика (\texttt{tcpdump}) при передаче без шифрования — текст виден}
|
||||
\label{fig:lab5-plain-tcpdump}
|
||||
\end{figure}
|
||||
|
||||
\subsubsection{Передача сообщений с шифрованием}
|
||||
|
||||
При включённой опции \texttt{-{}-encrypt} сообщения шифруются алгоритмом 3DES-CBC с затравкой. На рисунке~\ref{fig:lab5-enc} показан вывод приложения: видны параметры шифрования (соль, производный ключ, IV, шифротекст) и результат расшифровки.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-enc.png}
|
||||
\caption{Обмен сообщениями с шифрованием 3DES-CBC}
|
||||
\label{fig:lab5-enc}
|
||||
\end{figure}
|
||||
|
||||
Дамп трафика (рис.~\ref{fig:lab5-enc-tcpdump}) показывает, что в пакетах присутствует только шифротекст в виде hex-строк; читаемый текст сообщения отсутствует.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-enc-tcpdump.png}
|
||||
\caption{Дамп трафика при передаче с шифрованием — текст не виден}
|
||||
\label{fig:lab5-enc-tcpdump}
|
||||
\end{figure}
|
||||
|
||||
\subsubsection{Шифрование с контролем целостности}
|
||||
|
||||
При одновременном использовании флагов \texttt{-{}-encrypt} и \texttt{-{}-integrity} к зашифрованному сообщению добавляется хэш SHA-256 открытого текста. На стороне получателя после расшифровки вычисляется собственный хэш и сравнивается с полученным (рис.~\ref{fig:lab5-enc-int}).
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-enc-int.png}
|
||||
\caption{Обмен сообщениями с шифрованием и контролем целостности}
|
||||
\label{fig:lab5-enc-int}
|
||||
\end{figure}
|
||||
|
||||
\subsubsection{Тестирование контроля целостности с некорректным хэшем}
|
||||
|
||||
В режиме \texttt{-{}-test-integrity} отправитель намеренно передаёт некорректный хэш. Получатель обнаруживает расхождение и выводит предупреждение (рис.~\ref{fig:lab5-test-int}).
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-test-int.png}
|
||||
\caption{Обнаружение некорректного хэш-значения}
|
||||
\label{fig:lab5-test-int}
|
||||
\end{figure}
|
||||
|
||||
\subsubsection{Демонстрация шифрования с затравкой}
|
||||
|
||||
При отправке одного и того же сообщения дважды шифротексты различаются благодаря случайной затравке и IV (рис.~\ref{fig:lab5-salt}).
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-salt.png}
|
||||
\caption{Разные шифротексты для одинаковых сообщений (эффект затравки)}
|
||||
\label{fig:lab5-salt}
|
||||
\end{figure}
|
||||
|
||||
\subsubsection{Контроль целостности и аутентификация с HMAC-SHA256}
|
||||
|
||||
При использовании флага \texttt{-{}-hmac} вместо \texttt{-{}-integrity} к каждому сообщению прикладывается код HMAC-SHA256, вычисленный с использованием секретного ключа и случайной затравки. На рисунке~\ref{fig:lab5-hmac} показан обмен сообщениями в режиме \texttt{-{}-encrypt -{}-hmac}: видны HMAC-затравка, вычисленный HMAC на стороне отправителя и результат проверки на стороне получателя. При отправке одного и того же сообщения повторно значение HMAC отличается благодаря новой затравке.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-hmac.png}
|
||||
\caption{Обмен сообщениями с HMAC-SHA256: аутентификация и контроль целостности}
|
||||
\label{fig:lab5-hmac}
|
||||
\end{figure}
|
||||
|
||||
На рисунке~\ref{fig:lab5-hmac-fail} показана проверка режима \texttt{-{}-test-integrity} совместно с \texttt{-{}-hmac}: отправитель передаёт намеренно некорректный HMAC, получатель обнаруживает несоответствие и сообщает о неудачной аутентификации.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{img/lab5-hmac-fail.png}
|
||||
\caption{Обнаружение некорректного HMAC — отправитель не аутентифицирован}
|
||||
\label{fig:lab5-hmac-fail}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Выводы}
|
||||
|
||||
В ходе практической работы №5 разработано клиент-серверное приложение для конфиденциального обмена сообщениями по протоколу TCP. Реализовано шифрование 3DES-CBC с затравкой, обеспечивающей различные шифротексты при одинаковых открытых текстах, контроль целостности на основе хэш-функции SHA-256 и режим HMAC-SHA256, обеспечивающий одновременно контроль целостности и аутентификацию отправителя. Экспериментальная проверка с помощью \texttt{tcpdump} подтвердила, что при включённом шифровании содержимое сообщений не передаётся в открытом виде, а при включённом контроле целостности получатель успешно обнаруживает намеренно повреждённые сообщения.
|
||||
|
||||
|
||||
\newpage
|
||||
\section*{Заключение}
|
||||
\addcontentsline{toc}{section}{Заключение}
|
||||
@@ -968,6 +1146,8 @@ $ sudo tcpdump -i any -n icmp
|
||||
|
||||
В ходе выполнения практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализованы правила фильтрации, разрешающие loopback-трафик, DNS, ICMP и HTTP/HTTPS, а все прочие соединения блокируются. Корректность работы правил подтверждена тестовыми соединениями и анализом пакетов утилитой \texttt{tcpdump}.
|
||||
|
||||
В ходе выполнения практической работы №5 разработано клиент-серверное приложение для конфиденциального обмена сообщениями по протоколу TCP. Реализовано шифрование 3DES-CBC с затравкой, контроль целостности SHA-256 и режим HMAC-SHA256 для аутентификации отправителя. Анализ трафика утилитой \texttt{tcpdump} подтвердил, что при включённом шифровании содержимое сообщений не доступно в открытом виде, а режим тестирования продемонстрировал корректное обнаружение нарушений целостности.
|
||||
|
||||
\newpage
|
||||
\printbibliography[heading=bibintoc]
|
||||
|
||||
@@ -1021,4 +1201,11 @@ $ sudo tcpdump -i any -n icmp
|
||||
\addcontentsline{toc}{section}{Приложение 8}
|
||||
\lstinputlisting{../lab3/setup.sh}
|
||||
|
||||
\newpage
|
||||
\section*{Приложение 9}
|
||||
\subsubsection*{main.py}
|
||||
\addcontentsline{toc}{section}{Приложение 9}
|
||||
\label{app:lab5-main}
|
||||
\lstinputlisting{../lab5/main.py}
|
||||
|
||||
\end{document}
|
||||
|
||||
Reference in New Issue
Block a user