За последние годы произошло несколько утечек, когда посторонние лица получали доступ к видеопотоку с домашних камер наблюдения через облачные сервисы Ring, Nest, Wyze и т. д. Утечка или взлом облачного сервиса — это угроза для многих пользователей.

Кроме массовых утечек, известны и случаи избирательной слежки, когда сотрудник полиции или технический специалист компании следит за передвижениями конкретного человека, в личных интересах или за вознаграждение. Если шифрование отсутствует, то такой доступ ничем не ограничен — и найдутся люди, готовые за него заплатить.

Поэтому энтузиасты криптографии и открытого ПО разработали альтернативное решение — самодельные камеры видеонаблюдения со сквозным шифрованием потока от камеры до смартфона.

DIY-видеокамера

Сама видеокамера — это одноплатник Raspberry Pi с камерой Pi. Она устанавливает канал со сквозным шифрованием до мобильного приложения Secluso через сервер, который выполняет роль простого ретранслятора и передаёт зашифрованные байты. Это может быть внешний сервер Secluso, свой VPS или домашний сервер.

Установка Secluso

  • Собрать камеру. См. руководство по сборке из готовых деталей:

    • Raspberry Pi Zero 2 W (18 $);

    • Pi Camera Module v2 (25 $) или v1 (10 $), подойдёт также любая камера с сенсором OmniVision OV5647 или Sony IMX219;

    • Официальный корпус для Pi Zero (8 $).

  • Скачать последний релиз Secluso Deploy — десктопное приложение под Windows, Linux и macOS для записи на загрузочную microSD-карту Raspberry Pi.

Secluso Deploy
Secluso Deploy
  • Приложение генерирует секретный QR-код камеры и создаёт персонализированный образ Secluso OS, который мы записываем на карту. Это кастомизированная минималистичная ОС, подготовленная с помощью проекта Yocto.

Исходный код всех программ открыт и опубликован на Github. Кроме мобильного приложения iOS, всё остальное можно самостоятельно собрать из исходников и получить бинарники, аналогичные опубликованным в репозитории, в том числе Android-приложение, бинарные файлы камеры/сервера, инструмент развёртывания и вышеупомянутую ОС.

  • Secluso Deploy настраивает сервер по SSH.

  • Загрузить Raspberry Pi с подготовленной карты.

  • Установить мобильное приложение и подключить камеру в нём. Мобильное приложение распространяется через централизованные каталоги:

В WHITE_PAPER.md и ENCRYPTION.md есть полное описание модели безопасности и криптографических методов, которые использует система, включая протокол Messaging Layer Security (MLS) для шифрования. В данном случае используется OpenMLS, реализация MLS на Rust.

Другие решения

Подход Secluso фундаментально отличается от других решений видеонаблюдения, вроде Frigate или Home Assistant, которые тоже предлагают локальный сервер и получают потоки с видеокамер по локальной сети. Они дают аналогичные гарантии конфиденциальности, но при этом всё-таки придётся довериться сторонним производителям IP-камер.

Однако в таком подходе есть определённые плюсы, потому что сервер выполняет всевозможную действительно интересную локальную обработку: обнаружение объектов и звуков, распознавание лиц, номеров автомобилей, семантический поиск по записанному видео и многое другое, как в коммерческих решениях.

Но такие серверы обычно используются с проводными (Ethernet) IP-камерами. Возможно подключение WiFi-камер, но RTSP-поток между камерой и хабом будет незашифрованным, что может сделать его уязвимым для прослушивания.

Это можно назвать определённым компромиссом: дополнительные удобства за счёт небольших рисков, связанных с использованием стороннего оборудования и отсутствием сквозного шифрования.


Обработка видеопотока на своём локальном сервере или использование внешнего ретранслятора со сквозным шифрованием — кардинальное улучшение безопасности по сравнению со стандартными облачными предложениями.

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