제3장
보안
공개 인터넷을 거치더라도 주머니 속 기기로 Mac을 제어하는 것이 안전한 이유를 설명합니다. 서명된 요청, 고정된 암호화, 앱 잠금, 그리고 휴대폰을 잃어버렸을 때의 즉시 폐기가 그 핵심입니다.
이 앱은 실제 Mac의 실제 서비스를, 때로는 지구 반대편에서 시작하고 중지할 수 있습니다. 이것이 의미가 있으려면 도난당한 휴대폰, 도청된 네트워크, 추측된 토큰이 서버 제어권으로 이어질 수 없어야 합니다. FrontierStack은 그중 어느 하나만으로는 충분하지 않도록 만들어졌습니다. 이 장에서는 그 보호 계층과, 그 덕분에 어디서든 Cloudflare 터널을 통해 Mac에 안전하게 접근할 수 있는 이유를 설명합니다.
3.1모든 요청은 서명됩니다
가장 강력한 보호는 눈에 보이지 않습니다. 이 기기는 페어링될 때 자체 개인 키를 생성해 iOS 키체인에 저장했습니다 — 이 키는 휴대폰을 떠나지 않으며, 이 앱조차 평문으로 다시 읽어 낼 수 없습니다. 앱이 Mac으로 보내는 모든 요청은 그 키로 서명됩니다. Mac은 사용자가 승인한 기기의 허용 목록을 각 기기의 공개 키로 보관하고, 모든 요청의 서명을 보낸다고 주장하는 기기와 대조해 확인합니다.
이것이 FS1 기기별 모델입니다. Ed25519 서명을 사용하며, 서명된 각 요청에는 타임스탬프와 일회용 nonce도 포함되므로 가로챈 요청은 몇 초 뒤에도 재전송할 수 없습니다. 실질적인 결과가 중요합니다. 오래된 앱들이 의존하는 공유 비밀 값 같은 bearer 토큰만으로는 여기서 아무것도 제어할 수 없습니다. 이 기기의 개인 키가 없으면 복사된 토큰은 아무 효력이 없습니다.
3.2암호화되고 고정된 연결
서명은 누가 말하는지를 증명하고, 암호화는 무엇을 말하는지를 보호합니다. Mac이 HTTPS 주소를 알리면 이 앱은 일반적인 보안 연결처럼 TLS로 통신합니다. 다만 한 가지 다른 점이 있습니다. Mac은 직접 생성한 자체 서명 인증서를 사용하므로, 그 인증서를 보증해 줄 공인 기관이 없습니다.
그 대신 앱은 인증서 고정을 사용합니다. 페어링 QR 코드에는 Mac 인증서의 정확한 지문이 담겨 있었습니다. 그때부터 앱은 바로 그 인증서를 제시하는 연결만 받아들이고, 그 밖의 것은 받아들이지 않습니다. 중간에 끼어들어 자신의 인증서를 내미는 공격자는, 그 인증서가 “유효한” 것이라 해도 페어링 때 고정한 지문과 일치하지 않으므로 거부됩니다.
3.3어디서든 안전한 이유
이 두 가지를 합치면, 예를 들어 Cloudflare 터널 같은 공개 경로로 Mac에 접근하는 것이 무모한 일이 아니라 안전한 일인 이유를 알 수 있습니다. 터널은 트래픽을 운반할 뿐 위조할 수는 없습니다.
- 연결이 암호화되고 고정되어 있으므로, 터널(과 경로상의 누구든)은 자신이 사칭할 수 없는 인증서를 향한 암호문만 보게 됩니다.
- 모든 요청이 이 기기의 키로 서명되므로, 무언가가 Mac에 도달하더라도 Mac이 따를 명령을 내릴 수 없습니다.
- 요청마다 붙는 타임스탬프와 nonce가 재전송을 막으므로, 가로챈 요청을 다시 보내도 실패합니다.
공개 경로를 둘지 여부는 Mac이 결정하며, 사용자가 닫을 수 있습니다. 여기서는 어떤 것도 네트워크가 비공개라는 전제에 의존하지 않습니다 — 보호 장치가 각 요청과 함께 이동합니다.
3.4앱 잠금
누군가 잠기지 않은 휴대폰을 그냥 집어 든다면 네트워크 보안은 도움이 되지 않습니다. 앱 잠금이 그 틈을 막습니다. 설정에서 암호를 켜면 그때부터 앱은 암호를 입력할 때까지 잠기며, 한 번의 탭으로 잠금을 해제하도록 Face ID 또는 Touch ID를 추가할 수 있습니다. 앱은 앱을 떠날 때마다 다시 잠깁니다 — 다른 앱으로 전환하거나 휴대폰을 잠그면, 돌아왔을 때 다시 묻습니다.
암호 자체는 저장되지 않습니다. 로컬에서 정한 암호는 고유한 솔트와 의도적으로 느리게 만든 PBKDF2-HMAC-SHA256 검증자로 기기 키체인에 보호되며, 시도에 실패할수록 대기 시간이 점점 길어집니다. 생체 인식 잠금 해제는 iOS가 처리하며, 앱에는 예 또는 아니요만 알려 줍니다.
Mac의 잠금 미러링. Mac 자체에 앱 잠금 암호가 설정되어 있으면 이 앱은 페어링 시 그것을 채택해 같은 암호를 요구합니다. 암호도, Mac의 재사용 가능한 검증자도 전송되지 않습니다. 휴대폰은 이 기기의 페어링 ID에 암호학적으로 묶인 느린 검증자를 받습니다. 미러링 중에는 휴대폰에서 잠금을 변경하거나 제거할 수 없으며, Mac에서 변경하십시오. Face ID나 Touch ID는 로컬 편의 기능으로 그대로 사용할 수 있습니다.
앱이 포그라운드를 벗어날 때마다, 앱 잠금이 활성화되어 있지 않더라도 앱 전환기 스냅샷을 데이터가 없는 개인 정보 보호 화면으로 가립니다. 실시간 직접 SSH 세션은 백그라운드로 전환되거나 잠기면 닫히며 자동으로 다시 연결되지 않습니다. 돌아와서 잠금을 해제하고 의도적으로 다시 연결하십시오.
3.5이 기기에 허용된 작업
인증은 “이것이 정말 내 휴대폰인가?”에 답하고, 권한 범위는 “그렇다면 얼마나 많은 일을 할 수 있는가?”에 답합니다. 그 결정은 여기가 아니라 Mac에서 이루어집니다. 페어링된 각 기기에는 Read-only, Restart, Operate, Full control의 네 수준 중 하나가 지정되며, Mac은 서명된 모든 요청에 그 수준을 적용합니다. 늘 들고 다니는 휴대폰은 완전히 페어링되어 있어도 낮은 수준으로 안전하게 둘 수 있습니다.
버튼이 비활성화되어 있거나 작업이 거부되면 이 기기의 권한 수준이 허용하지 않는 것입니다 — Mac에서 수준을 올리거나, 이미 권한이 있는 기기를 사용하십시오. 네 수준과 각 수준이 허용하는 작업은 페어링에 정리되어 있습니다.
권한 수준과 별도로 두 가지 허가가 있으며, 둘 다 Mac에서 설정합니다. Allow AI Administrator(기본값은 켬)는 이 휴대폰이 AI 탭을 사용할 수 있는지 여부를 정합니다 — 한 기기는 대화를 허용하고 다른 기기는 막는 방법입니다. Allow remote shell은 Full control에서만 제공되며 기본값은 끔입니다. 이 기기가 Shell 탭을 열고 서버에 직접 접근할 수 있게 하는 허가입니다. 어느 것도 우회 수단이 아닙니다. AI가 허용되어 있어도 모든 변경에는 여전히 Full control의 “Allow changes”와 앱 잠금 해제가 필요합니다.
3.6Mac을 사용할 수 없을 때의 권한
오프라인이 된다고 휴대폰이 무제한 제어 장치가 되지는 않습니다. 마지막으로 서명된 인벤토리에는 경과 시간이 표시됩니다. 직접 도달성 검사는 저장된 SSH 엔드포인트와, FrontierStack이 이미 관찰한 서비스에서 추정되는 소수의 표준 포트에만 연결할 수 있으며, 범위를 스캔하거나 프로브를 다운로드하지 않습니다. 직접 SSH는 휴대폰 전용의 두 번째 Ed25519 키를 사용하며, 저장된 서버 ID가 없거나 바뀌었으면 연결을 거부합니다.
서비스 시작, 중지, 재시작, 다시 로드 요청은 Mac이 오프라인인 동안 준비해 둘 수 있습니다. 이 요청은 휴대폰에서 최대 4시간 동안 서명된 상태로 유지되며, More → Queued Actions를 열어 정확한 대상을 검토하고 Mac이 돌아온 뒤 명시적으로 보내기 전까지는 아무 일도 하지 않습니다. Mac은 서명, 만료, 권한, 앱 잠금을 다시 확인하고, 수락된 요청을 한 번만 실행합니다. 스크립트, 셸 명령, 재부팅, 플릿 실행, 기기 전원 및 접근 권한 변경은 이 대기열에서 절대 받아들여지지 않습니다.
3.7기기를 분실한 경우
휴대폰마다 고유한 키가 있으므로, 한 기기를 차단하기 위해 다른 것을 바꿀 필요가 전혀 없습니다. Mac에서 Paired Devices(Overview 그룹)를 열고, 이름으로 기기를 찾아 폐기하십시오. 그 키는 즉시 허용 목록에서 제거되며, 그 기기가 다시 Mac과 통신하려는 순간 서명이 거부됩니다. 다른 기기는 영향을 받지 않고 계속 동작합니다.
Mac에서의 폐기가 결정적인 조치입니다 — 휴대폰 자체에 접근할 수 없어도 기기를 막을 수 있습니다. 아직 가지고 있는 휴대폰에서 Unpair this device를 실행하면, 먼저 Mac에 이 휴대폰의 폐기, 등록된 직접 SSH 키 제거, 푸시 접근 중지를 요청합니다. Mac이 이 정리를 확인하지 못한 경우에만 앱이 Forget Locally를 제공합니다. 이 대체 수단을 사용했다면 Mac의 Paired Devices에서 폐기를 마무리하십시오.
정말로 잃어버린 휴대폰에 대해서는 Mac이 더 강력한 원클릭 작업인 Secure lost phone을 제공합니다. 키 폐기에 더해, 해당 기기의 이전 대기 작업을 즉시 취소하고, 열린 세션을 닫고, 직접 접근을 위해 서버에 설치했던 SSH 키를 제거하고, 푸시 알림을 비활성화합니다. 그 시점에 오프라인인 서버는 목록에 남아 있으므로, 서버가 다시 온라인이 되면 키 제거를 마칠 수 있습니다.
FrontierStack 사용자 설명서 · 버전 1.0.0 · 제3장