보안

보안과 투명성.

Termal OS는 서버의 열쇠를 맡습니다. 그러니 신뢰 자체가 제품입니다. 접속 정보와 데이터에 대해 무엇을 하는지, 그리고 무엇을 직접 확인하실 수 있는지 여기에 정확히 적습니다.

구조의 뼈대를, 한 줄로

전부 로컬에서, 에이전트 없이. Termal OS는 내 컴퓨터에서 도는 데스크톱 앱이고, 맨 SSH로 서버에 붙습니다. 사이에 클라우드는 없습니다. 서버 접속 정보는 로컬에서 암호화되어 저희 쪽으로 보내지지 않고, 서버에는 아무것도 설치하지 않습니다. termalos.com 계정은 라이선스를 발급하고 확인하는 데만 쓰입니다.

여기 적힌 건 홍보용 문구가 아닙니다. 아래의 항목 하나하나가 앱의 실제 동작에, 그리고 직접 확인하실 수 있는 것들(트래픽을 들여다보기, 서버를 살펴보기, 패킷을 읽기)에 대응합니다.

접속 정보는 컴퓨터를 벗어나지 않습니다

SSH 비밀번호, 개인 키와 그 암호문, 그리고 AI 제공사의 API 키는, 내 컴퓨터에 있는 로컬 SQLite 데이터베이스 안에서 저장 시 AES-256-GCM으로 암호화됩니다. 그중 어느 것도 저희 서버에 저장되거나 전송되지 않습니다.

암호화 키는 두 가지 방식 중 하나로 동작합니다.

  • 기본(장치 키). 앱을 처음 실행할 때 256비트 난수 키가 만들어져, 소유자만 읽을 수 있는 권한으로 사용자 데이터 폴더에 기록되고, 전송되는 일은 결코 없습니다. 이 키가 그 컴퓨터의 접속 정보를 암호화합니다.
  • 마스터 비밀번호(선택). 켜면 키가 비밀번호로부터 scrypt로 유도되어 메모리에만 놓입니다. 디스크에 닿지 않습니다. 앱은 잠긴 채로 시작하고, 풀기 전까지 그대로입니다.

기본 방식에서는 장치 키가 데이터베이스와 같은 컴퓨터에 있습니다(파일 권한으로 보호됩니다). 이건 데이터베이스 파일만 몰래 읽으려는 상대에게는 통하지만, 이미 운영체제 세션을 장악한 상대에게는 통하지 않습니다. 마스터 비밀번호 방식이 그 구멍을 막습니다. 디스크에 키가 없으니, 비밀번호 없이는 내용을 읽을 수 없습니다.

실제로 컴퓨터를 떠나는 것

저희 쪽 설비를 향해 앱이 보내는 요청은 정확히 세 종류입니다. 그 밖에는 없습니다.

  • 계정 로그인 — 이메일 주소와 비밀번호를, 로그인할 때 한 번만 보냅니다.
  • 라이선스 갱신 — 대략 하루에 한 번. 세션 토큰, 설치 ID, 운영체제 이름, 앱 버전. 서버는 암호학적으로 서명된 라이선스 토큰(RSA-2048 / SHA-256)을 돌려주고, 앱은 이를 최대 14일 동안 오프라인에서 검증할 수 있습니다.
  • 버전 확인 — 저희 CDN에 있는 작은 버전 정보를 읽을 뿐입니다. 새 빌드가 나왔음을 알려 드리기 위한 것이고, 개인정보는 보내지 않습니다.

설치 ID는 로컬에 저장되는 난수 식별자이며, 컴퓨터 하드웨어의 지문이 아닙니다. 앱이 이야기를 나누는 나머지 상대는 전부 본인의 것입니다. 본인의 서버(SSH로), 그리고 코파일럿을 켰다면 본인이 고른 AI 제공사.

텔레메트리는 없습니다. Termal OS에는 분석 도구도, 오류 보고도, 사용 추적도 들어 있지 않습니다. 서버 지표도, 호스트 이름도, 명령도 컴퓨터를 벗어나지 않습니다.

AI 코파일럿: 본인의 키, 본인의 제공사

코파일럿은 기본적으로 꺼져 있습니다. 켜면 질문과 서버의 짧은 스냅숏이 고르신 AI 제공사로 곧장 갑니다(Anthropic, 또는 OpenAI 호환 엔드포인트). 인증에는 본인의 API 키가 쓰입니다. 저희가 사이에 끼는 일은 없고, 되파는 것도 없습니다.

