macOS Secure Enclave SSH 키, sc_auth로 붙긴 하는데 작성자는 결국 접었다
- 작성자는 네이티브 Secure Enclave 방식이 실제로 동작은 하지만 절차가 지저분해서 도입하지 않기로 했고, 대안으로 Secretive, YubiKey, 1Password를 꼽음
- macOS Sequoia부터 Secure Enclave 기반 SSH 키를 지원하며 개인 키는 칩 안에서 생성돼 밖으로 나오지 않고, 서명할 때마다 Touch ID 승인을 받음
sc_auth create-ctk-identity -l ssh-MacBook -k p-256-ne -t bio로 키를 만들고ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N ''로 키 핸들 파일을 뽑은 뒤 SSH_SK_PROVIDER 환경변수를 지정하는 3단계 구성- Touch ID 등록이 초기화돼 있으면 -25293 Failed to generate keypair 오류가 나고, 흔히 보이는 ssh-add -K 안내는 폐기됐으며 CryptoTokenKit 키에는 어차피 통하지 않음
- 공개 키는
sk-ecdsa-sha2-nistp256@openssh.com형식이고 끝에 붙는ssh:는 주석이 아니라 FIDO2 애플리케이션 ID임
Hacker News 의견들
네이티브 방식 좋아하면 sekey-sh 써봐. 이 과정을 스크립트로 묶어놨고 macOS 26 이상에서 돌아감.
나도 오늘 이거 찾아보고 있었는데, 애플이 문서로 안 내놓고 누가 우연히 발견한 기능이라 언젠가 조용히 사라질까 봐 걱정됨. 그러면 키째로 잠기는 거 아님?
기기 잃어버린 거랑 같다고 보면 됨. 백업 키 하나 더 두고 Secure Enclave 키는 버려도 되는 걸로 취급해야 함.
이런 게 20년 전에 나왔어야 함. 하드웨어 키를 SSH 자격증명으로 쓰는 게 이렇게 빡센 게 거의 병적임.
ed25519-sk는 내 맥에서 잘 되는데. TPM이나 secure enclave를 딱 집어 말하는 거면 얘기가 다르지.
Secretive로 Github 키만 며칠째 쓰는 중인데 편함. 다만 enclave에서 태어난 키는 백업이 안 되니까 다른 접근 경로를 마련해둬야 함.
나도 Secretive 추천. 순정 도구로는 진땀 뺐는데 Secretive는 설정이 쉬웠음.
YubiKey를 gpg 트릭부터 FIDO까지 몇 년 썼는데 새 기기나 컨테이너에서 chicken-and-egg가 제일 짜증남. 결국 1Password SSH로 갈아탐. 키 공유가 되니까. 대신 이 방식은 macOS 전용이라 리눅스나 윈도우 옆에 두면 다시 파일 키로 돌아가야 하고, USB 포트 하나 상시 점유가 싫어서 이걸 택할 것 같기도 함.
로그인 끝나면 그냥 뽑으면 안 됨?
YubiKey는 새 기기에 승인된 키를 심는 용도로 쓰는 게 맞다고 봄.
macOS WireGuard가 키체인에 키 넣고 Touch ID로 잠그길래 좋아했는데, 업데이트 후 -25300 에러로 프로필이 전부 날아감. 그 뒤로는 텍스트 파일로만 씀. 버그는 아직도 있음.
macOS 개발하면서 키체인 일관성 문제에 수도 없이 물렸음. 진짜 엉망임.
키를 아무리 잘 숨겨도 정작 ssh-agent 소켓이 열려 있으면 말짱 도루묵 아님? Ansible 같은 건 확인 프롬프트 뜨면 못 씀.
그래서 나는 Secretive를 두 번째 에이전트로 씀. 호스트별 키 포워딩이 1Password에선 안 되더라.
글 시작부터 전제가 틀렸음. 파일에 있는 키는 passphrase 걸면 되고, UseKeychain 쓰면 키체인에 넣고 편하게 씀.
passphrase 몰랐냐는 건 좀 심하고. Secure Enclave는 키를 아예 못 꺼내니까 키로거나 메모리 익스플로잇에도 안전함.
매번 로그인할 때 passphrase 직접 침? 아니면 키가 RAM에 있고 악성코드가 털어감. 직접 치는 건 Touch ID보다 훨씬 귀찮고.
디스크에 있는 키 + passphrase는 1FA고, SE 키 + 해제 PIN은 2FA임.
난 VM 안에서 개발하는데 Secretive 에이전트만 포워딩해두니까 git push 할 때마다 지문 찍으라고 해서 좋음.
숨기는 리스크보다 눈에 보이는 리스크가 다루기 쉽다고 봄. 키를 어디로 옮기든 결국 키에 접근하는 채널이 생기고 그게 표적이 됨.