개인정보처리방침
시행일: 2026년 10월 11일
한눈에 보기
- 계정이 없습니다. 이름·이메일·전화번호·비밀번호를 받지 않습니다.
- 터미널에 입력하고 출력되는 내용은 휴대폰과 컴퓨터 사이에서 종단간 암호화되며, 중계 서버에 저장되지 않습니다. 개발자도 볼 수 없습니다.
- 중계 서버는 연결과 알림에 꼭 필요한 정보(기기 ID, 컴퓨터 ID, 구독 확인용 익명 ID, 푸시 토큰, 플랫폼, 마지막 접속 시각)만 보관합니다.
- 광고와 분석 SDK가 없습니다. 사용자를 추적하지 않습니다.
alull(이하 "개발자")은 kterm 앱과 컴퓨터용 프로그램 kterm-host, 중계 서버(이하 통틀어 "서비스")를 운영하면서 「개인정보 보호법」 등 관련 법령을 지킵니다. 이 방침은 서비스가 어떤 정보를, 왜, 얼마나 오래 처리하는지 설명합니다.
1. 서비스의 구조
kterm은 세 부분으로 이루어집니다.
- 앱(iPhone·iPad·Android·데스크톱): 사용자가 터미널을 보고 입력하는 곳.
- kterm-host: 사용자가 자기 컴퓨터(Mac·Windows·Linux)에 설치하는 프로그램. 터미널 세션은 이 컴퓨터에서 실행됩니다.
- 중계 서버: 앱과 컴퓨터가 같은 네트워크에 있지 않을 때 암호문을 전달합니다. 같은 와이파이에서는 중계를 거치지 않고 직접 연결합니다.
앱과 컴퓨터는 처음 연결할 때 QR 코드로 서로의 공개키를 교환하고, 이후 모든 터미널 데이터를 표준 암호(X25519, ChaCha20-Poly1305)로 종단간 암호화합니다. 암호화 키는 앱과 컴퓨터에만 있고 중계 서버에는 없습니다.
2. 처리하는 개인정보 항목과 목적
2-1. 중계 서버가 보관하는 정보
| 항목 | 설명 | 목적 |
| 기기 ID | 앱이 처음 실행될 때 만든 공개키에서 계산한 22자 무작위 식별자. 이름·전화번호와 연결되지 않습니다. | 연결 인증, 기기와 컴퓨터 연결 |
| 컴퓨터 ID | kterm-host가 만든 공개키에서 계산한 식별자 | 연결 인증, 기기와 컴퓨터 연결 |
| 기기와 컴퓨터의 연결 관계 | 어떤 기기 ID가 어떤 컴퓨터 ID에 연결해 본 적이 있는지 | 알림 대상 확인, 요금제 판정 |
| 구독 확인 | 기기 ID로 RevenueCat에 Pro 구독 여부를 물어 잠깐(최대 10분) 기억합니다. 따로 저장하는 결제 정보는 없습니다(RevenueCat 사용자 ID = 기기 ID). | 세션 수 제한·알림 등 Pro 기능 적용 |
| 푸시 토큰 | Firebase Cloud Messaging이 발급하는 알림 주소. 알림을 허용한 경우에만 있습니다. | 입력 대기 알림 발송 |
| 플랫폼 | ios · android · macos · windows · linux 중 하나 | 알림 발송 경로 선택, 호환성 대응 |
| 마지막 접속 시각 | 기기·컴퓨터가 중계에 마지막으로 연결한 시각 | 오래 쓰지 않은 기록 자동 삭제 |
중계 서버는 연결 중인 접속의 IP 주소를 연결 유지와 남용 방지(IP당 동시 연결 수 제한)에 메모리에서만 사용하고, 로그나 파일에 남기지 않습니다.
2-2. 수집하지 않는 정보
- 터미널 입력·출력, 실행한 명령, 파일 내용, 세션 이름, 작업 폴더 경로
- 컴퓨터 이름과 기기 이름(예: "OO의 iPad") — 종단간 암호 안쪽으로만 오가며 중계 서버는 볼 수 없습니다.
- 이름, 이메일, 전화번호, 주소, 비밀번호 등 계정 정보 — 계정이 없습니다.
- 위치 정보, 연락처, 광고 식별자. 사진·파일은 사용자가 직접 고른 것만 내 컴퓨터로 종단간 암호화되어 가고, kterm 서버는 받지 않습니다
- 결제 카드 정보 — 결제는 Apple과 Google이 직접 처리하며 개발자에게 전달되지 않습니다.
입력 대기 알림의 문구는 "세션이 입력을 기다려요"로 고정되어 있습니다. 세션 이름이나 에이전트의 질문 내용은 알림 서버로 보내지 않습니다.
2-3. 사용자의 기기와 컴퓨터에만 저장되는 정보
- 컴퓨터(kterm-host): 연결을 허락한 기기 목록(기기 공개키와 기기 이름), 컴퓨터의 암호 키, 설정. 이 정보는 사용자 컴퓨터에만 있고 개발자에게 전송되지 않습니다.
- 앱: 기기의 암호 키, 연결한 컴퓨터 목록(컴퓨터 이름·공개키·주소), 설정. 기기 밖으로 전송되지 않습니다.
베타 테스터 신청
베타에 신청하면서 보내 주신 이메일 주소는 테스트 초대(Google Play 비공개 테스트·TestFlight)와 베타 안내에만 쓰고, 베타가 끝나면 지웁니다. 앱이 자동으로 수집하는 정보가 아니라 직접 보내 주신 메일입니다.
3. 개인정보의 보유 기간과 파기
- 중계 서버의 기기 기록은 사용자가 앱에서 그 기기를 삭제하거나 컴퓨터에서 연결을 해제하면 지체 없이 삭제합니다.
- 앱을 지우기만 하고 기기 삭제를 하지 않은 경우, 마지막 접속 후 90일이 지나면 자동으로 삭제합니다.
- RevenueCat이 보관하는 구매 기록은 관계 법령(「전자상거래 등에서의 소비자보호에 관한 법률」의 대금결제·계약 기록 보존 등)이 정한 기간 동안 보관될 수 있습니다. (구매 기록은 kterm이 아니라 각 스토어와 RevenueCat이 보관합니다)
- 파기는 중계 서버의 상태 파일에서 즉시 지우는 방식입니다. 중계 서버 기록은 따로 백업하지 않습니다.
4. 처리 위탁과 국외 이전
서비스 운영을 위해 아래 업체에 처리를 맡깁니다. 개인정보를 판매하거나 광고 목적으로 제3자에게 제공하지 않습니다.
| 받는 자 | 맡기는 일 | 이전 항목 | 국가·시기·방법 | 보유 기간 |
| Oracle Cloud Infrastructure (Oracle Corporation) | 중계 서버 호스팅 | 2-1의 항목 | 대한민국(서울 리전) 서버에 저장 — 국외 이전 아님 | 3장의 기간 |
| RevenueCat, Inc. | 구독 결제 확인과 구독 상태 관리 | RevenueCat 앱 사용자 ID, 구매 내역(스토어 영수증), 기기 OS·앱 버전, 접속 IP | 미국 · 구매·구독 확인 시 · 앱과 서버에서 암호화 통신으로 전송 | 구독 관리 목적 달성 시까지 또는 삭제 요청 시까지(법정 보존 기간 제외) |
| Google LLC (Firebase Cloud Messaging) | 푸시 알림 발송 (iPhone은 Apple Push Notification service를 거침) | 푸시 토큰, 고정 알림 문구 | 미국 · 알림 허용 시와 알림 발송 시 · 암호화 통신으로 전송 | 토큰이 무효화되거나 기기 삭제 시까지 |
| Apple Inc. (App Store) · Google LLC (Google Play) | 앱 배포, 구독 결제·환불 | 결제 정보는 사용자가 각 스토어에 직접 제공 | 각 사의 개인정보처리방침에 따름 | 각 사 방침에 따름 |
국외 이전을 원하지 않으면 푸시 알림을 끄고 구독을 하지 않으면 됩니다. 이 경우 알림과 Pro 기능을 쓸 수 없지만, 무료 기능은 그대로 쓸 수 있습니다.
5. 앱 권한과 사용 목적
모든 권한은 해당 기능을 처음 쓸 때 묻고, 거절해도 나머지 기능은 쓸 수 있습니다.
iPhone · iPad
| 권한 | 사용 목적 | 거절하면 |
카메라 (NSCameraUsageDescription) | 컴퓨터 화면의 페어링 QR 코드 스캔, 그리고 사용자가 직접 찍어 컴퓨터로 보내는 사진(선택). QR 영상은 기기 안에서만 처리합니다. | 페어링 링크를 붙여 넣어 연결 |
사진 (NSPhotoLibraryUsageDescription) | 사용자가 고른 사진·스크린샷을 내 컴퓨터로만 보냅니다(종단간 암호화, kterm 서버에 저장되지 않음). | 사용하지 않으면 첨부 기능만 빠집니다 |
마이크 (NSMicrophoneUsageDescription) | 음성 입력(Pro). 녹음 파일을 저장하지 않습니다. | 음성 입력만 꺼짐 |
음성 인식 (NSSpeechRecognitionUsageDescription) | 음성 입력을 글자로 바꿈. iOS 음성 인식을 사용하며, 설정에 따라 Apple이 음성을 처리할 수 있습니다. 바뀐 글자는 사용자가 확인한 뒤에만 컴퓨터로 보냅니다. | 음성 입력만 꺼짐 |
로컬 네트워크 (NSLocalNetworkUsageDescription) | 같은 와이파이에 있는 내 컴퓨터에 중계 없이 직접 연결 | 항상 중계 서버를 거쳐 연결 |
| 알림 | 세션이 입력을 기다릴 때 알림(Pro) | 알림 없음 |
Face ID / Touch ID (NSFaceIDUsageDescription) | 앱 잠금(선택). 생체 정보는 기기의 보안 영역에만 있고 앱이 읽을 수 없습니다. | 앱 잠금을 쓰지 않음 |
Android
설치 파일(APK)이 선언하는 권한 목록입니다. 앱이 직접 선언한 것과 라이브러리가 자동으로 추가한 것을 구분해 적습니다.
앱이 직접 선언한 권한
| 권한 | 사용 목적 |
INTERNET | 컴퓨터·중계 서버와 통신 |
CAMERA | 페어링 QR 코드 스캔. 영상을 저장하거나 전송하지 않습니다. |
RECORD_AUDIO | 음성 입력(Pro). 녹음 파일을 저장하지 않습니다. |
POST_NOTIFICATIONS | 세션 입력 대기 알림(Pro) |
USE_BIOMETRIC | 앱 잠금(선택) |
USE_FINGERPRINT | 앱 잠금(선택) · 구형 Android 지문 인식(local_auth 라이브러리) |
라이브러리가 자동으로 추가하는 권한 (앱이 직접 요청하지 않음)
| 권한 | 추가하는 라이브러리 · 목적 |
ACCESS_NETWORK_STATE | Firebase · 네트워크 연결 상태 확인 |
WAKE_LOCK | Firebase Cloud Messaging · 알림 수신 처리 |
VIBRATE | 알림 진동(체험 종료 안내·입력 대기 알림) |
DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION | AndroidX 가 자동으로 넣는 앱 내부 전용 권한 — 다른 앱이 이 앱의 내부 신호를 받지 못하게 막는다 |
com.google.android.c2dm.permission.RECEIVE | Firebase Cloud Messaging · 푸시 수신 |
com.android.vending.BILLING | Google Play 결제(RevenueCat) · 구독 구매 |
요청하지 않는 권한: 위치(ACCESS_FINE_LOCATION·ACCESS_COARSE_LOCATION)·연락처(READ_CONTACTS)·사진/미디어(READ_MEDIA_IMAGES)·저장소(READ_EXTERNAL_STORAGE)·전화·문자·캘린더 — 어느 것도 선언하지 않습니다. 광고 식별자 권한(AD_ID)도 없습니다.
6. 정보주체의 권리와 행사 방법
사용자는 언제든 자기 정보의 열람, 정정, 삭제, 처리정지를 요구할 수 있습니다.
- 앱에서 바로 삭제: 앱의 설정 > 내 데이터 삭제를 누르면 이 기기의 중계 서버 기록 전체가 삭제됩니다. 컴퓨터 하나만 지우려면 컴퓨터 목록에서 ⋮ > 목록에서 삭제를 누르세요. 컴퓨터 쪽 kterm-host 설정 화면에서 기기를 해제해도 그 컴퓨터와의 연결 기록이 지워집니다.
- 이메일 요청: 앱을 이미 지웠다면 alulltro@gmail.com으로 요청하세요. 계정이 없으므로 앱 설정에 표시되는 기기 ID(또는 구독 영수증의 주문 번호)를 함께 보내 주시면 본인 기기를 찾을 수 있습니다. 요청을 받은 날부터 10일 안에 처리하고 결과를 알려 드립니다.
- 자세한 절차는 데이터 삭제 안내에 있습니다.
7. 안전성 확보 조치
- 터미널 데이터 종단간 암호화(X25519 키 교환, ChaCha20-Poly1305). 직접 연결과 중계 연결 모두 같은 방식입니다.
- 중계 서버 접속은 TLS로 암호화하고, 기기는 Ed25519 서명으로 자기 ID를 증명합니다.
- 중계 서버에는 암호화 키와 터미널 내용이 없으므로, 서버가 침해되더라도 터미널 내용은 드러나지 않습니다.
- 서버 접근은 개발자 1인으로 제한하고, 접근 권한은 키 기반 인증으로만 허용합니다.
8. 아동의 개인정보
서비스는 만 14세 미만 아동을 대상으로 하지 않으며, 아동의 개인정보를 알면서 수집하지 않습니다. 만 14세 미만 아동의 정보가 처리된 사실을 알게 되면 지체 없이 삭제합니다.
9. 자동 수집 장치
앱과 이 웹사이트는 쿠키, 광고 식별자, 분석·추적 도구를 쓰지 않습니다.
10. 개인정보 보호책임자와 문의
개인정보 침해에 대한 상담이나 구제가 필요하면 아래 기관에 문의할 수 있습니다.
- 개인정보침해신고센터 (국번 없이 118, privacy.kisa.or.kr)
- 개인정보분쟁조정위원회 (1833-6972, www.kopico.go.kr)
- 대검찰청 사이버수사과 (국번 없이 1301), 경찰청 사이버수사국 (국번 없이 182)
11. 방침의 변경
이 방침을 바꾸면 시행 7일 전(사용자에게 불리한 변경은 30일 전)에 이 페이지와 앱 안에서 알립니다.
시행일: 2026년 10월 11일
Privacy Policy
Effective date: October 11, 2026
At a glance
- There are no accounts. We do not ask for your name, email, phone number or a password.
- What you type and see in the terminal is end-to-end encrypted between your phone and your computer and is never stored on the relay. The developer cannot read it.
- The relay keeps only what it needs to connect devices and send notifications: device ID, computer ID, an anonymous subscription ID, push token, platform and last-seen time.
- No ads, no analytics SDKs, no tracking.
alull ("the developer") operates the kterm app, the kterm-host program for computers and the relay server (together, "the Service"). This policy explains what information the Service processes, why, and for how long.
1. How the Service works
- App (iPhone, iPad, Android, desktop): where you view and type into the terminal.
- kterm-host: a program you install on your own computer (Mac, Windows, Linux). Terminal sessions run there.
- Relay: forwards ciphertext when the app and computer are not on the same network. On the same Wi-Fi they connect directly without the relay.
On first pairing, the app and the computer exchange public keys through a QR code. All terminal data is then end-to-end encrypted with standard algorithms (X25519, ChaCha20-Poly1305). Keys exist only on the app and the computer, never on the relay.
2. Information we process and why
2-1. Stored by the relay
| Item | Description | Purpose |
| Device ID | A random 22-character identifier derived from a public key the app creates on first launch. Not linked to your name or phone number. | Authentication, linking devices to computers |
| Computer ID | An identifier derived from a public key created by kterm-host | Authentication, linking devices to computers |
| Device–computer links | Which device IDs have connected to which computer IDs | Notification eligibility, plan status |
| Subscription check | The relay asks RevenueCat whether the device ID has Pro and remembers the answer briefly (up to 10 minutes). No payment data is stored (the RevenueCat user ID equals the device ID). | Checking Pro subscription status |
| Plan status | Whether Pro is active and when it expires, as returned for that ID | Applying Pro features |
| Push token | A notification address issued by Firebase Cloud Messaging, only if you allow notifications | Sending "waiting for input" notifications |
| Platform | One of ios, android, macos, windows, linux | Choosing the notification route, compatibility |
| Last seen | When the device or computer last connected to the relay | Deleting records that are no longer used |
The relay uses the IP address of an active connection to keep it open and to prevent abuse (limits on concurrent connections per IP) in memory only, and never writes them to logs or files.
2-2. What we do not collect
- Terminal input and output, commands, file contents, session names, working directories
- Computer and device names (e.g. "Alex's iPad") — these travel only inside the end-to-end encryption
- Name, email, phone number, address, password — there are no accounts
- Location, contacts, photos, advertising identifiers
- Payment card details — Apple and Google handle payment and do not share them with the developer
Notification text is fixed ("A session is waiting for input"). Session names and agent questions are never sent to the notification service.
2-3. Stored only on your devices
- Computer (kterm-host): the list of devices you approved (device public key and device name), the computer's keys and settings. This stays on your computer.
- App: the device's keys, the list of paired computers (name, public key, addresses) and settings. This stays on your device.
Beta sign-up
If you email us to join the beta, we use your email address only to send test invitations (Google Play closed testing, TestFlight) and beta notices, and delete it when the beta ends. This is information you send us yourself, not something the app collects.
3. Retention and deletion
- Relay records for a device are deleted without delay when you remove the device in the app or unpair it on the computer.
- If you uninstall the app without removing the device, the record is deleted automatically 90 days after it was last seen.
- Purchase records held by RevenueCat may be retained for periods required by law (e.g. Korean e-commerce record-keeping rules). (purchase records are kept by the stores and RevenueCat, not by kterm)
- Relay records are deleted immediately from the state file and are not backed up.
4. Processors and international transfers
We never sell personal information or share it for advertising.
| Recipient | Task | Data | Location · timing · method | Retention |
| Oracle Cloud Infrastructure (Oracle Corporation) | Relay hosting | Items in 2-1 | Republic of Korea (Seoul region) — not an international transfer | As in section 3 |
| RevenueCat, Inc. | Subscription verification and status | RevenueCat app user ID, purchase history (store receipts), OS and app version, IP address | United States · on purchase and status checks · encrypted connections from the app and server | Until no longer needed or deletion is requested (except legally required records) |
| Google LLC (Firebase Cloud Messaging) | Push notifications (via Apple Push Notification service on iPhone) | Push token, fixed notification text | United States · when notifications are enabled and sent · encrypted connections | Until the token is invalidated or the device is removed |
| Apple Inc. (App Store) · Google LLC (Google Play) | Distribution, subscription billing and refunds | Payment details you give the store directly | Per each company's privacy policy | Per each company's policy |
To avoid these transfers, keep notifications off and do not subscribe. Free features keep working.
5. App permissions
Each permission is requested the first time you use the related feature. Declining it only disables that feature.
iPhone · iPad
| Permission | Purpose | If declined |
Camera (NSCameraUsageDescription) | Scanning the pairing QR code, and photos you take to send to your computer (optional). QR frames are processed on the device. | Paste the pairing link instead |
Photos (NSPhotoLibraryUsageDescription) | Photos or screenshots you pick are sent only to your own computer (end-to-end encrypted, never stored on kterm servers). | Only the attach feature is unavailable |
Microphone (NSMicrophoneUsageDescription) | Voice input (Pro). No recordings are kept. | Voice input is unavailable |
Speech recognition (NSSpeechRecognitionUsageDescription) | Turning speech into text with iOS speech recognition; depending on settings Apple may process the audio. Text is sent to your computer only after you confirm it. | Voice input is unavailable |
Local network (NSLocalNetworkUsageDescription) | Connecting directly to your computer on the same Wi-Fi without the relay | Connections always go through the relay |
| Notifications | Alerts when a session is waiting for input (Pro) | No alerts |
Face ID / Touch ID (NSFaceIDUsageDescription) | Optional app lock. Biometric data stays in the device's secure hardware; the app cannot read it. | No app lock |
Android
Permissions declared by the installed package, split between those the app declares and those added by libraries.
Declared by the app
| Permission | Purpose |
INTERNET | Talking to your computer and the relay |
CAMERA | Scanning the pairing QR code. Frames are not stored or sent. |
RECORD_AUDIO | Voice input (Pro). No recordings are kept. |
POST_NOTIFICATIONS | "Waiting for input" alerts (Pro) |
USE_BIOMETRIC | Optional app lock |
USE_FINGERPRINT | Optional app lock · fingerprint on older Android (local_auth library) |
Added automatically by libraries (not requested by the app itself)
| Permission | Library · purpose |
ACCESS_NETWORK_STATE | Firebase · checking connectivity |
WAKE_LOCK | Firebase Cloud Messaging · handling incoming notifications |
VIBRATE | Notification vibration (trial-ending reminder, waiting-for-input alerts) |
DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION | Added automatically by AndroidX; app-internal only — prevents other apps from receiving this app's internal broadcasts |
com.google.android.c2dm.permission.RECEIVE | Firebase Cloud Messaging · receiving push messages |
com.android.vending.BILLING | Google Play Billing (RevenueCat) · subscription purchases |
Never requested: location (ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION), contacts (READ_CONTACTS), photos/media (READ_MEDIA_IMAGES), storage (READ_EXTERNAL_STORAGE), phone, SMS, calendar — none of these are declared. There is no advertising ID permission (AD_ID) either.
6. Your rights
You may ask to access, correct, delete or stop the processing of your information at any time.
- In the app: Settings > Delete my data deletes all relay records for this device. To remove a single computer, tap ⋮ > Remove from list in the computer list. Unpairing the device in kterm-host on your computer also deletes the link to that computer.
- By email: if you already uninstalled the app, write to alulltro@gmail.com. Because there are no accounts, please include the device ID shown in the app's settings (or the order number on your subscription receipt) so we can find your records. We respond within 10 days.
- See Data deletion for details.
7. Security
- End-to-end encryption of terminal data (X25519 key agreement, ChaCha20-Poly1305), for both direct and relayed connections.
- Relay connections use TLS; devices prove their ID with an Ed25519 signature.
- The relay holds no keys and no terminal content, so a server breach would not reveal terminal data.
- Server access is limited to the developer and key-based authentication.
8. Children
The Service is not directed to children under 14 and we do not knowingly collect their information. If we learn that we have, we delete it without delay.
9. Cookies and tracking
Neither the app nor this website uses cookies, advertising identifiers or analytics/tracking tools.
10. Contact
Privacy officer: alull · alulltro@gmail.com
11. Changes
We will announce changes on this page and in the app at least 7 days before they take effect (30 days for changes that reduce your rights). If the Korean and English versions differ, the Korean version prevails.
Effective date: October 11, 2026