Возможности · сейчас
Телефон держит контур.
Не браузер и не MDM.
В корпоративные системы пускаем только с устройств, которые компания знает. Одобряет их телефон сотрудника. Агент на ноутбуке ставится без MDM. Админ решает, кто может заявиться, какой класс хранения ключа допустим и кого завести заранее.
- Телефон — контроллер
- Один ed25519, два класса
- Без MDM и без расширения
Телефон-контроллер
Критичное решение — в кармане, не в helpdesk
Компрометация ключа телефона значит одобрить чужой ноут и отозвать свой. Поэтому контроллер контура — мобильное приложение сотрудника, а не тикет в поддержку и не расширение в Chrome.
Сотрудник ставит приложение
Телефон заводит свою личность и становится контроллером. Новый ноутбук сам по себе в контур не входит.
self-enrollОдобряет конкретную машину
Вход с неизвестного устройства остаётся в очереди, пока телефон владельца его не подтвердит. Пароль и MFA без этого не открывают системы.
circle / confirmМожет отозвать
Потерянный ноут снимается с телефона. Helpdesk не выпускает сертификаты и не гоняет VPN-клиент.
точка доверия у человекаПодтверждение с телефона — про устройство. Кто в итоге approved, решает политика админа: TOFU, очередь или только то, что завёл оператор.
Хранение ключа
Два класса. Одна личность
Упрощённое и аттестованное хранение живут рядом. Апгрейд не заводит новый телефон: оборачиваем тот же ed25519 seed — тот же pubkey, тот же device_id. Аттестация доказывает, как ключ лежит и что приложение настоящее, а не подменяет подпись на P-256.
Упрощённое хранение
Тот же ed25519: на iOS — Keychain ThisDeviceOnly, на Android — AES-обёртка в Keystore без attestation challenge. Ядро проверяет подпись. Всё.
можно запретить политикойАттестованное хранение
Тот же seed плюс проверенный blob: App Attest, Android TEE или StrongBox. Blob привязан к этому pubkey и одноразовому challenge — не к новому ключу P-256.
ядро проверяет, не клиентSecure Enclave и Android Keystore не умеют ed25519. Ключ App Attest — P-256 и только assertion: им нельзя обернуть seed. Если «переключить всех на чип» как новую identity, сломается PoP и все уже заведённые телефоны. Поэтому личность контроллера остаётся ed25519, а аттестация — отдельное доказательство хранения.
Кампания аттестации
Сначала просим перейти. Потом запираем дверь
Запретить упрощённую схему всем сразу значит выкинуть часть парка: старые iOS, странный Android, корпоративные прошивки. Поэтому у админа две ручки, а не один тумблер.
Кампания
Кнопка просит приложение перейти на аттестованное хранение. Телефоны обязаны попытаться апгрейд. Неудача не выкидывает человека из контура.
force_attested_mobileНеудача видна
Человек видит, что железо не дотянуло. Админ видит то же в журнале. Вход с уже одобренных машин сам собой не отзывается — рвётся только способность управлять контуром, если потом запирают класс.
журнал, не тишинаЗамок и исключение
Когда парк готов — упрощённую схему запрещают. Для одного телефона без TEE админ выдаёт исключение. Не открывает дыру всем.
per-device, не org-wideАпгрейд — тот же seed. Откат attested → unattested запрещён. Битый attestation blob не превращается в «ну тогда software»: это отказ, строка не меняется.
Агент
На ноутбуке без MDM, без постоянного админа, без расширения
Агент — обычная программа на macOS, Windows и Linux. Не MDM-профиль, не домен, не PKI. Payload подписывается на машине и уходит в ядро напрямую; в браузере остаётся короткий одноразовый handle. Safari и Firefox работают. Расширение больше не нужно.
Поставил сам
Установка без корпоративного каталога и без постоянных прав администратора на машине пользователя. Подрядчик и личный ноут — штатный случай, не исключение.
без MDMВход начинается в агенте
Человек жмёт «Войти». Агент собирает сведения, подписывает их и открывает обычный SSO. Мы не просим поставить расширение Chrome, чтобы payload пролез через страницу логина.
agent-initiatedРовно то, что разрешила политика
Админ задаёт, что агент имеет право класть в payload. Не каталог процессов, не произвольный shell с админки. Произвольная команда на чужой ноут запрещена.
privacy_levelВыключить агент можно всегда — это честный conditional access: без подтверждения устройства вход в рабочие системы закрыт, личная жизнь на машине не трогается.
Политики админа
Кто чем защищён — и кто вообще может заявиться
Консоль считает покрытие парка и даёт тумблеры, которые действуют без рестарта ядра. Людей можно завести импортом, а не только теми, кто сам пришёл на вход.
Есть и более тонкие ручки: запрет самозаписи новых устройств, запрет неизвестных username, исключение для одной машины. Произвольный shell с админки на чужой ноут — нет.
Честно
Что это не обещает
Ключ телефона переезжает на P-256 в Secure Enclave?
Нет. Личность контроллера — ed25519, как была. Апгрейд оборачивает тот же seed. Аттестация доказывает свойства хранения и подлинность приложения, не заменяет ключ подписи. Черновик, где pubkey менялся на P-256, отвергнут: сломались бы PoP и уже заведённые телефоны.
Нужно расширение браузера?
Нет. Вход начинается в агенте: подписанные данные устройства уходят в ядро напрямую, в браузере живёт одноразовый handle. Это не «три компонента агент + расширение + IdP».
Это замена MDM?
Нет. Агент ставится без MDM и без постоянных админ-прав — поэтому его можно дать подрядчику и личному ноуту, куда MDM не ставят. Управление парком через профили и дистанческий wipe — не эта страница.
Можно жить без аттестации?
Да, пока админ не запретит упрощённый класс. По умолчанию он разрешён: иначе часть Android просто не станет контроллером. Кампания просит перейти; запрет — отдельная ручка; исключение — на одно устройство.
Телефон сам делает устройство approved?
Только если так настроено. При admin-only enrollment заявка после телефона остаётся pending: в контур пускают устройства, которые одобрил админ. Импорт файла — второй путь завести людей, минуя «кто сам заявился».
Пилот
Покажем это на вашем контуре
Ваш Keycloak, несколько телефонов и ноутбуков. Увидите контроллер, оба класса хранения, кампанию аттестации и сводку покрытия — и решите сами.