Доброго времени суток, друзья!
Хочу поделиться с вами результатами небольшого эксперимента.
Суть эксперимента заключается в использовании Web Cryptography API для шифрования отправляемых в чате сообщений.
Я исходил из предположения, что по-настоящему приватный чат можно реализовать либо при наличии полного контроля над клиентом, сервером и базой данных, либо при условии отправки на сервер зашифрованных данных.
По разным причинам, я выбрал второй вариант.
Код проекта находится здесь.
Демо можно посмотреть здесь (база данных по понятным причинам отключена).
Чат выглядит так:
Клиент реализован на ванильном JavaScript (для более широкого охвата аудитории), сервер реализован с помощью Express, в качестве базы данных используется облачная MongoDB, для взаимодействия с ней — Mongoose.
Для обмена сообщениями и на клиенте, и на сервере используется Socket.io.
При запуске приложения пользователю предлагается заполнить два поля: имя и секретный ключ. Секретный ключ генерируется (выводится в консоль) при нажатии соответствующей кнопки. Он имеет примерно такой вид: 0A9sJbvjSJOjH5PY. Опционально, данные пользователя можно сохранить в локальном хранилище.
Ключ используется для шифрования и дешифровки сообщений. Зашифрованные сообщения имеют примерно такой вид: GfTbL+JpFEUPnb96OEz7YqOV~C85B2xPf4kk3PYqhw/QFcu7e7l+8klk3XXhFiocdED0=. Пользователи должны использовать одинаковые ключи, в противном случае, выбрасывается DOMException.
Возможности чата:
- Отправка/получение зашифрованных сообщений
- Регистрация подключения/отключения пользователя
- Отображение списка подключенных пользователей
- Регистрация количества подключений
- Возможность удаления сообщений отправившим их пользователем и т.д.
Проект находится на начальном этапе и представляет собой рабочий прототип, а не полноценное приложение.
Дополнительный функционал включает в себя сервис-воркера и настройки безопасности для сервера.
Буду рад любой форме обратной связи.
Благодарю за внимание и хорошего дня.
3epg
Ключ один и для шифрования и дешифрования? А как ключ передаётся от одного клиента другому?
Gasoid
через телеграмм!
3epg
Ну хоть не через голубиную почту и то хорошо))