
сквозное осторожное веб-чат с сильной криптографией
0FC позволяет вам запустить безопасное групповое чат в браузере с изолированными чатами, имея некоторые специальные функции:
- сквозной для конкретной чата: сервер не может быть лучше, чем атака DOS
- Сервер считается минимальной доверенной зоной, все важные операции происходят на стороне клиента:
- Эфемерные ключи, используемые для защиты трафика в чате, генерируются в браузере владельца комнаты и распространяются до остальных
- Секретные жетоны, используемые для предоставления доступа к чату, генерируются на стороне клиента (хотя часть проверки происходит на стороне сервера)
- Во время обмена ключами каждое сообщение обслуживания защищено ключами, полученные из случайных данных более чем одной стороны
- исходящие сообщения зашифруются и отправляются только один раз (все члены комнаты имеют один и тот же симметричный ключ)
- Токен секретного доступа используется один раз (удаляется после подтверждения ключа)
0FC был начат как тестирование игровой площадки для некоторых сложных вариантов использования Themids/WebThemis, но стала достаточно интересной, чтобы выпустить ее как отдельную каплю кода.
Важно: чтобы считаться действительно безопасным, 0FC должен быть подтвержден третьими лицами и правильно развернута. Ни один криптографический инструмент не должен доверять без стороннего аудита. Прежде чем это произойдет (если это когда -либо это сделает), в конце этого документа есть описание протокола, которое позволяет вам взглянуть на внутреннюю работу 0FC и вынести собственное суждение. Мы сами знаем о нескольких редко возможных угрозах, не связанных с криптографией, а скорее о том, как работает браузер (см. Раздел «Модель угроз» в блоге).
0FC Backend написан в Python, Front-Cend основан на веб-образе, поэтому он работает только в браузерах на основе Google Chrome (пока).
0FC лицензируется через лицензию Apache 2. Мы были бы счастливы, если вы создадите что -то на основе этого кода и протокола 0FC; Если вам нужна помощь с этим, свяжитесь с нами.
Прочитайте сообщение в блоге, чтобы узнать больше о 0FC и основных технологиях.
Установка и использование
0FC состоит из двух компонентов: сервер и клиента.
0FC сервер
Сервер 0FC требует:
- Python 3.4
- пип
- Themis (строительство и установка)
Во -первых, вам нужно будет установить зависимости от питона:
pip install -r requirements.txt
Сделав это, вы можете запустить сервер:
По умолчанию сервер будет прослушать порт 5103. Чтобы изменить порт добавить -p <port> :
python3 server.py -port 333
0FC Клиент
Клиент 0FC уже поставляется в / статическом / папке. Имейте в виду, что у него есть серверные клавиши в твердом кодировании; Если вы восстановите ключи, вам нужно будет восстановить клиент (см. Ниже).
Используя 0FC
... довольно эксплуатационный. Вы можете создать новую комнату, генерировать токены и пригласить людей присоединиться или войти в существующий токен, чтобы войти в комнату.
Восстановление 0FC Клиент
Если вы хотите самостоятельно перекомпилировать клиент 0FC (объект PNACL), вот что вам нужно сделать:
- Для создания объекта PNACL вам необходимо установить NaCl SDK и создать переменную для среды Enviromant
PNACL_ROOT с путем к установленным файлам SDK. - Репозиторий клона 0FC с подмодулями из GitHub:
git clone https://github.com/cossacklabs/0fc
cd 0fc
git submodules update --init --recursive
- Создайте WebThemis:
- Построить 0FC PNACL Модуль:
Ты закончил!
Архитектура

0FC состоит из 2 классических компонентов: клиент и сервер.
Клиенты несут ответственность за:
- Показание пользовательского интерфейса пользователю
- Все функции криптографии и управления доверием
- Связь с сервером реле
Сервер отвечает за:
- обслуживание UI + PEXE (модуль PNACL) клиентам через HTTP GET
- Запуск службы реле WebSocket, которая получает сообщения и передает их всем.
Ссылка на WebSocket, клиенты общаются с сервером через Securessession Themis Object, который обеспечивает высокую транспортную безопасность. Ключи сервера жестко кодируются клиентам, поэтому доверие устанавливается на основе корреляции между реальным ключом сервера и ключом сервера, поданным клиенту в двоичных файлах.
В рамках этой защитной ссылки передаются зашифрованные сообщения SecureCell.
Протокол и схема