무엇이 공유되는지 정확히 말씀드립니다. 그 스냅숏에는 운영체제와 감지된 실행 환경, 실시간 지표, 호스팅 중인 사이트의 이름, 진행 중인 알림, 그리고 그 대화에서의 최근 메시지가 담깁니다. 접속 정보는 들어가지 않습니다.

그리고 저절로 도는 것은 없습니다. 코파일럿은 명령을 제안할 뿐이고, 각각에 실행 버튼이 붙습니다. 명령이 SSH로 나가는 건 직접 누르셨을 때뿐입니다. 시스템 쪽 지시가 코파일럿을 바꾸지 않는 진단 쪽으로 이끌고, 파괴적인 명령은 반드시 먼저 경고하게 합니다.

설계로서의 에이전트 없음

Termal OS는 서버에 아무것도 설치하지 않습니다. 에이전트도, 데몬도, 백그라운드 프로세스도, cron 작업도요. 모니터링은 SSH 너머로 읽기 전용의 평범한 셸 명령을 돌려서 이뤄집니다(직접 치실 법한 그것들. ps, df, free 같은). 서버에 무언가 쓰이는 유일한 순간은 파일 관리자에서 직접 시작하신 파일 전송뿐입니다. root는 필요 없습니다. 앱은 본인의 SSH 사용자 권한으로 돕니다.

로컬 서버는 열린 문이 아닙니다

내부적으로 앱은 내 컴퓨터 위에서 작은 서버를 돌립니다. 이 서버는 실행할 때마다 새로 만들어지는 비밀값으로 지켜지고, 그 값은 데스크톱 앱에만 건네집니다. 그 값이 없는 요청은 다른 브라우저에서 오든 컴퓨터의 다른 프로세스에서 오든 거부됩니다. 로컬 서버는 앱을 위한 것이지 네트워크를 위한 것이 아닙니다.

업데이트와 코드 서명

새 버전이 나오면 앱이 화면 안에서 알려 드리고, 설치는 편한 때에 하시면 됩니다. 조용한 업데이트는 없습니다.

솔직히 말씀드립니다. Windows와 macOS 빌드는 아직 코드 서명이 되어 있지 않습니다. 그리고 바로 그 때문에 두 플랫폼에서는 바이너리 자동 업데이트를 일부러 꺼 두었습니다. SSH 접속 정보를 맡아 두는 앱에 서명 없는 자동 업데이트를 밀어 넣는 위험은 감수하지 않습니다. 서명 여부를 알고 계신 상태에서 이 사이트에서 직접 내려받으시고, 직접 판단해 업데이트하시는 방식입니다. Linux에서는 Snap이 Snap Store의 심사를 거쳐 샌드박스 안에서 돕니다.

코드 서명 인증서에는 돈이 들고, 이 프로젝트에는 아직 그 돈이 없습니다. 후원해 주시는 분들이 그것을 바꿉니다. 금액에 관계없이 후원하시면 Lifetime Pro 라이선스를 드립니다. 그리고 그것이 서명과 스토어 공개를 받치는 자금입니다. 이 부탁이 존재하는, 정직한 이유입니다.

소스는 공개하지 않습니다. 그 점에 대하여

Termal OS는 유료 상용 소프트웨어라서, 앱 본체의 소스는 공개하지 않습니다. 아닌 척하지 않겠습니다. 그것이 무슨 뜻인지 분명히 적습니다.

  • 공개된 것: Termal Studio SDK는 MIT 라이선스입니다. termalos-sdk를 보세요.
  • 그래도 확인하실 수 있는 것: 앱을 프록시 뒤에 두고 트래픽을 들여다보세요. 위에 적은 호출 말고는 나오지 않습니다. 서버를 살펴보세요. 에이전트는 없습니다. 맨 SSH이고, root도 필요 없습니다.

소스가 닫힌 앱에 대한 신뢰는 약속이 아니라, 관찰할 수 있는 동작으로 얻는 것입니다. 이 페이지는 그 동작을 늘어놓은 것이고, 나머지는 확인해 보실 수 있습니다.

보안 문제 알리기

뭔가 찾으셨나요? 공개된 이슈가 아니라 비공개로 알려 주세요. 보안 정책을 보시거나, [email protected]으로 보내 주세요. 제보는 환영이고, 반드시 답장합니다.

여기 적은 것들에 대해 궁금한 점이 있으면 [email protected]으로 보내 주세요. 보안 질문에는 얼버무리지 않고 제대로 답합니다.