Проекты

Безопасный обмен сообщениями: мессенджер с шифрованием

Работа призёра конкурса проектов и исследований «Инженеры будущего» открытой городской научно-практической конференции «Инженеры будущего» в секции «Информационные технологии, программирование, прикладная математика, социальный инжиниринг»

Направление работы: Инженеры
Авторы работы: ГБОУ Школа № 138
Предметы: Информатика
Классы: 10 класс
Мероприятия: Конкурс проектов и исследований «Инженеры будущего» открытой городской научно-практической конференции «Инженеры будущего» 2021 года

Актуальность

В наше время переписка стала неотъемлемой частью жизни. В мессенджерах мы общаемся с одноклассниками (коллегами), планируем встречи, обсуждаем новости, делимся секретами. И каждый человек хочет, чтобы его личные сообщения были лишь у него самого и его собеседника, чтобы они так и остались личными (были конфиденциальны). Но, к сожалению, крупные компании, предоставляющие людям доступ к площадкам, где те могут общаться друг с другом, не брезгуют передачей и продажей личной информации пользователей, их интересов и секретов. Именно на этом они и зарабатывают большие деньги. Храня историю сообщений, создавая видимость шифрования, корпорации продвигают свои продукты, заворачивая всё в красивую «обложку» контекстной рекламы. Таким образом, у пользователей пропадает свобода мыслей, конфиденциальность переписки и возможность хранения секретов в тайне.

Цель

Создание мессенджера, который бы не сохранял переписку пользователей, не мог расшифровывать их сообщения и не хранил записи об IP-адресах подключающихся машин.

Задачи

  1. Выбор языка программирования, поиск нужных для работы мессенджера модулей.
  2. Создание клиентского приложения.
  3. Создание серверного приложения.
  4. Написание комментариев для важных блоков кода.
  5. GitHub

Оснащение и оборудование, использованное при создании работы

  • Персональный компьютер с установленным ПО (Python)
  • GitHub — крупнейший веб-сервис для хостинга IT-проектов
  • Мобильный телефон

Описание

Автор выбрал язык программирования Python, использовал модули для реализации мессенджера. Также автор создал клиентское приложение, имеющее функции шифрования сообщений, сохранения имени и уникального идентификатора пользователя, смены его имени, запуска личного чата и закрытия приложения. При его запуске инициализируется переменная server, в которой указаны его ip-адрес и порт. Далее программа проверяет наличие данных о пользователе (функция account_check()), и при их отсутствии создаёт файл .info.mrbt, записывая в него данные клиента. Затем инициализируется сокет нашего компьютера, и на сервер отправляются наши данные в виде имя_пользователя: уникальный_id

Уникальный идентификатор требуется нам для того, чтобы злоумышленник не мог выдать себя за нас. Сгенерировать такой же уникальный идентификатор, как у нас, практически невозможно, так как он состоит из 17 случайных цифр, следовательно, вариантов такого идентификатора существует 10^17. Далее запускается поток, который будет принимать и отображать сообщения пользователей.

Рассмотрим принцип работы личного чата.

Сначала запускается поток прослушивания личных сообщений secret_listener, который генерирует пару ключей (публичный и приватный) и отправляет публичный ключ на сервер, который, в свою очередь, направляет их собеседнику.

Далее наша программа ждет публичный ключ собеседника и, получив, преобразует его из строки в класс rsa.key.PublicKey. После этого программа запускает поток отправки сообщений и передаёт в него публичный ключ партнёра в качестве аргумента.

Отправка сообщений

Поток secret_sender сначала просит ввести слово “!start”, чтобы этот ввод закрыл цикл для групповых сообщений, а далее ждёт пользовательского ввода. Далее программа проверяет, является ли ввод запросом на отключение, и, если это так, работает по алгоритму, описанному выше.

Иначе программа шифрует введённое клиентом сообщение публичным ключом собеседника и отправляет сообщение на сервер.

Получение сообщений

Поток secret_listener получает сообщения пользователя, расшифровывает их нашим приватным ключом и выводит на экран. Если сервер отправляет одобрение на выход, функция завершает работу.

Автор создал серверное приложение, координирующее как групповые, так и личные сообщения пользователей, не позволяющее пользователям иметь одинаковые имена во избежание запутанности, а также при завершении работы программы сохраняющее словарь пользователей типа «имя: уникальный_идентификатор». При запуске серверного приложения инициализируются его сокет и нужные для работы списки и словари. Далее программа пытается открыть файл users.txt и записать данные из него в users_list, если такого файла нет, программа создаст его и запишет в него данные во время завершения работы сервера.

Автор написал комментарии для важных блоков кода и выложил проект на GitHub. Добавление проекта на GitHub

Чтобы выложить наши файлы на GitHub, нужно в первую очередь создать аккаунт на GitHub и добавить новый репозиторий. Репозито́рий (англ. repository), хранилище — место, где хранятся и поддерживаются какие-либо данные. Воспользовавшись консольной утилитой git, которая позволит управлять версиями проекта, загружаем наш проект на GitHub. Вся работа выполнена лично автором.

Результаты работы/выводы

В итоге получился мессенджер с открытым исходным кодом, который автор выложил на GitHub – https://github.com/ftwood/NetConnCat. Также был добавлен в проект файл README.md (описание проекта на GitHub) и LICENSE.md (Лицензия MIT). Любой человек может помочь этому проекту, предложив изменения, новые функции. На сегодня весь проект выполнен автором лично.

Перспективы использования результатов работы

Мессенджер позволяет людям безопасно переписываться друг с другом, сохранять свободу мысли и слова. В будущем планируется создать графический интерфейс, что упростит взаимодействие с приложением.