Создание комнаты
- Владелец комнаты генерирует пару ключей
[client] - Владелец комнаты генерирует ключ комнаты (который будет использоваться для шифрования сообщений в комнате)
[client] - Владелец комнаты запрашивает сервер для создания комнаты, получая идентификатор комнаты в ответ
[client] + [server]
Приглашение других (обмен ключом)
- Владелец комнаты генерирует случайный (одноразовый) токен приглашения
[client] - Владелец комнаты отправляет приглашение каким-то внеполосным каналом (например, электронная почта), который включает в себя приглашенный токен, его открытый ключ и идентификатор комнаты
[client] - Пользователь получает токен Invite
[client] - Пользователь генерирует пару ключей
[client] - Пользователь генерирует случайное соединение
[client] - Пользователь отправляет безопасное сообщение владельцу комнаты через сервер с зашифрованным ключом соединения
[client] - Сервер может проверить ACL, является ли это приглашение действительным, и передать сообщение владельцу комнаты
[server] - Владелец комнаты Unwraps присоединиться к ключу
[client] - Владелец комнаты отправляет герметичный клавиш комнаты для пользователя через сервер, используя ключ соединения в качестве основного ключа и пригласить токен в качестве контекста
[client] - Сервер может проверить ACL, является ли этот ответ действительным, и передавать сообщение пользователю
[server] - Пользователь распечатывает ключ комнаты
[client] - Пользователь отправляет подтверждение запечатанное сообщение владельцу комнаты.
[client] - Владелец, проверка пользователей подтверждает сообщение, подписывает его открытый ключ и отправляет на сервер
[client] + [server] - Сервер проверяет подпись и рассматривает пользователя как добавленное в чат
[server] - После того, как приглашенный токен был использован, он отбрасывается владельцем комнаты
[server]
Обмен сообщениями
- Участники комнаты обмениваются сообщениями, запечатывающими их с ключом комнаты. Сервер просто пересылает зашифрованные сообщения, не имея доступа к их содержимому.
[server]
Управление ключами
- Клавиатура генерируется для каждой комнаты
[client] - Клавиатура хранится в Stomer Storage
[client] - Постоянное хранилище браузера зашифровано с помощью Secure Cell (режим уплотнения), ключ, полученный из пароля пользователя, входы при присоединении к чату
[client]
Серверная связь
- Клиенты общаются с сервером, используя Seession Temis Secure
[server] - Доверенный общедоступный ключ сервера жестко закодирован в клиентах
[client] - Сервер не выполняет аутентификацию клиента, автоматически доверяет каждому клиентскому клавишу SS (это первым очевидным шагом к затвердеванию, если безопасность важнее, чем повсеместность и анонимность)
[server]
Ключевое вращение
- Каждые 100 (настраиваемые) сообщения, отправленные и полученные, владелец комнаты генерирует новый ключ, шифрует его со старым ключом и отправляет специальное сообщение
[client] - Сервер применяет такие сообщения только от владельца комнаты
[server]
Комната оркестровая
- Список участников поддерживается для каждой комнаты в качестве списка общедоступных ключей (+индикация, кто является владельцем комнаты)
[server] - В каждом номере есть владелец комнаты (первоначально, создатель комнаты)
[server] - Владелец комнаты несет ответственность за ротация ключей
[client]
История чата
- Сервер позволяет клиентам получать историю чата с момента их последнего отъезда для участников, которые были в сети, и знают ключи перед ротацией
[server] - Сервер позволяет клиентам извлекать историю чата с момента начала поворота ключей для новых участников
[server]
Хотите узнать больше?
Прочитайте наш пост в блоге с некоторым предысторием о разработке 0FC и различных соображениях безопасности.