보안: 어떻게 보호하고, 무엇을 보호하지 않는가
이 페이지는 마케팅 문구가 아니라 앱이 실제로 하는 일을 적은 설명입니다. 과장하지 않으려고 한계도 함께 적었습니다.
기본 원칙
LiveSSH는 이용자의 기기에서 이용자가 지정한 서버로 직접 SSH 연결합니다. 접속 정보가 LiveSSH 서버를 거치지 않습니다.
LiveSSH Cloud(유료)를 켜면 호스트, 스니펫, SSH 키 같은 항목을 기기에서 먼저 암호화한 뒤 동기화합니다. 복호화 키는 이용자의 마스터 비밀번호와 복구 키에서만 만들어집니다. 이런 설계를 종단간 암호화 또는 제로 지식이라고 부릅니다.
금고 암호화 방식
동기화되는 항목은 다음 순서로 보호됩니다.
- 항목마다 무작위로 만든 데이터 키로
XChaCha20-Poly1305(인증 암호화)를 사용해 기기에서 암호화합니다. - 데이터 키는 마스터 비밀번호에서
Argon2id(메모리 64 MiB, 반복 3회)로 만든 키로 감싸 보관합니다. - 같은 데이터 키를 복구 키로도 따로 감쌉니다. 복구 키는 base32 52자이며 HKDF로 키를 만듭니다.
- 감싼 데이터 키들은 keyset(JSON)에 담겨 서버에 저장됩니다.
- 마스터 비밀번호를 바꾸면 keyset만 다시 감쌉니다. 항목은 그대로이며 복구 키도 계속 유효합니다.
복구 키
마스터 비밀번호를 잊으면 복구 키로 금고를 열고 새 마스터 비밀번호를 정할 수 있습니다.
마스터 비밀번호와 복구 키를 둘 다 잃으면 아무도 데이터를 복구할 수 없습니다. 서버에는 복호화에 필요한 키가 없기 때문에 LiveSSH도 마찬가지입니다. 복구 키는 직접 안전하게 보관해야 합니다.
서버에 저장되는 것
LiveSSH Cloud 서버는 Supabase를 직접 호스팅한 것입니다. 저장 내용은 다음과 같습니다.
저장하는 것
- Google 또는 Apple 계정의 이메일 주소(로그인은 Google·Apple로만 하며 로그인 비밀번호는 저장하지 않습니다)
- keyset(데이터 키를 마스터 비밀번호와 복구 키로 각각 감싼 것)
- 금고 항목의 암호문. 항목 종류(예: 호스트, 스니펫, 키)와 ID, 수정 시각, 삭제 표시는 서버가 볼 수 있음
- 푸시 알림용 기기 토큰과 기기 종류, 알림 훅 토큰의 해시(SHA-256)와 라벨(호스트 표시 이름), 구독 만료 시각
- 보안과 장애 대응을 위한 접속 기록(IP 주소, 요청 시각)
저장하지 않는 것
- 마스터 비밀번호와 복구 키
- 항목을 복호화할 수 있는 키
- SSH 비밀번호, 개인 키, 호스트 주소, 사용자 이름(Cloud에는 암호문으로만 올라감)
- 터미널 입출력, 명령 기록, SFTP로 주고받는 파일
데이터베이스는 행 단위 접근 제어로 계정별로 분리되어 있고, 서버와의 통신은 TLS로 보호됩니다. 보관 기간과 처리 위탁 업체는 개인정보처리방침에 있습니다.
호스트 키 고정(TOFU)
서버에 처음 접속할 때 서버의 호스트 키 지문(SHA-256)을 보여 주고 이용자가 확인하면 그 호스트에 저장합니다(Trust On First Use).
이후 지문이 달라지면 접속을 거부하고 경고합니다. 서버가 바뀌었거나 중간자 공격일 수 있습니다. 호스트 편집 화면에서 저장된 지문을 초기화할 수 있습니다.
처음 접속하는 순간의 지문이 진짜인지는 이용자가 따로 확인해야 합니다. TOFU는 첫 접속 때의 공격을 막지 못합니다.
푸시 알림에 담기는 내용
푸시 알림은 암호화 금고와 별개 경로입니다. 알림 훅이 서버에서 LiveSSH 서버로 알림을 보내면, LiveSSH 서버가 Google Firebase Cloud Messaging(iOS는 Apple Push Notification service 경유)으로 기기에 전달합니다.
알림에는 제목, 본문(에이전트가 알려 준 확인 요청 문구 등 최대 300자), tmux 세션 이름, 호스트 라벨이 포함되며 이 경로에서는 종단간 암호화되지 않습니다. 따라서 LiveSSH 서버와 Google/Apple을 거칩니다. 서버는 알림 본문을 로그에 남기지 않도록 만들어져 있습니다. 에이전트의 확인 요청 문구에 민감한 내용이 나올 수 있다면 알림 기능을 켜지 마세요.
충돌 보고서
충돌 보고서는 이용자가 첫 실행 때 동의한 경우에만 Firebase Crashlytics로 전송되며, 설정 → 보안에서 언제든 끌 수 있습니다. 끄면 아직 보내지 않은 보고서는 삭제됩니다.
보고서에는 충돌 원인(스택 트레이스), 운영체제와 앱 버전, 기기 모델이 들어가고, 오류 메시지는 첫 줄만 남기고 IP 주소, 이메일, 경로, 호스트 이름을 가린 뒤 보냅니다. 호스트 주소, 사용자 이름, 명령, 터미널 출력, 파일 이름, 키는 포함하지 않습니다. 광고 SDK와 사용 통계 분석 SDK는 사용하지 않습니다.
이 설계가 보호하지 못하는 것
- 이용자의 기기가 악성코드에 감염되었거나 잠금이 풀린 상태라면 앱에 저장된 정보를 보호할 수 없습니다. 금고를 연 동안 앱은 복호화된 정보를 쓰며, 생체 인증을 켜면 마스터 비밀번호가 기기 보안 저장소에 보관됩니다.
- 약한 마스터 비밀번호는 무차별 대입에 취약합니다. Argon2id는 시도를 느리게 할 뿐 막아 주지 않습니다.
- LiveSSH 서버는 항목 종류, ID, 수정 시각, 항목 수와 같은 메타데이터를 볼 수 있습니다.
- SSH 서버 쪽의 보안(키 관리, 서버 침해, 서버에 설치된 알림 훅 토큰의 보관)은 이용자와 서버 관리자의 몫입니다.
- 앱 소스 코드는 공개되어 있지 않으며, 제3자 보안 감사를 받은 적이 없습니다. 이 페이지의 설명은 개발자가 적은 것이며 독립적으로 검증된 것이 아닙니다.
보안 문제 신고
취약점이나 설명과 다른 동작을 발견하면 contact@xiu.kr로 알려 주세요.
최종 수정일: 2026-10-07