Apple выпустила защиту SSH-ключей через Secure Enclave, но интерфейс получился уродливым
Protecting SSH Keys with macOS Secure Enclave

Автор перевёл SSH-ключи на Secure Enclave в macOS, чтобы приватный ключ физически не покидал чип и каждая операция подтверждалась Touch ID. Настройка через sc_auth и SSH_SK_PROVIDER работает, но всплывающее окно с текстом «ctccardtoken needs to authenticate to continue» выглядит неполированно. Ключи нельзя экспортировать и забэкапить, поэтому нужен второй ключ на случай поломки Mac. В итоге автор склоняется к стороннему Secretive.
Мой sense of beauty несовместим с этой уродливостью, поэтому я буду искать другие решения для хранения SSH-ключей в Secure Enclave, например Secretive.
- database64128
Подобные функции безопасности работают, пока не перестают.
Когда я установил WireGuard на macOS, я был рад обнаружить, что он хранит приватные ключи в системном связке ключей. Для доступа к приватному ключу требуется Touch ID.
Но однажды после обновления системы приложение WireGuard упало при запуске с ошибкой:
[APP] Unable to open config from keychain: -25300
Затем приложение удалило все профили, потому что они все оказались "осиротевшими", по-видимому, для "согласованности связки ключей" [0].
С тех пор я просто использую текстовый редактор для редактирования файлов конфигурации WireGuard и импортирую их в приложение. Ошибка существует до сих пор [1].
[0] https://github.com/WireGuard/wireguard-apple/commit/dfb685f2...
[1] https://www.reddit.com/r/WireGuard/comments/wyt828/osx_wireg...
- jwr
Много лет назад я решил, что хочу защищать свои ключи с помощью аппаратного устройства, независимого от производителя машины, которую я использую в данный момент. Я также хочу иметь резервные ключи и возможность свободно перемещать их между различными физическими локациями. Или получать резервную копию по почте через весь мир, если это необходимо.
YubiKeys были единственным решением, отвечающим этим требованиям, поэтому я выбрал их. Я использую их последние десять лет или около того, и я очень доволен этим решением. См. https://github.com/drduh/YubiKey-Guide — там описано, как заставить ваши RSA-ключи, хранящиеся на YubiKeys, работать одновременно с GPG и SSH.
- mavam
Одна фундаментальная проблема агентной разработки заключается в том, что доступ к ключу Secure Enclave требует присутствия человека. Если вы работаете без головы и не вошли в систему, Secretive (не уверен насчёт других) не сможет получить доступ к анклаву, даже если вы выбрали только "notify", а не "touchid".
Вот почему я скептически отношусь к тому, что этот подход может надёжно масштабироваться, хотя сегодня я полагаюсь на него. (Да, PATs решили бы эту проблему, но модель анклава — это то, что я пытаюсь сохранить пока что.) Вместо этого я написал небольшой демон, который настраивает сокет аутентификации SSH и выполняет переадресацию агента. Это работает, когда я путешествую с ноутбуком... но пока не с моего мобильного телефона.
Пример:
Ноутбук Удалённый Mac
┌─────────────────────┐ ┌──────────────────────────┐
│ Secretive │ │ ssh / git commit -S │
│ (Secure Enclave) │ │ │ │
│ ▲ │ ForwardAgent │ ▼ │
│ └── ssh ─────┼─────────────────►│ ~/.ssh/agent.sock │
│ │ │ (стабильный прокси) │
└─────────────────────┘ │ │ │ │
│ ▼ ▼ │
│ переадресованный локальный │
│ ноутбук Secretive │ […]
- LeBit
Статья начинается с неверной предпосылки.
Автор говорит, что ему не нравится идея хранения ключей в файловой системе, готовых быть украденными злоумышленниками.
Вот почему они должны быть защищены парольной фразой.
Вы используете ssh-агент для хранения ключей в памяти, а для удобства можете хранить парольные фразы в связке ключей. В OpenSSH для macOS есть директива конфигурации UseKeychain для этого.
Я сам использую Yubikey/FIDO2, но не потому, что приватные ключи нельзя защитить в файловой системе.
- flexorium
Я довольный пользователь Secretive уже много лет, в том числе для подписи коммитов Git, для чего он использует отдельный ключ с взаимодействием, но не для pull / push. Я считаю этот компромисс идеальным для GitHub.com, и у меня есть другие ключи с другой настройкой для серверов.
SSH-ключи в открытом виде были одной из первых вещей, на которых сосредоточился наш bagel [0] для обнаружения секретов на конечных точках разработчика. Затем мы встроили bagel как библиотеку в нашу защиту конечных точек разработчика [1].
- jen729w
Я использую `op` из 1Password для этого, но с оговоркой: ключи моей среды разработки.
Я обнаружил, что у меня началась усталость от отпечатков пальцев. Нужен ли запрос отпечатка каждый раз, когда мой сервер разработки хочет подключиться к dev Supabase? Нет. Это ожидаемо и не несёт никакого риска. Там нет данных.
Я беспокоился, что злонамеренный запрос будет автоматически одобрен мной. Когда вы видите 20 запросов в день, ваша мышечная память просто тянется к сенсору.
Поэтому у меня есть отдельное хранилище 1Password, которое может читать сервисный аккаунт [0]. Этот токен находится в моей среде как OP_SERVICE_ACCOUNT_TOKEN, который понимает инструмент `op`.
У него также есть доступ к хранилищу с 'AI-безопасными' ключами, к которым я хочу, чтобы Claude имел доступ без запроса ко мне.
Теперь эти запросы работают невидимо. И когда я вижу всплывающее окно с отпечатком пальца, это необычно, и я не одобряю его автоматически по привычке.
Я также держу элемент под названием '_One-day keys' в отдельном хранилище. (Подчёркивание просто перемещает его в начало списка для удобного доступа.)
В нём есть prod-ключи, в основном с ограниченным доступом только для чтения. При необходимости я перемещаю его в открытое хранилище. Claude знает об этом элементе и имеет инструкции напоминать мне переместить его обратно, когда он закончит то, что делал.
- dylanger
Вам стоит посмотреть на TKey (https://www.tillitis.se/products/tkey/)
Это, по сути, открытая версия YubiKey, само оборудование полностью открыто, и он отлично справляется с SSH-ключами ed25519.
inb4 они не одинаковые, я знаю, мне очень нравится то, что делает команда TKey.
- gsliepen
Secure Enclave, TPM и другие подобные функции безопасности, к сожалению, так плохо документированы и требуют стольких прыжков через обручи, чтобы заставить их работать, причём любая ошибка либо полностью блокирует вас, либо не даёт желаемой защиты. Определённо должен быть лучший способ сделать эти технологии удобными...