Кому система разрешает действовать
Как ограничить ущерб от ошибки программы или модели?
Защита строится как согласованная цепочка от физической кнопки до обновления. TLS защищает один из её участков; полномочия и переходы доверия проверяются во всём контуре.
Безопасность здесь состоит из нескольких независимых вопросов. Кто подключился? Что ему разрешено? Насколько свежи данные? Можно ли физически выполнить действие? Останутся ли секреты закрытыми при падении отдельной службы?
TLS отвечает только на часть этой цепочки. Поэтому полномочия датчика, приложения, речевой модели и SSH-администратора различаются. Модель может ошибиться в выборе цели, но её процесс не должен иметь ключ, которым можно напрямую включить любой выход.
В Koobique есть несколько активов: полномочия владельца, идентичность станции, ключи устройств, история присутствия, голосовые данные, возможность включить нагрузку и канал обновления. Угрозы тоже различаются: сосед в Wi-Fi, украденный телефон, вредоносный пакет, подменённый relay, старый backup и физический доступ к отладочному разъёму.
Модель доверия#
Постоянная идентичность устройства не равна рабочему разрешению управлять им. Владелец назначает станцию контроллером; станция выдаёт ограниченные полномочия пользователям и сервисам. Фабричная подлинность, если появится в будущих экземплярах, не должна позволять производителю незаметно заменить владельца.
Первый личный комплект может создавать ключи при доверенной локальной настройке. Важно не копировать один приватный ключ во все прошивки. Уникальная идентичность и процедуру отзыва нужно сделать сразу — исправлять это после развёртывания гораздо сложнее.
TLS в локальном приложении#
Приложение получает доверие к станции через QR/физически подтверждённую настройку. Затем проверяет закреплённый ключ или локальную цепочку доверия, ожидаемую идентичность и параметры сессии. Локальное имя, например стабильное имя станции в .local, может использоваться как ожидаемый SAN/SNI независимо от способа обнаружения IP.
Глобальный trustAll запрещён. Для публичной PKI не отключаются имя, цепочка и календарная валидность. Собственный локальный pin-профиль ниже является отдельной моделью доверия, проверяющей конкретный ключ и подпись handshake; он не реализуется общим флагом «игнорировать ошибки сертификата». Ротация и отзыв закреплённых ключей входят в жизненный цикл установки. [167][148]
Что делать с неверным временем#
Календарная дата и измерение длительности решаются раздельно. У ESP32-C6 есть RTC-таймер и высокоточный таймер, но не готовое доверенное календарное время после полного отключения. В офлайн-профиле первая аутентификация опирается на заранее проверенную идентичность ключа; после неё станция передаёт оценку UTC и качества. Часы не создают доверие к незнакомой станции. [146]
Решение — отдельный ограниченный режим восстановления, открываемый физическим действием и подтверждаемый уже закреплённой идентичностью либо новым доверенным bootstrap. В нём можно восстановить время и обновить локальные сертификаты. Это не обычный управляющий API с отключённой проверкой. Бессрочную автономность нельзя строить на незаметном принятии любого истёкшего сертификата.
Минимальные полномочия#
Датчик публикует только свои каналы и не может выполнять команды на другом устройстве. Speech-worker может предложить намерение, но не менять пользователей. Приложение гостя управляет разрешённой комнатой, но не экспортирует ключи. Privileged-helper принимает ограниченные операции от конкретного локального клиента.
Сетевые лимиты нужны до аутентификации: число handshake, размер сообщения, длительность операции, скорость ошибок. Иначе корректный TLS не защитит от исчерпания памяти. Парсер любого внешнего файла обновления, QR и диагностического импорта также считается недоверенной границей.
Загрузка и обновление#
Secure Boot и проверка образа уменьшают риск незаметной замены системного ПО. dm-verity может проверять целостность блочного образа, но доверие к корневому хешу должно происходить из проверенной загрузочной цепочки. Шифрование диска решает другую задачу — доступ к данным при извлечении накопителя. [92]
Для личного проекта полезен режим собственных ключей владельца. Переход в developer mode должен быть физически подтверждён и иметь понятные последствия для секретов. Нельзя одновременно обещать свободную замену любой прошивки и защиту секретов от такой прошивки без отдельной аппаратной модели.
Старые копии и два контроллера#
При восстановлении станции нельзя просто запустить копию базы рядом с исходной. Устройство должно знать актуальный controller_fence или иной fencing-токен. После официального переноса старый контроллер отвергается. Если такой механизм ещё не реализован, процедура восстановления обязана сначала изолировать старую станцию.
Сохранённый backup может содержать уже отозванные полномочия. Поэтому восстановление включает сверку и ротацию, а не слепое доверие всему архиву. Ключ восстановления хранится отдельно и не отправляется в техподдержку.
Проверки безопасности до постоянной эксплуатации#
Подменить endpoint, использовать чужой ключ, повторить старый билет, отправить слишком большой кадр, восстановить старую конфигурацию и проверить отзыв телефона. Отдельно проверить, что диагностический архив не содержит приватных ключей и Wi-Fi-паролей.
Файл весов — программный артефакт. Показания датчика — недоверенный вход. История присутствия — личная информация даже без камеры.
Подлинность не равна правильности#
Аутентифицированный узел может быть неправильно установлен, повреждён или захвачен. Криптография подтверждает источник и целостность в пределах модели угроз, но не истинность физического показания. Проверяем диапазон, изменение, статус канала и согласованность с другими источниками. Подозрительная запись остаётся доступной для диагностики, не получает молча доверенный статус.
Строки имён, голосовой текст и загружаемые описания не становятся инструкциями привилегированному коду. Планировщик видит зарегистрированные ресурсы с машинными ID; человекочитаемое имя не определяет путь файла или сетевой адрес исполнения.
Модель как поставляемый пакет#
Манифест содержит хеш, версию, архитектуру, входные и выходные типы, нормализацию, ограничения памяти, backend, происхождение, лицензию и результаты допуска. Обновляется весь комплект, а не только веса. Прежний токенизатор или порядок признаков способен изменить смысл корректного нового файла.
Для безопасной доставки полезны роли, метаданные и проверки обновлений TUF. [84] Они помогают защищать цепочку поставки, но не доказывают качество модели. Safetensors предназначен для безопасной сериализации тензоров без произвольного pickle-кода; это не защита от всех ошибок загрузчика, огромных размеров и небезопасных native-операторов. [138]
Сandbox для расширений#
Если появятся пользовательские алгоритмы, можно исследовать WebAssembly с явным набором импортируемых возможностей и лимитами. Wasmtime описывает изоляцию памяти и модель доступа как часть своей безопасности. [133] Но произвольный host-call снова расширяет доверенную базу: модуль, которому разрешили командовать реле напрямую, обходит архитектуру независимо от формата байткода.
Для первой версии не нужен публичный магазин плагинов. Встроенные алгоритмы и ограниченный AI-worker проще проверить. Чужой модуль допускаем только к чтению объявленных данных и выдаче предложений.
Приватность производных данных#
Из редких событий света и присутствия можно получить распорядок; embedding голосового эпизода также может содержать чувствительную информацию. Поэтому «мы не храним исходный звук» не является полной политикой приватности.
Права задаются отдельно на наблюдения, производные оценки, экспорт, обучение и удалённое чтение. Удаление данных должно учитывать производные файлы, резервные копии и включение в датасеты. Если данные уже повлияли на обученную модель, простое удаление строки не доказывает удаление этого влияния; нужна политика переобучения или отказа от такого обещания.
Шифрование диска помогает при определённых угрозах, но не скрывает открытые данные от администратора работающего хоста. Для домашней установки это нужно честно объяснить владельцам личных носимых устройств.
Сеть и администрирование#
Локальное сопряжение, пользовательский удалённый канал и SSH имеют разные полномочия. Для первого экземпляра отдельный VPN-контур и защищённая прикладная сессия остаются прозрачным вариантом. Тяжёлое обучение может работать на существующем ПК, но остановка этого вычислительного помощника не останавливает локальную платформу.
На станции нет обязательного облачного AI-вызова. Для внешнего исследования Jev или другого API данные готовятся отдельно и передаются только с разрешения. Удалённый доступ не обещается при полном отсутствии доступного канала связи.
Модель получает данные и выдаёт предложение. Секреты устройств, административные команды и подпись разрешения остаются вне её контекста и процесса.
Два профиля TLS: публичный и локально закреплённый#
Обычное публичное HTTPS продолжает проверять цепочку, имя, срок сертификата и подпись handshake. Для первого офлайн-соединения собственных узлов E0 выбирает другой, явно выделенный договор: закреплённый публичный ключ конкретной стороны, проверенный через физический bootstrap. X.509 здесь служит контейнером ключа; календарный срок не является источником доверия. Нельзя переносить этот verifier на произвольные сайты или неизвестных peers. [167][148]
Локальная проверка обязана сравнить полный разрешённый SPKI/его криптографический отпечаток, доказательство владения ключом в TLS 1.3, назначение ключа и текущую привязку установки. Проверка подписи handshake не отключается. Механизм raw public key стандартизован RFC 7250, но его готовая поддержка на обеих наших сторонах ещё не установлена. Для E0 нужен отрицательный опыт с чужим ключом, подменённым контейнером и неверной подписью; до него pin-профиль остаётся проектным, а не «готовой безопасной библиотекой». [147]
После аутентификации Core передаёт оценку календарного времени с качеством; это не делает её точной автоматически. Внешний NTS — дополнительный источник, не условие работы лампы. При неизвестном UTC обычное TUF-обновление и календарные приглашения не обходят срок. Аварийный recovery — отдельная физически подтверждаемая процедура с ограниченной целью, не глобальный переключатель trustAll. [166][84] Core долговечно хранит последнее подтверждённое доверенное время как нижнюю границу, вместе с происхождением и качеством оценки. Откат системных часов или старого backup не должен незаметно уменьшать эту границу. Она не доказывает точное текущее UTC и не заменяет оценку неопределённости; формат передачи времени и политика восстановления требуют отдельного контракта и отрицательных испытаний.
Владение отдельно от работающей станции#
Полномочие владельца для редких подписей переноса отделяется от рабочего session credential телефона. Предусмотрен независимый offline recovery key; перед постоянной эксплуатацией проверяется восстановление без исходного телефона. Эти ключи не являются копиями неэкспортируемого Secure Enclave. Аппаратная защита Keystore/StrongBox зависит от конкретного устройства и настройки. Набор доверенных owner/recovery keys, его поколение и правила замены — отдельный контракт; биометрия и голос сами по себе не передают роль владельца. [177][71]
Перенос на новый Hub подписывает действующее owner-authority полномочие. Назначение связывает purpose, installation_id, node_id, свежий challenge, previous_fence, next_fence=previous+1 и новый controller key. MCU проверяет подписанта по текущему устойчивому owner/recovery-набору, сохраняет целое назначение атомарно и затем отвечает. Обновление этого набора отдельно определяет авторизацию, защиту от rollback и случай последнего утраченного ключа; controller_fence не отзывает owner-подписанта. Формат OwnerSetUpdate, транспорт TrustTransfer и отрицательные TLS/COSE-проверки остаются открытым gate, а не реализованной функцией.
Перенос завершён по каждому устройству отдельно. Offline-узел остаётся PENDING; нельзя подписать «весь дом перенесён», если часть устройств ещё доверяет старой станции. Для этих узлов сначала изолируют старый Hub и выполняют подтверждённое переназначение при возвращении связи. Отказ питания в середине записи должен оставить либо целую старую, либо целую новую привязку, но не пустой режим без владельца.
Обычный backup содержит данные и публичные назначения, но не копию активного controller private key. На новом Hub ключ создаётся заново; восстановление начинается пассивно. Если платформа реально поддерживает TPM/sealing, это отдельный проверяемый способ защиты ключа. E0 без защиты физического доступа не обещает сопротивление клонированию всей flash/диска злоумышленником.
Отзыв телефона — больше, чем удалить запись#
После commit отзыва рабочего клиента Core закрывает сессии и подписки, отменяет неотправленные действия и приглашения и повторяет ACL-проверку перед dispatch. Для owner-authority отзыва необходимо обновить доверие каждого MCU и получить подтверждение; до этого отзыв соответствующего узла не завершён. Уже отправленное действие нельзя гарантированно отменить по оборванной сети: действует исходный срок. TLS resumption, если будет разрешён, обязан учитывать текущее поколение авторизации; его отключение в E0 допустимо для уменьшения объёма квалификации.
После восстановления старого backup пользовательские сессии и разрешения не оживают автоматически: выдаётся новое поколение авторизации, требуется подтверждение владельца и повторное подключение телефонов. Старая подписанная ссылка также не становится новой. Изменение политики доверия должно переживать OTA-rollback; иначе возврат старой прошивки одновременно возвратит отозванный ключ.
| Субъект | Разрешённый ресурс | Операции |
|---|---|---|
| Владелец | Своя установка | Управление, приглашения, перенос, восстановление |
| Пользователь комнаты | Назначенные каналы | Просмотр, ручное действие; без ключей и OTA |
| Микрофон комнаты | Белый список световых сценариев | Ограниченное предложение; без SSH и выдачи доступа |
| Support | Временный диагностический профиль | Только явно разрешённые чтения/операции |
| AI-worker | Предоставленный снимок | Предложение; никаких сетевых или физических полномочий |