Исследование TLS сокетов ядра Linux
Идея TLS сокетов, характеристика подходов к реализации TLS сокетов. Алгоритм работы режима MGM, реализация RecordTLS 1.3 согласно проекту ТК26. Реализация MGM в ядре Linux, протокол Record. Преимущества модели sendfile, согласование версии протокола.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 28.08.2020 |
Размер файла | 2,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Рассмотрим основные моменты реализации модуля для демонстрации работы с режимом MGM. Начнем с описания структур.
Структура для сокета:
structsockaddr_ktls {
__u16 sa_cipher;
__u16 sa_socket;
__u16 sa_version;
};
Данная структура хранит параметры сокета TLS, которые задаются константами. Для отечественной реализации, например:
#defineKTLS_CIPHER_KUZNECHIK_MGM51
#defineKTLS_KUZNECHIK_MGM_IV_SIZE((size_t)8) //64 bitsIV
#define KTLS_KUZNECHIK_MGM_KEY_SIZE((size_t)16) //128 bits KEY
#define KTLS_KUZNECHIK_MGM_SALT_SIZE((size_t)4)
Структура для tls сокета:
structtls_sock {
/* struct sock must be the very first member */
struct sock sk;
/* TCP socket we are bound to */
stuct socket *socket;
inrx_stopped;
/* Context for {set,get}sockopt() */
unsined char *iv_send;
structtls_keykey_send;
unsigned char *iv_recv;
structtls_keykey_recv;
structcrypto_aead *aead_send;
structcrypto_aead *aead_recv;
/* Sending context */
structscatterlistsg_tx_data[KTLS_SG_DATA_SIZE];
structscatterlist sg_tx_data2[ALG_MAX_PAGES + 1];
charaad_send[KTLS_AAD_SPACE_SIZE];
chartag_send[KTLS_TAG_SIZE];
struct page *pages_send;
intsend_offset;
intsend_len;
intorder_npages;
structscatterlistsgaad_send[2];
structscatterlistsgtag_send[2];
structwork_structsend_work;
/* Receive */
structscatterlistsgin[ALG_MAX_PAGES + 1];
charaad_recv[KTLS_AAD_SPACE_SIZE];
charheader_recv[MAX(KTLS_TLS_PREPEND_SIZE, KTLS_DTLS_PREPEND_SIZE)];
structstrparserstrp;
structsk_buff_headrx_hold_queue;
structwork_structrecv_work;
void (*saved_sk_data_ready)(struct sock *sk);
void (*saved_sk_write_space)(struct sock *sk);
size_trecv_len;
unsigned intcipher_type;
char *cipher_crypto;
char version[2];
int unsent;
};
Припривязываниисокетазаполняютсяосновныеполяcipher_type, cipher_crypto, aead_send, aeas_recvсокетапоструктуреsockaddr_ktls.Данные поля соответствуют типу шифра (задается константой, то есть KTLS_CIPHER_KUZNECHIK_MGM), имя данного шифра в виде строки, алгоритмы шифрования и расшифрования, которые определяются по значению cipher_crypto.
Такой сокет можно создать с помощью следующего вызова:
intksd = socket(AF_KTLS, SOCK_STREAM, 0);
И затем с помощью вызова setsockopt() присваиваются значения полям cipher_typeиcipher_type:
structsockaddr_ktlssa_ktls;
sa_ktls.sa_cipher = KTLS_CIPHER_KUZNECHIK_MGM;
sa_ktls.sa_socket = sd; // bind to this tlssocket
sa_ktls.sa_version = KTLS_VERSION_1_3;
При привязывании сокета алгоритм шифрования устанавливается по имени, которое затем используется при инициации режима шифрования MGM.
bind(ksd, (structsockaddr *) &sa_ktls, sizeof(sa_ktls));
Внутри данной функции установка происходит следующим образом:
switch (sa_ktls->sa_cipher) {
case KTLS_CIPHER_KUZNECHIK_MGM:
tsk->cipher_type = KTLS_CIPHER_KUZNECHIK_MGM;
tsk->cipher_crypto = "mgm(kuznechik-generic)";
break;
default: //Only KUZNECHIK_MGM supported
ret = -ENOENT;
goto out;
tsk->aead_send = crypto_alloc_aead(tsk->cipher_crypto,
CRYPTO_ALG_INTERNAL, 0);
Инициирование алгоритма MGM описано в Главе 3.
Глава 5. Экспериментальная оценка результатов.
При разработке модуля, реализующего TLS сокеты для работы с отечественной версией протокола TLS 1.3 было взято ядро Linux версии 5.x.x. Тестирование осуществлялось на версии 5.3.7.
Чтобы протестировать модуль, было написано небольшое приложение, демонстрирующее работу tls сокетов.
Рассмотрим пример взаимодействия сервера и клиента. Сервер и клиент запускались на одном и том же хосте, поэтому адреса взаимодействия являются localhost. Со стороны сервера создается сокет на прослушивание порта 40815:
Скрин.5.1
Теперь сервер слушает порт 40815. Со стороны клиента идет отправка 1 пакета на локальный адрес 127.0.0.1 по порту 40815. После установления соединения и сервер, и клиент создают сокет tls для отправки и получения зашифрованного пакета.
Скрин.5.2
Скрин.5.3
Для того чтобы посмотреть сетевые соединения подробнее, трафик был захвачен с помощью Wireshark.
Скрин.5.4
Скрин.5.5
В Wireshark было настроено прослушивание интерфейса loopback. Как видно на скриншотах, действительно пакеты клиента передаются с порта 41916 на порт 40815 и обратно со стороны сервера.
Пример защищенной TLS записи:
Скрин.5.6
Рассмотрим подробно структуру TLS Записи 1.3:
Первое поле является типом передаваемой записи. Здесь указывается код 0x17 - соответствует типу данных приложения. Данный заголовок является историческим, настоящий тип записи определяется при расшифровании защищенной записи.
Далее поле, соответствующее номеру используемой версии протокола. Здесь указано значение 0x0303 - TLSv1.2. Данное значение также носит исторический характер. Данные значения подтверждают соответствие данного модуля стандарту RFC 8446.
Полученные результаты
В ходе написания данной работы были получены следующие результаты:
· Исследованы и описаны Kernel TLS, принципы работы TLS сокетов ядра Linux.
· Изучено CryptoAPI ядра Linux, модифицирована реализация режима шифрования с аутентификациейMGMс целю поддержки версии ядра 5.x.x
· Реализован отдельный модуль ядра Linux для работы с TLS сокетами с использованием режима шифрования MGM, реализующий протокол Record отечественного протокола TLS версии 1.3
Список литературы
1. Нестеренко А. Ю., Лось А. Б., Рожков М. И. Криптографические методы защиты информации: учебник для академического бакалавриата. - М.: Юрайт. - 2016. - 296 c.
2. Рекомендации по стандартизации «Режимы работы блочных шифров, реализующие аутентифицированное шифрование», ТК 26, Москва, Стандартинформ, 2019
3. Проект Рекомендации по стандартизации «Использование российских криптографических алгоритмов в протоколе безопасности транспортного уровня (TLS 1.3)», ТК 26, Москва, Стандартинформ, 2019
4. Debian - Режим доступа: https://www.debian.org свободный.
5. E. Rescorla. The TLS ProtocolVersion 1.3 [электронный ресурс], RFC Editor, 2018. - Режим доступа:https://tools.ietf.org/rfc/rfc8446.txt, свободный.
6. L. Torvalds. Linux Kernel Source Code [электронныйресурс]. GitHub. - Режим доступа:https://github.com/torvalds/linux/blob/master/ свободный.
7. Boris Pismenny, Ilya Lesokhin, LiranLiss, Haggai Eran. TLS Offload to Network Devices [электронныйресурс], December, 2016 - режимдоступа: https://netdevconf.info/1.2/papers/netdevconf-TLS.pdf
8. Crypto Kernel TLS socket, D. Watson, accessed September 22, 2016. - [Электронныйресурс] режимдоступа: https://lwn.net/Articles/665602/
9. KTLS: Linux Kernel Transport Layer Security. 1st DaveWatson, режим доступа: https://netdevconf.info/1.2/papers/ktls.pdf
10. Randall Stewart, John-Mark Gurney, Scott Long. Optimizing TLS for High-Bandwidth Applications in FreeBSD, Netflix Inc [Электронныйресурс] - режимдоступа: https://people.freebsd.org/~rrs/asiabsd_2015_tls.pdf
11. Г. Смирнов. Новая неблокирующаяся на дисковом вводе реализация системного вызова sendfile() для FreeBSD.Декабрь 2014. [Электронный ресурс] - режим доступа: https://people.freebsd.org/~glebius/articles/sendfile.pdf
12. В. Снигирев. Исследование методов реализации режима шифрования с аутентификацией в ядре ОС Linux, 2018. - [текст] - 49 с.
13. ГОСТ-Р х.х-201х. Информационная технология. КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ. Режимы работы блочных шифров, осуществляющих одновременно шифрования и аутентификацию (проект). ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ТЕХНИЧЕСКОМУ РЕГУЛИРОВАНИЮ И МЕТРОЛОГИИ - 9 с.
14. ГОСТ-Р 34.12-2015. Информационная технология. КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ. Блочные шифры. ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ТЕХНИЧЕСКОМУ РЕГУЛИРОВАНИЮ И МЕТРОЛОГИИ - 21 с.
Размещено на Allbest.ru
...Подобные документы
Архитектура клиент-сервер на основе сокетов Windows. Описание утилиты Ipconfig. Конфигурирование стека TCP/IP. Реализация сокетов через классы NET. Структура библиотечных и пользовательских классов. Схема интерфейса пользователя и работы приложения.
курсовая работа [419,5 K], добавлен 13.12.2012Разложение функции в ряд Тейлора, алгоритм работы программного интерфейса сокетов, исходный текст программ с комментариями. Возможности языка программирования Си и среда разработки приложений в ОС Linux. Виртуальная среда VMWare Player и VirtualBox.
лабораторная работа [1,8 M], добавлен 02.09.2014Разработка программы типа клиент-сервер на языке программирования Python, являющейся автоматическим сервисом поиска контактной информации о пользователях. Применение дейтаграммных и потоковых сокетов. Блок-схема работы программы, руководство пользователя.
курсовая работа [222,0 K], добавлен 24.04.2015Роль уровня Хост-Хост в обеспечении сервисов, используемых приложениями для доставки данных. Преимущества и недостатки ненадежного датаграммного протокола UDP. Функции и механизм окон протокола TCP, формат его сегментов. Программный интерфейс сокетов.
презентация [112,9 K], добавлен 25.10.2013Архитектура строения операционной системы. Назначение API в операционных системах и разных платформах. Особенности строения API в ядре Linux. Реализация проекта для работы с CDROM на CentOS. Сравнение Linux и Windows. Реализация проекта на Win32 API.
дипломная работа [1,6 M], добавлен 08.06.2017История создания, архитектура операционной системы и перечень возможностей, реализуемых в Linux. Инструментальные средства и цикл разработки новой версии ядра. Жизненный цикл патча. Структура принятия решений при добавлении новых функций (патчей) в ядро.
лекция [303,8 K], добавлен 29.07.2012Информация по протоколам IP/TCP/UDP. Интерфейс сокетов, его создание и уничтожение. API пользовательского уровня. Обмен данными без установки соединения (UDP), с его установкой (TDP). Утилиты пользовательского уровня. Архитектура сетевой подсистемы Linux.
лекция [480,5 K], добавлен 29.07.2012Структура мережевої підсистеми Linux. Створення мережевого інтерфейсу. Передача пакетів та аналіз поведінки інтерфейсу. Протокол транспортного рівня. Використання модулів ядра. Вплив маршрутизації на процес розробки і налагодження мережевих модулів.
курсовая работа [56,2 K], добавлен 23.05.2013История развития и версии Linux. Ключевые черты, преимущества и сравнительные характеристики операционной системы. Программные характеристики, основные причины успеха и бурного развития Linux. Главные проблемы распространения операционной системы.
курсовая работа [64,4 K], добавлен 13.12.2011Анализ технических возможностей операционной системы Mandriva Linux - дистрибутива GNU/Linux, разрабатываемого французской компанией Mandriva, выпускающей свободные, коммерческие и корпоративные версии своего дистрибутива. Этапы установки оболочки Linux.
презентация [26,2 M], добавлен 23.05.2010Linux - ядро операционной системы с монолитной архитектурой. Прародители операционной системы Linux, ее стабильные и экспериментальные версии. Процесс внедрения Linux и свободного программного обеспечения в школах и государственных учреждениях России.
реферат [18,2 K], добавлен 19.01.2013Механизмы шифрования данных в ОС LINUX MINT. Реализация FDE в интерфейсе инсталлятора. Одно из главных достоинств утилиты CryptKeeper. Создание учётной записи через терминал. Графический интерфейс прав доступа. Резервное копирование данных программы.
курсовая работа [2,9 M], добавлен 11.12.2014Схемы графической аутентификации, их реализация и внедрение в операционных системах Linux. Оценка вероятности взлома графического пароля. Буквенно-цифровые пароли. Схемы треугольника и подвижной рамки. Исследование удобства и простоты использования.
дипломная работа [5,1 M], добавлен 25.01.2013Общая характеристика системы Android, обзор его аналогов. Необходимые компоненты для начала работы в Android. Настройка конфигураций Ubuntu. Написание script-ов, упрощающих генерацию Linux. Отладка и тестирование программы на плате i.MX53 фирмы freescale.
курсовая работа [1,1 M], добавлен 12.10.2012UNIX - одна з найпопулярніших в світі операційних систем. Ключеві риси Linux. Порівняльні характеристики 32-розрядних операційних систем. Поверхневий огляд характеристик ядра Linux. Програмні характеристики: базові команди і утиліти, мови програмування.
курсовая работа [33,3 K], добавлен 07.12.2010ОС Linux - название Unix-подобных операционных систем, основанных на одноимённом ядре. Дистрибутив Lubuntu 12: интерфейс, командная строка, основные программы, входящие в состав пакета. Работа с сетью, конфигурированием и администрированием системы.
методичка [2,0 M], добавлен 28.10.2014Компоновка и конфигурирование Linux сервера. Общая информация об ALT Linux Server 5, его подвиды и основные функциональные возможности. Установка дистрибутива ALT Linux 5.0 "Ковчег" и Apache2+php+MySQL. Пример настройки работы сайта на web-сервере.
курсовая работа [6,0 M], добавлен 24.10.2012Понятие операционной системы. Фундаментальные особенности Linux. Обзор основных качеств. Программное и аппаратное обеспечение, безопасность системы. Преимущества ОС - общественная доступность проекта, открытость, бесплатность, развитая оболочка.
реферат [63,2 K], добавлен 09.01.2011Разработка приложения, которое осуществляет удаленный доступ управления компьютером с операционной системой Linux с компьютера с ОС Windows. Реализация функциональной части. Графический интерфейс клиента и сервера. Разработка интеграционных тестов.
курсовая работа [1,1 M], добавлен 28.04.2014Требования к операционной системе Linux, встраиваемые приложения. Предсказуемость поведения, свойства ОС реального времени. Структура ядра; системные вызовы; работа с файлами. Стандартные устройства; обзор программирования; компилирование и линковка.
лекция [112,2 K], добавлен 29.07.2012