보안 및 데이터
신뢰할 수 있는 호스트 (known_hosts)
호스트에 처음 연결하면 그 공개 키 지문(SHA-256)을 포착하여 확인 후 저장합니다. 이후 연결은 지문을 비교하며 — 만약 바뀌면 명확한 경고를 받습니다.
목록은 설정 → 보안 → 신뢰할 수 있는 호스트에서 관리합니다 — 각 항목은 호스트, 키 알고리즘(Ed25519, RSA, ECDSA…), 지문을 보여주며 제거할 수 있습니다.
연결은 어떻게 보호되는가
DR-Terminal은 능동적 공격자와 적대적 서버에 대비해 강화된 자체 SSH 구현을 사용합니다:
- 호스트 키는 핸드셰이크 중, 어떤 비밀이든 전송되기 전에 확인됩니다. 중간자가 잘못된 키를 제시하면 연결은 키 교환 단계에서 중단됩니다 — 비밀번호나 개인 키는 절대 기기를 떠나지 않습니다.
- 기본적으로 강력한 알고리즘만 사용합니다. 다운그레이드에 취약한 레거시 알고리즘 — SHA-1 서명 및 MAC,
ssh-rsa, 1024비트 Diffie-Hellman — 은 꺼져 있습니다. 연결은 최신 키 교환(Curve25519, ECDH, Diffie-Hellman ≥ 2048비트), 암호(AES-GCM, ChaCha20-Poly1305, AES-CTR) 및 호스트 키 종류(Ed25519, ECDSA, RSA-SHA2)를 사용합니다. 더 약한 것만 제공하는 서버는 연결할 수 없습니다. - 자동 다운그레이드 없음. 서버가 사용하는 서명은 협상된 것과 일치해야 하므로, 몰래 더 약한 것으로 되돌아갈 수 없습니다.
- Terrapin(CVE-2023-48795)이 완화됩니다 — 엄격한 키 교환을 통해서.
- 적대적이거나 버그가 있는 서버에 강합니다. 네트워크에서 들어오는 패킷 길이, 메시지 필드, 채널 윈도우는 모두 범위 검사를 거치므로, 악의적인 서버가 앱을 다운시키거나 메모리를 고갈시킬 수 없습니다 — 인증 이전에도 마찬가지입니다.
이러한 보호는 자동으로 켜집니다. 사용자는 위의 신뢰할 수 있는 호스트 프롬프트를 통해서만 이들과 상호 작용합니다.
내보낸 키
개인 키를 변환하거나 내보내면서(SSH 키 → 변환) 암호를 설정하면, 암호화는 형식별로 선택된 강력한 키 파생 함수를 사용합니다 — OpenSSH는 bcrypt, PKCS#8은 PBKDF2, PuTTY PPK v3는 Argon2id — 그리고 모든 솔트와 IV는 암호학적으로 안전한 난수 생성기에서 나옵니다. 변환기는 PEM과 바이너리 DER 양쪽에서 OpenSSH, PKCS#8, PKCS#1 및 PuTTY PPK(v2/v3)를 읽고 씁니다.
비밀은 어디에 저장되는가
비밀번호, 개인 키, 암호는 절대 연결 JSON으로 직렬화되지 않습니다. 곧바로 플랫폼의 보안 저장소로 들어갑니다:
- Android — EncryptedSharedPreferences, 하드웨어 Keystore로 뒷받침됨.
- iOS — Keychain(활성화했다면 생체 인증으로 보호됨).
- 데스크톱 — AES-256-GCM으로 암호화된 파일, 키는 사용자 프로필에서 파생됨.
암호화된 구성 백업
설정 → 구성 → 백업 내보내기는 비밀번호로 보호된 .drterminal 파일을 생성합니다. 여기에는 연결(자격 증명 포함), 그룹, 신뢰할 수 있는 호스트, SSH 키, SFTP 북마크, 명령 기록, 강조 규칙, 스니펫, 시리얼 및 Telnet 프로파일, 터미널 외관과 설정, 그리고 (모바일에서는) DevOps 키보드 구성이 담깁니다. 백업 가져오기는 같은 묶음을 복원합니다 — 기기 간 이동 시 유용합니다.
형식: AES-256-GCM으로 암호화된 JSON. 비밀번호는 파일에 절대 저장되지 않습니다 — 암호화 키를 파생하는 데에만 쓰입니다(PBKDF2, SHA-256 100,000회 반복).
~/.ssh/config 가져오기
데스크톱에서는 기존 OpenSSH 구성에서 호스트를 일괄 가져올 수 있습니다. 가져오기 기능은 Host, HostName, User, Port, IdentityFile, ProxyJump 항목을 파싱하여 저장된 연결로 추가합니다. IdentityFile이 참조하는 키 파일은 디스크에서 SecureStorage로 로드됩니다.
로그 수준
설정 → 터미널 → 파일 로그 수준에서 ~/.dr-terminal/logs/(데스크톱) 또는 모바일의 동등한 위치에 무엇이 도달할지 고릅니다. 기본값: ERROR — 최소한의 잡음. 진단을 위해서는 DEBUG로 전환하세요.