ДовериеГлава 23 / 51

Первое подключение и смена владельца

Как станция узнаёт своего владельца, а устройство — свою станцию?

Передать пароль Wi-Fi и назначить владельца — две разные операции. Удобство не должно стирать эту границу.

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

Первый самостоятельно собранный экземпляр допускает сервисный шаг через USB или локальную настройку. Но обычное использование после него остаётся мобильным и беспроводным. Смена пароля Wi-Fi, смена владельца и восстановление ключа — разные операции, их нельзя объединять в одну кнопку «сброс».

Мобильное приложение снимает важное ограничение браузера: оно может использовать платформенные BLE-интерфейсы и хранить закреплённую идентичность станции. Поэтому Koobique не требуется публичный сертификат только ради обычного локального управления. Но первая передача доверия всё равно должна быть физически подтверждена и защищена.

Лабораторный E0: сначала надёжный базовый путь#

Первую станцию на имеющемся ПК или Mini-ITX допустимо настроить через локальную консоль либо доверенное USB-подключение. Она получает Wi-Fi-профиль, создаёт собственный ключ и показывает QR с идентификатором, отпечатком и одноразовым билетом владельца. Телефон считывает его непосредственно с доверенного экрана или распечатки, полученной при локальной настройке.

Это честный путь первого самостоятельно собранного экземпляра. Он не выдаётся за окончательный пользовательский onboarding и не требует постоянного Ethernet. Основное приложение после настройки работает в обычной Wi-Fi-сети.

Устройства: BLE + готовый защищённый provisioning#

Для ESP32 можно использовать ESP-IDF Unified Provisioning с Security 2. Документация описывает SRP6a и AES-GCM, уникальные данные владения и готовые Android/iOS-инструменты. BLE сохраняет соединение с телефоном во время присоединения к Wi-Fi. Security 0 и режим без доказательства владения не выбираются для обычной настройки Koobique. [70]

A28Два этапа: сначала защищённая настройка сети, затем проверяемое назначение станции и рабочих полномочий.

Приложение передаёт SSID, пароль, ожидаемую идентичность станции и короткоживущий билет присоединения. Узел подключается к сети, устанавливает защищённый канал со станцией и подтверждает билет. Только после этого он считается принадлежащим инсталляции. Успешный DHCP сам по себе не означает успешное сопряжение.

Рабочие сертификаты или ключи отличаются от секрета первого владения. QR на корпусе не становится бессрочным административным паролем. Повторное открытие режима требует физического действия и видимого индикатора.

Как сделать такую же настройку Linux-станции#

На Linux нет автоматического эквивалента ESP-IDF provisioning только от установки BlueZ. Есть три пути. Первый — локальный USB/консоль для E0. Второй — отдельный ESP-сопроцессор настройки на внутреннем USB, использующий уже испытанный provisioning и передающий структурированные данные привилегированному helper. Третий — собственный Linux BLE-сервис с проверенным стандартным протоколом установления защищённой сессии.

Сопроцессор сокращает часть программного риска, но добавляет доверенный компонент и свою прошивку. Его нельзя считать простым «проводком»: он видит сетевые секреты и должен быть связан с идентичностью хоста. Собственный BLE-сервис уменьшает детали, но требует отдельного аудита handshake, replay-защиты и мобильной совместимости. GATT API BlueZ — транспортный инструмент, а не готовая модель безопасности. [42]

Путь к удобному E1#

Для E0 остаётся локальный доверенный bootstrap. Для E1 выбирается один BLE-путь после отдельного стенда Android/iOS. Временный SoftAP допустим как явно обозначенный резерв настройки, но не как обязательная сеть для повседневного управления.

Атомарность сопряжения#

Процесс имеет состояния DISCOVERED, AUTHENTICATED, NETWORK_READY, CLAIM_PENDING и OWNED. До OWNED команда управления запрещена. Билет имеет срок, nonce и ограниченное число попыток. Если питание исчезло после выдачи ключа, стороны при возвращении сверяют состояние, а не создают две записи устройства.

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

Несколько пользователей#

Владелец приглашает другого пользователя подписанным ограниченным приглашением: комнаты, возможности, цель, срок, nonce и привязка к получателю. Использование и отзыв фиксируются устойчиво; повтор того же завершения возвращает прежний результат, а другой ключ не присваивает приглашение. Это отдельный Client API договор, который ещё требует реализации и отрицательных тестов. Разрешение включать свет не предоставляет SSH, обновление прошивок или чтение личных данных.

Потерянный пользовательский session credential отзывается на Core: закрываются сессии и подписки, отменяются ещё не отправленные запросы. Если телефон также владеет owner-authority key для переноса Hub, требуется отдельный отзыв этого полномочия на каждом MCU. Обычный отзыв клиента не завершает обновление списка доверенных owner-подписантов. Узел, ещё не подтвердивший новый список, остаётся PENDING; прямое управление устройством, если появится, также требует собственного договора прав.

Смена роутера и восстановление#

Пользователь должен иметь способ передать новый Wi-Fi-профиль локально без перепривязки всей комнаты. Это операция сетевой конфигурации, не смена владельца. Физическая кнопка станции открывает ограниченный режим восстановления; индикатор и приложение показывают, что сейчас разрешено.

Нельзя делать «factory reset» единственным ответом на ошибочный пароль: он уничтожает контекст и превращает обслуживаемую систему в набор одноразовых устройств. Полный сброс требует длительного подтверждения и ясно различается с обычным перезапуском.

Ключ создаётся там, где будет использоваться#

Рабочая приватная пара узла генерируется на MCU при проверенной энтропии; наружу передаётся публичный ключ или запрос на удостоверение. Станция не рассылает всем платам заранее созданные секретные ключи. Provisioning использует уникальный случайный PoP/verifier; примерные общие значения SDK не копируются в изделия. Для E0 предлагаем не менее 128 бит случайного секрета подключения с QR-представлением.

Билет присоединения связывает installation_id, purpose, node_id, публичный ключ узла, challenge, права и срок/условия завершения. Его нельзя использовать для другой установки или переслать другому ключу как универсальную ссылку. Формат подписанного объекта опирается на COSE_Sign1; собственный формат шифрования не разрабатывается. [149]

Сопряжение с незавершённым финалом#

После физического окна и проверки доказательств узел сохраняет CLAIM_PENDING с хешем билета и transaction_id. Повтор того же завершения возвращает тот же результат; другой билет не подменяет pending-состояние. OWNED показывается после устойчивой записи и подтверждения обеих сторон. Если ответ потерян, приложение сверяет транзакцию. Оно не предлагает factory reset как первый способ исправить любой тайм-аут.

Factory reset требует отдельного физического действия, стирает рабочую привязку и сетевые секреты согласно профилю, но не превращает запись старого Hub в подтверждение нового владельца. У старой станции остаётся «узел сброшен/недоступен» до подтверждённого удаления. Смена пароля Wi-Fi открывает узкое окно повторной настройки сети без автоматического снятия владельца и ручного режима.

Найти в книге

Поиск по всем главам, схемам и техническим разделам.