2 мин чтения#ai#infrastructure#engineering

SSH-ключ лежал обычным файлом — а чип рядом охранял пароль от почты

У macOS Tahoe (26.5) есть нативная поддержка аппаратных SSH-ключей — прямо в системе, без стороннего софта. Команда — sc_auth create-ctk-identity. Ключ живёт внутри Secure Enclave, того же чипа, что разблокирует Touch ID для 1Password и входа в систему.

Пользуюсь этим чипом каждый день — а про SSH ни разу не подумал. Ключ, который открывает контур, лежал обычным файлом, как у всех, пока тот же чип охранял пароль от почты. (обидно, чипу было бы не сложнее)

Дошёл до этого не абстрактно — неделю читал про prompt injection в кодинг-агентах на HN: агент читает враждебную страницу, страница просит прочитать ~/.ssh и отправить куда-то. У меня в терминале агенты целыми днями, а про то, что физически стоит между ними и ключом, — не думал.

Заодно сверял, какой сервис у меня на каком хостере — контракты в этом году менялись, часть провайдеров отменена. Спутал два хостера с соседними диапазонами IP, понадеявшись на паттерн адресов. Поймал по инфраструктурному коду — там в комментарии дата реального переезда, а не догадка.

Что проверено:

sc_auth create-ctk-identity — реальная команда, задокументирована только в собственной справке. Хабр писал про Secure Enclave и SSH раньше — про Sekey, нестабильный сторонний агент, с выводом «используйте лучше YubiKey». Нативная замена, которая как раз закрывает эту жалобу, — нет. → -k p-256-ne — непереносимый ключ. Не «зашифрован сильнее» — физически не существует вне чипа, экспортировать нечего → -t bio — каждая подпись требует Touch ID заново, не разовая разблокировка на сессию → SSH_SK_PROVIDER=/usr/lib/ssh-keychain.dylib — единственная строка, которая говорит системному ssh использовать этот путь вместо обычного агента → sc_auth list-ctk-identities — пусто. Ни одной идентичности, чистый лист

Что не проверено:

Синтаксис реальный, список идентичностей вижу. Дальше — получить публичный ключ. ssh-keygen -w /usr/lib/ssh-keychain.dylib -K (команда для выгрузки resident-ключей) падает:

Enter PIN for authenticator: Provider "/usr/lib/ssh-keychain.dylib" returned failure -1
Unable to load resident keys: invalid format

Пустой список идентичностей — вероятная причина, но не проверено. Полный путь — создать identity, вытащить публичный ключ, прогнать через ProxyJump, загрузить в GitHub — ещё нет. Отдельно напишу, когда пройду до конца (или застряну — тоже напишу).

Читать по теме