Домой Софт Ad Nihilum 0.4.3: обновление сервиса для шифрованного обмена сообщениями

Ad Nihilum 0.4.3: обновление сервиса для шифрованного обмена сообщениями

Минималистичный сервис для обмена зашифрованными данными получил масштабный редизайн, поддержку CSP и улучшения безопасности.

Ad Nihilum 0.4.3: обновление сервиса для шифрованного обмена сообщениями
Ad Nihilum 0.4.3: обновление сервиса для шифрованного обмена сообщениями — иллюстрация к материалу. Источник: linux.org.ru

Вышла новая версия Ad Nihilum 0.4.3 — минималистичного сервиса для безопасного обмена зашифрованными сообщениями по принципу «прочитал — сжег». Решение в первую очередь ориентировано на развертывание пользователями на собственных мощностях (self-hosting).

Серверная часть здесь выступает лишь в роли «глухого» хранилища. Все процессы шифрования и дешифровки выполняются исключительно на стороне клиента в браузере с использованием алгоритма AES-GCM.

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

  • Конфиденциальность: все данные шифруются локально, сервер не имеет доступа к ключам.
  • Защита паролем: предусмотрен дополнительный слой шифрования, информацию о котором нельзя извлечь из ссылки или получить со стороны сервера.
  • Минимализм: кодовая база насчитывает около 2200 строк на C (сервер) и 600 строк на JS (клиент), что делает проект удобным для аудита безопасности.
  • Легкость: единственная внешняя зависимость сервера — библиотека libmicrohttpd.
  • Гибкость: предоставляется инструкция для запуска локального сервиса без необходимости иметь публичный IP-адрес.
  • Мобильность: Ad Nihilum работает на Android, для сборки в Termux предусмотрен специальный скрипт.
  • Производительность: сервер реализован как однопоточное синхронное приложение.

Что нового в версии 0.4.3

Масштабный редизайн

  • Разделены страницы для отправки и получения данных, соответствующим образом оптимизирован клиентский код.
  • Дизайн интерфейса был значительно переработан с учетом пожеланий сообщества.
  • Появились «простой» и локальный клиенты: добавлен упрощенный дизайн, а страницы клиента теперь можно сохранить на устройство и запускать локально через file://.

Безопасность

  • Внедрена политика CSP для эффективной защиты от XSS-атак.
  • Сервер теперь отправляет заголовок HSTS.

Другие изменения

  • Проект сменил название (ранее был известен как Epha-ots).
  • Зарегистрирован официальный домен adnihilum.net.
  • Реализована поддержка TLS через Let’s Encrypt.
  • Упрощена процедура работы с файлами, осуществлен переход на fat-pointers.
  • Проведены работы по исправлению мелких багов, настроены автоматическая минификация JS и сборка через CMake.

Обзор протокола

При создании сообщения система генерирует три случайных значения: ключ K (256 бит), вектор инициализации N (96 бит) и соль S (128 бит). Идентификатор (ID) выводится из K и S с помощью HKDF на базе SHA-256.

При использовании пароля:

  • Ключ Pk выводится из пароля и соли S с применением PBKDF2 (SHA-256, 800 000 итераций).
  • Данные шифруются через AES-GCM с использованием ключа Pk, IV (N) и добавлением аутентифицированных данных (aad).

После этого добавляется двухбайтовый тег: первый байт указывает на наличие или отсутствие пароля (0x73 — да, 0x13 — нет), а второй всегда равен 0x37. Финальный шифротекст получается путем повторного шифрования результата через AES-GCM с теми же параметрами.

Итоговая строка blob (N + S + ct) отправляется на сервер вместе с ID. Сервер не может подменить данные, так как клиент проверяет их еще до дешифровки. При этом ключ K никогда не передается на сервер.

Ссылка для получателя выглядит как origin/#ID/K, где параметры представлены в формате base64url. Когда получатель переходит по ссылке, клиентский JavaScript извлекает ID и K из хеша, загружает зашифрованный массив с сервера, проверяет его целостность и запрашивает пароль, если это необходимо.

Лицензия

Проект распространяется на условиях лицензии GPLv3.

Источник: https://www.linux.org.ru